@Eeap
velog
@Eeap
전체 방문자
오늘
어제
  • 전체 (168)
    • osam (1)
    • Cloud (21)
      • Docker (2)
      • AWS (13)
    • AI & Data (7)
    • Algorithm (76)
      • Baekjoon (75)
      • Codeforces (1)
    • Language (18)
      • Java (18)
    • Back-end (17)
      • Spring (3)
      • JSP & Servlet (12)
      • Go (2)
    • 일상 (4)
    • 기타 (8)
    • git (1)
    • Infra (9)
      • Apache Kafka (5)
      • Kubernetes (4)
      • 기타 (0)

블로그 메뉴

  • 홈
  • 태그

공지사항

인기 글

태그

  • 티스토리챌린지
  • sagemaker unified studio
  • invokemodel api
  • CLASS
  • AWS CodeStar
  • converse api
  • 오블완
  • java
  • bedrock
  • bedrock api
  • SageMaker
  • flink
  • AWS CodeCatalyst
  • Agent
  • 심폴릭링크
  • AWS CodeArtifact
  • 인터페이스
  • Python
  • bedrock agent
  • knowledge bases

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
@Eeap

velog

Back-end/JSP & Servlet

servlet cookie를 이용한 상태 유지

2022. 7. 6. 23:01
반응형

이전까지 공부했던 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
    'Back-end/JSP & Servlet' 카테고리의 다른 글
    • JSP 코드 블럭
    • servlet get,post 메소드에 특화된 서비스 함수
    • servlet session객체를 이용한 상태 유지
    • servlet servlet context 상태 저장소
    @Eeap
    @Eeap

    티스토리툴바