체크박스의 입력값이 있다면,
쿠키객체를 생성하고
setMaxAge()메서드로 쿠키를 유지할 시간을 세팅한다.
아니라면 같은이름의 쿠키객체를 선언하여 setMaxAge()를 0으로 설정하여 초기화 한다.
[RememberMe.java]
package ex07_cookie;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class RememberMe
*/
@WebServlet("/rememberMe")
public class RememberMe extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public RememberMe() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 요청 인코딩
request.setCharacterEncoding("UTF-8");
// 요청 파라미터 (id, remember_me)
String id = request.getParameter("id"); // 입력 상자의 입력이 없으면 빈 문자열("")
String remember_me = request.getParameter("remember_me"); // checkbox의 체크가 없으면 null
// 아이디 기억하기 체크했다면 쿠키에 id를 저장한다.
Cookie cookie = null;
if(remember_me != null) { // if(remember_me.equals("on")){ 과 동일함
cookie = new Cookie("remember_me", id);
cookie.setMaxAge(60 * 60 * 24 * 15); // 15일간 쿠키 유지
} else {
cookie = new Cookie("remember_me", "");
cookie.setMaxAge(0); // 쿠키 삭제를 위해 0초간 쿠키 유지
}
// 쿠키는 클라이언트에게 전달한다. (쿠키는 클라이언트가 저장한다.)
response.addCookie(cookie);
// main 화면으로 돌아가기
response.sendRedirect(request.getContextPath() + "/ex07_cookie/main.jsp");
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
[main.jsp]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<c:set var="contextPath" value="${pageContext.request.contextPath}" />
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="https://code.jquery.com/jquery-3.7.1.min.js" integrity="sha256-/JqT3SQfawRcv/BIHPThkBvs0OEvtFFmqPF/lYI/Cxo=" crossorigin="anonymous"></script>
</head>
<body>
<%
String remember_me = ""; // 쿠키 remember_me가 없으면 빈 문자열("")을 사용하기 위해서 초기화를 진행함
Cookie[] cookies = request.getCookies();
if(cookies != null){
for(int i = 0; i < cookies.length; i++){
if(cookies[i].getName().equals("remember_me")){
remember_me = cookies[i].getValue();
break;
}
}
}
pageContext.setAttribute("remember_me", remember_me);
%>
<div>
<form method="post" action="${contextPath}/rememberMe">
<div>
<label for="id">아이디</label>
<input type="text" name="id" id="id">
</div>
<div>
<label for="pw">비밀번호</label>
<input type="password" name="pw" id="pw">
</div>
<div>
<button type="submit">로그인</button>
</div>
<div>
<input type="checkbox" id="remember_me" name="remember_me">
<label for="remember_me">아이디 기억</label>
</div>
</form>
</div>
<script>
if('${remember_me}' !== ''){
$('#id').val('${remember_me}');
$('#remember_me').prop('checked', true);
}
</script>
</body>
</html>


