반응형
session
세션 만들기 (★★★ 매우 중요함! 외워~ ★★★)
HttpSession session = request.getSession();
session.setAttribute("mname", dto.getMname()); // mname이라는 이름으로 세션 생성
session.setAttribute("mid", dto.getMid()); // mid라는 이름으로 세션 생성
board.jsp 부분의 아래 내용 중요함.
${sessionScope.mname }님 반갑습니다~
<li onclick="url('./logout')">로그아웃</li> <!-- 세션을 종료시키고 다시 로그인 페이지로 (서블릿만 필요함, jsp 필요없음) -->
detail.jsp
게시글을 클릭했을 때, 삭제와 수정 아이콘이 나오도록 해야한다.
내가 쓴 글의 삭제와 수정은 나만 할 수 있도록 수정했다.
<article>
<div class="detailDIV">
<div class="detailTITLE">
${detail.title }
</div>
<div class="detailWRITECOUNT">
<div class="detailWRITE">
${detail.write }
<c:if test="${sesseionScope.mname ne null && detail.mid eq sessionScope.mid }">
<img alt="삭제" src="./img/delete1.png" onclick="del()">
<img alt="수정" src="./img/update1.png" onclick="update()">
</c:if>
</div>
<div class="detailCOUNT">${detail.count }</div>
</div>
<div class="detailCONTENT">
${detail.content }
</div>
login.java
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.websocket.Session;
import com.coffee.dao.MemberDAO;
import com.coffee.dto.MemberDTO;
@WebServlet("/login")
public class Login extends HttpServlet {
private static final long serialVersionUID = 1L;
public Login() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession();
String url = "";
if(session.getAttribute("mname") != null ) {
url = "alreadylogin.jsp";
} else {
url = "login.jsp";
}
RequestDispatcher rd = request.getRequestDispatcher(url);
rd.forward(request, response);
}
// 아래의 방법도 가능!
// RequestDispatcher rd = null;
// if (session.getAttribute("mname") != null) {
// rd = request.getRequestDispatcher("alreadylogin.jsp");
// } else {
// rd = request.getRequestDispatcher("login.jsp");
// }
// rd.forward(request, response);
// }
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 2024-01-12 웹 서버 프로그래밍 구현
if(request.getParameter("id") != null && request.getParameter("pw") != null) {
MemberDTO dto = new MemberDTO();
dto.setMid(request.getParameter("id"));
dto.setMpw(request.getParameter("pw"));
MemberDAO dao = new MemberDAO();
dto = dao.login(dto);
if(dto.getCount() == 1) {
System.out.println("정상 로그인");
// 세션 만들기 (★★★ 매우 중요함! 외워~ ★★★)
HttpSession session = request.getSession();
session.setAttribute("mname", dto.getMname()); // mname이라는 이름으로 세션 생성
session.setAttribute("mid", dto.getMid()); // mid라는 이름으로 세션 생성
// 페이지 이동 = board
response.sendRedirect("./board");
} else {
System.out.println("로그인 불가 오류");
// 페이지 이동 = login?error=4567
response.sendRedirect("./login?error=4567");
}
} else {
}
}
}
logout.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <!-- 선언문 core태그 -->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>로그아웃 페이지입니다.</title>
<link href="./css/index.css" rel="stylesheet">
<link href="./css/menu.css" rel="stylesheet">
<script type="text/javascript" src="./js/menu.js"></script>
</head>
<body>
<header>
<%@ include file="menu.jsp"%>
</header>
<div class="main">
<div class="mainStyle">
<article>
<h1 style="text-align: center">정상적으로 로그아웃 되었습니다.</h1>
</article>
</div>
</div>
<footer>
<c:import url="footer.jsp"/>
</footer>
</body>
</html>
logout.java
<세션 쿠키>
세션 | 쿠키 | |
서버에 저장됨. | 클라이언트에 저장(브라우저) | |
로그인 정보 | 쇼핑정보, 장바구니, 방문 정보 등 | |
자바 | 스크립트 |
60분이 지나면 세션이 자동 종료되도록.
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
@WebServlet("/logout")
public class Logout extends HttpServlet {
private static final long serialVersionUID = 1L;
public Logout() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 세션 종료
HttpSession session = request.getSession();
if (session.getAttribute("mname") != null) {
session.setMaxInactiveInterval(3600); // 시간 연장
// System.out.println("세션 유효시간 : " + session.getMaxInactiveInterval());
// System.out.println("mname : " + session.getAttribute("mname"));
session.removeAttribute("mname");
}
if(session.getAttribute("mid") != null){
// System.out.println("mid : " + session.getAttribute("mid"));
session.removeAttribute("mid");
}
session.invalidate(); // 위의 removeAttribute를 따로 할 필요없이, 세션 모두 삭제
// invalidate()는 세션 자체를 무효화 및 제거
// removeAttribute()는 현재 세션에서 특정 key-value만 제거
// removeAttribute()로 키만 제거하면 httpSession 인스턴스가 남아있어 invalidate() 하는 것이 좋음.
// login 페이지로 전송
// response.sendRedirect("./logout.jsp");
RequestDispatcher rd = request.getRequestDispatcher("logout.jsp");
rd.forward(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
write.java
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.coffee.dao.BoardDAO;
import com.coffee.dto.BoardDTO;
@WebServlet("/write")
public class Write extends HttpServlet {
private static final long serialVersionUID = 1L;
public Write() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 세션 검사
HttpSession session = request.getSession();
if(session.getAttribute("mname") == null) {
response.sendRedirect("./login"); // url까지 변경해서 화면 보여주기
} else {
RequestDispatcher rd = request.getRequestDispatcher("write.jsp"); // url고정, 화면만 표시 : 로그인했으면 write 페이지로.
rd.forward(request, response);
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 한글처리
request.setCharacterEncoding("UTF-8");
// 세션에 들어있는 mid 가져오기 24-01-15
HttpSession session = request.getSession();
// if문으로 로그인 되어있는(=세션이 있는) 사람만 아래 로직 수행하도록 변경
if(session.getAttribute("mid") == null || session.getAttribute("mname") == null) {
// 로그인하지 않았다면 login 으로 전송
response.sendRedirect("./login?login=login");
} else {
// 로그인했다면 아래 로직을 수행하도록
String title = request.getParameter("title");
String content = request.getParameter("content");
// DAO에 write 메소드 만들기
BoardDTO dto = new BoardDTO();
dto.setTitle(title);
dto.setContent(content); // dto에 title, content를 담음.
dto.setMid((String)session.getAttribute("mid")); // session은 무조건 object 처리함.
BoardDAO dao = new BoardDAO();
int result = dao.write(dto); // 위에서 dto에 담은 두개를 dto로 모두 던짐.
System.out.println("글쓰기 결과는 : " + result);
// 페이지 이동하기 = url값과 화면 모두 이동하기 (디스패쳐는 url은 그대로고 화면만 바뀜)
if(result == 1) {
response.sendRedirect("./board"); // 글쓰기 정상작동이면 board로 이동
} else {
response.sendRedirect("./error.jsp");
}
}
}
}
반응형
'개발 공부 Today I Learned' 카테고리의 다른 글
[국비 40일차 TIL] 게시판 페이징, 회원가입 (0) | 2024.01.17 |
---|---|
[국비 39일차 TIL] 마이페이지, pw 변경 (1) | 2024.01.16 |
[국비 37일차 TIL] 게시판 로그인 페이지 만들기 (0) | 2024.01.12 |
[국비 36일차 TIL] 게시판 만들기 (Delete, Util. update) (0) | 2024.01.11 |
[국비 35일차 TIL] 게시판 만들기 (게시글, 글쓰기) (1) | 2024.01.10 |
댓글