<!--ex01.jsp-->
<form action="ex01-action.jsp">
<input type="text" name="memo" placeholder="메모">
<input type="submit" value="쿠키 만들기">
</form>
<%
//ex01-action.jsp
String memo = request.getParameter("memo");
// ★ new Cookie(쿠키이름, 쿠키값)
Cookie cookie = new Cookie("memo", memo);
// ★ 쿠키의 유효시간을 설정한다. 60초, 60분, 24시간, 7일
// 만료된 시간이 모두 지나면 쿠키는 소멸한다
cookie.setMaxAge(60 * 60 * 24 * 7);
// ★ 서버에서 생성한 쿠키 객체를 클라이언트에게 보내기 위해서 응답에 추가한다
response.addCookie(cookie);
// 쿠키는 클라이언트에 저장되므로, 포워드 및 리다이렉트에 의한 차이가 없다
// 오히려 "재방문"시에 쿠키가 적용되기 때문에 리다이렉트를 지정해야 한다
response.sendRedirect("ex01.jsp");
%>
위 코드에서 별(★)표시한 내용이 쿠키생성에 가장 핵심적인 코드이다!
<%
// 다시 ex01.jsp로 돌아와서 코드 적기!
// 클라이언트가 서버에 방문시 가지고 있던 쿠키를 요청에 담아서 보낸다
// 첫번째 방문이라면 cookies 배열의 값은 null일 수도 있다
Cookie[] cookies = request.getCookies();
// 쿠키의 값은 항상 문자열 형태이다. 쿠키의 값을 저장할 변수를 미리 만들어둔다
String value = "";
// cookies가 null이면 cookies.length에서 NullPointerException이 발생할 수도 있다
for(int i=0; cookies != null && i<cookies.length; i++) {
Cookie c = cookies[i];
if(c.getName().equals("memo")) { // 내가 저장한 쿠키의 이름 memo와 일치하는 쿠키를 찾는다
value = c.getValue();
break;
}
}
out.print("<p>쿠키의 값 : " + value + "</p>");
%>
ex01.jsp를 실행한 후 메모를 입력하면
해당 내용이 쿠키로 저장되어 아래에 나타나게 된다.
스크립틀릿이 아닌 EL Tag도 똑같이 사용 가능하다
<p>쿠키의 값 : ${cookie.memo.value }</p>
쿠키는 문자열 형태를 저장할 수 있는데 띄어쓰기 및 특수문자를 넣게되면 에러가 뜬다.
만약 띄어쓰기나 특수문자를 포함하고 싶다면 URLEncoding을 수행하여 저장해야 한다.
<%@ page import="java.net.URLEncoder, java.net.URLDecoder" %>
<%
// ex01-action.jsp
Cookie cookie = new Cookie("memo", URLEncoder.encode(memo, "UTF-8"));
%>
<%@ page import="java.net.URLDecoder" %>
<%
// ex01.jsp
out.print("<p>쿠키의 값 : " + URLDecoder.decode(value, "UTF-8") + "</p>");
%>
( 쿠키 사용해보기에 있는 코드에서 위 내용으로 바꿔주면 된다!)
🔥 한줄평
쿠키는 서버에서 생성!
생성된 쿠키를 response에 실어 클라이언트에게 보낸 후 저장
클라이언트가 재방문시 저장된 쿠키를 request에 쿠키를 실어서 서버에 보낸다!