본문 바로가기

Servlet&JSP

Servlet의 상태값 유지하기3 - Cookie

ServletContext, Session 둘다 서버쪽에 데이터를 보관한다.

클라이언트쪽에서 데이터를 보관해놓고 쓸수도있는데 이때 Cookie를 사용한다.

 

@WebServlet("/Cal_Cookie")
public class Cal_Cookie extends HttpServlet {
 
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp)
            throws IOException {
 
        PrintWriter out = resp.getWriter();
        String v_ = req.getParameter("v");
        String op = req.getParameter("operator");
 
        Cookie[] cookies = req.getCookies();
 
        int v = 0;
        if(!v_.equals(""))
            v = Integer.parseInt(v_);
 
        if (op.equals("=")) {
 
            int x = 0;
            String operator = "";
            for (Cookie c : cookies)
                if (c.getName().equals("value")) {
                    x = Integer.parseInt(c.getValue());
                    break;
                }
            for (Cookie c : cookies)
                if (c.getName().equals("op")) {
                    operator = c.getValue();
                    break;
                }
 
            int y = v;
            int result = switch (operator) {
                case "+" -> x + y;
                case "-" -> x - y;
                case "x" -> x * y;
                default -> x / y;
            };
            out.println("result is "+result);
        } else {
            Cookie vcookie = new Cookie("value"String.valueOf(v));
            Cookie ocookie = new Cookie("op", op);
            vcookie.setMaxAge(60 * 60 * 24);
            vcookie.setPath("/");
            ocookie.setPath("/");
            resp.addCookie(vcookie);
            resp.addCookie(ocookie);
            resp.sendRedirect("/Cookie.jsp");
        }
    }
}
 
cs
 
 

 

웹어플리케이션 하나에만 포함된 세션과는 다르게

다른 웹어플리케이션의 쿠키들도 클라이언트의 PC에 같이 저장하고있기때문에

특정 쿠키를 바로 불러올수는 없다.

 

Cookie[] cookies = req.getCookies();

 

일단 저장된 모든 쿠키들을 배열로 불러온다.

 

for (Cookie c : cookies)

 

받아온 배열중에서 원하는 쿠키를 뽑아내기위해 for문을 돌린다.

value값과 op를 각각 찾기위해 for문을 2번 돌리는데

뽑아낸 value값은 연산에 사용해야 하기 때문에 int로 parsing한다.

 

.setMaxAge();

세션은 서블릿의 life cycle과 함께하기 때문에 웹페이지를 닫으면 세션값도 같이 소멸된다.

웹페이지를 닫은 후에도 저장값을 계속 보관해야 할경우 쿠키의 setMaxAge() 메소드를 사용해서 

쿠키의 유효기간을 늘릴수 있다. 단위는 1s, 코드를 읽기 편하게 하기 위해 시,분,초를 나눠서 연산식으로 작성한다.

 

 

.setPath();

 

쿠키를 저장할 범위를 제한할수 있다. '/'만 입력시 루트 아래로 모든페이지의 쿠키를 저장하고

특정경로의 페이지들만 저장하려면 '/경로명' 식으로 작성한다.

 

 

'Servlet&JSP' 카테고리의 다른 글

EL 표현식  (0) 2021.12.26
MVC model 개념  (0) 2021.12.17
Servlet의 상태값 유지하기2 - Session Scope  (0) 2021.12.14
Servlet의 상태값 유지하기1 - Application Scope  (0) 2021.12.13
간단한 Servlet 예제 구현  (0) 2021.12.07