08 Cookie(쿠키), Session(세션)

p186 - src/main/java/boot/start/servlet/CookieServlet

@WebServlet(name = "cookieServlet", urlPatterns = "/cookie")
public class CookieServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 쿠키 배열 가져오기
        Cookie[] cookies = request.getCookies();

        if (cookies != null) {
            for (Cookie cookie : cookies) {
                if ("user".equals(cookie.getName())) {
                    // 쿠키 값 가져오기
                    response.getWriter().println("User cookie found: " + cookie.getValue());
                    return;
                }
            }
        }

        response.getWriter().println("No user cookie found");
    }
}

p189 - src/main/java/boot/start/servlet/LoginServlet

@WebServlet(name = "loginServlet", urlPatterns = "/login")
public class LoginServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 이미 로그인되어 있는지 확인
        HttpSession session = request.getSession();  // 기존 세션이 있으면 가져오고, 없으면 null 반환
        if (session != null && session.getAttribute("username") != null) {
            // 이미 로그인한 사용자면 프로필 페이지로 리다이렉트
            response.sendRedirect("/jsp/login/profile.jsp");
        } else {
            // 로그인하지 않은 사용자에게 로그인 폼을 제공
            request.getRequestDispatcher("/jsp/login/login.jsp").forward(request, response);
        }
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 클라이언트로부터 전송된 사용자 아이디와 비밀번호
        String username = request.getParameter("username");
        String password = request.getParameter("password");

        // 간단한 하드코딩된 사용자 검증 (실제로는 데이터베이스에서 검증해야 함)
        if ("admin".equals(username) && "password".equals(password)) {
            // 로그인 성공 시 세션에 사용자 정보 저장
            HttpSession session = request.getSession();
            session.setAttribute("username", username);

            // 프로필 페이지로 리다이렉트
            response.sendRedirect("/profile");
        } else {
            // 로그인 실패 시 다시 로그인 페이지로
            response.sendRedirect("/jsp/login/login.jsp?error=true");
        }
    }
}

p189 - src/resources/webapp/login/login.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html>
<head>
    <title>Login Page</title>
</head>
<body>
<h2>Login</h2>

<form action="/login" method="post">
    <label for="username">Username:</label>
    <input type="text" id="username" name="username" required><br><br>

    <label for="password">Password:</label>
    <input type="password" id="password" name="password" required><br><br>

    <input type="submit" value="Login">
</form>

<!-- 로그인 실패 시 에러 메시지 표시 -->
<%
    String error = request.getParameter("error");
    if ("true".equals(error)) {
%>
<p style="color:red;">Invalid username or password</p>
<% } %>
</body>
</html>

p190 - src/main/java/boot/start/servlet/ProfileServlet

@WebServlet(name = "logoutServlet", urlPatterns = "/logout")
public class LogoutServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 세션 무효화 (로그아웃 처리)
        HttpSession session = request.getSession(false);
        if (session != null) {
            session.invalidate();
        }

        // 로그아웃 후 로그인 페이지로 리다이렉트
        response.sendRedirect("/jsp/login/login.jsp");
    }
}

p190 - src/main/java/boot/start/servlet/LogoutServlet

@WebServlet(name = "logoutServlet", urlPatterns = "/logout")
public class LogoutServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 세션 무효화 (로그아웃 처리)
        HttpSession session = request.getSession(false);
        if (session != null) {
            session.invalidate();
        }

        // 로그아웃 후 로그인 페이지로 리다이렉트
        response.sendRedirect("/jsp/login/login.jsp");
    }
}

p190 - src/main/webapp/jsp/login/profile.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
  <title>Profile Page</title>
</head>
<body>
<h2>Profile Page</h2>

<!-- 세션에서 사용자 이름을 출력 -->
<p>Welcome, <c:out value="${sessionScope.username}" /></p>

<form action="/logout" method="get">
  <input type="submit" value="Logout">
</form>
</body>
</html>

Last updated