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