반응형
이전까지 공부했던 application(servletcontext)와 session은 서버 측에 저장하는 상태 값이였다면
앞으로 공부할 cookie는 client 쪽에서 갖고 있는 상태 값 저장소이다.
cookie를 처음 보낼 때는 WAS측에서 client 측으로 쿠키를 만들어서 보내준다
Cookie cookie = new Cookie(key,value);
res.addCookie(cookie);
그 다음 서버 측에서 필요할 때마다 client의 cookie를 읽을 수 있다.
Cookie[] cookies = req.getCookies(); //쿠키가 하나가 아니라 여러개로 심어질 수 있기 때문에 배열로 옴
String _c = "";
if (cookies != null)
for (Cookie cookie : cookies)
if(키값.equals(cookie.getName())) //키값을 찾는 과정
_c = cookie.getValue();
## ctrl+shift+O를 통해서 필요한 import 가능
cookie 실습
아래의 코드는 쿠키를 만들고 읽어오는 실습 코드이다.
참고로 쿠키를 만들때 value 값은 항상 문자열이 와야 해서 정수를 String으로 변환해서 넘겨줘야한다.
package com.newlec.web;
import java.io.IOException;
import java.io.PrintWriter;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
@WebServlet("/calc2")
public class Calc2 extends HttpServlet{
@Override
protected void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
PrintWriter out = res.getWriter();
res.setCharacterEncoding("UTF-8");
res.setContentType("text/html; charset=UTF-8");
Cookie[] cookies = req.getCookies();
String v_ = req.getParameter("v");
String op = req.getParameter("op");
int v=0;
if (!v_.equals("")) v = Integer.parseInt(v_);
if (op.equals("=")) {
int x = 0;
for (Cookie c : cookies)
if (c.getName().equals("value")) {
x = Integer.parseInt(c.getValue());
break;
}
int y = v;
int result=0;
String operator = "";
for (Cookie c : cookies)
if (c.getName().equals("op")) {
operator = c.getValue();
break;
}
if (operator.equals("+")) result = x+y;
else result = x-y;
out.println("result is "+result);
}
else {
Cookie valcookie = new Cookie("value", String.valueOf(v)); //cookie값은 문자열 형태로 보내야함!
Cookie opcookie = new Cookie("op", op);
res.addCookie(valcookie);
res.addCookie(opcookie);
}
}
}
Path 설정
cookie는 setPath라는 메소드를 통해 어떤 요청이 들어오는지에 따라 쿠키를 보낼건지 말건지 결정할 수 있다.
예를 들어 client가 모든 경로로 쿠키를 보낼 수 있도록 하기 위해선 밑에 예시처럼 루트 디렉토리로 Path 설정을 하면 되지만
Cookie valcookie = new Cookie("value", String.valueOf(v)); //cookie값은 문자열 형태로 보내야함!
Cookie opcookie = new Cookie("op", op);
valcookie.setPath("/");
opcookie.setPath("/");
res.addCookie(valcookie);
res.addCookie(opcookie);
다음과 같이 특정 경로나 디렉토리로만 cookie를 보내기 위해서 그에 맞는 경로를 설정해주면 된다.
Cookie valcookie = new Cookie("value", String.valueOf(v)); //cookie값은 문자열 형태로 보내야함!
Cookie opcookie = new Cookie("op", op);
valcookie.setPath("/cal2");
opcookie.setPath("/cal2");
res.addCookie(valcookie);
res.addCookie(opcookie);
maxAge 설정
보통 쿠키는 웹 브라우저가 닫힐 때 같이 사라지지만 maxAge라는 메소드를 이용해서 쿠키의 만료 시간을 설정할 수 있다.
Cookie valcookie = new Cookie("value", String.valueOf(v)); //cookie값은 문자열 형태로 보내야함!
valcookie.setPath("/");
valcookie.setMaxAge(24*60*60);
res.addCookie(valcookie);
보통 초 단위로 인식 되며 위의 코드처럼 24시간을 만료시간으로 설정하기 위해선 24*60*60을 해주면 된다!
반응형
'Back-end > JSP & Servlet' 카테고리의 다른 글
JSP 코드 블럭 (0) | 2022.07.10 |
---|---|
servlet get,post 메소드에 특화된 서비스 함수 (0) | 2022.07.10 |
servlet session객체를 이용한 상태 유지 (0) | 2022.07.06 |
servlet servlet context 상태 저장소 (0) | 2022.07.03 |
servlet 입력으로 배열 받는 방법 (0) | 2022.07.03 |