HTTP Protocal 특징
예를 들어, 장바구니에 상품을 담아 두었는데, 페이지가 바뀌면 정보가 없어짐. 로그인 정보가 없음
따라서 쿠키에 장바구니 목록에 대한 정보 등을 담아두고 이후에 다시 페이지 요청을 할 때 쿠키도 함께 보내면서 이전의 장바구니 목록 상태가 반영된 페이지를 서버에게 전달받을 수 있는 것. 서버와 클라이언트는 stateless 상태이므로 서버는 장바구니의 변화를 알지 못함. 따라서 쿠키를 통해 그 변화를 알아차리는 것
package com.ssafy.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;
// 서블릿으로 업그레이드 시키고
// 쿠키를 한번 만들어 보자
// 쿠키 정보를 입력할 수 있는 cookie.jsp가 있는 상태
@WebServlet("/make")
public class MakeCookie extends HttpServlet{
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String key = request.getParameter("key");
String value = request.getParameter("value");
// 쿠키 생성
Cookie cookie = new Cookie(key, value);
// 유효시간(만료기간) > 초단위
cookie.setMaxAge(60); // 1분 유지
// 쿠키라고 하는 것은 직접 우리가 설정으로 지울 수 는 없을까?
cookie.setMaxAge(0); // 이렇게 쓰는 것이 쿠키 삭제와 동일하다.
// 쿠키 응답에 추가
response.addCookie(cookie);
response.sendRedirect("cookie1.jsp");
}
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2>현재 내 브라우저 안에 있는 쿠키 정보</h2>
<hr>
<%
// request에서 쿠키 찾기
// 쿠키는 어차피 클라이언트에 저장되어 있어서 (리다이렉트로 요청 보내도) request에서 찾아도 괜찮다???
// 쿠키 배열을 반환
Cookie[] cookies = request.getCookies();
if(cookies != null){
for(Cookie c : cookies){
String key = c.getName();
String value = c.getValue();
%>
<%= key %>:<%= value %>
<%
}
} else {
out.print("설정된 쿠키가 없습니다");
}
%>
<h2>쿠키설정</h2>
<form action="make" method="GET">
이름: <input type="text" name="key"> <br>
값: <input type="text" name="value"> <br>
<input type="submit" value="쿠키생성">
</form>
</body>
</html>