ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Cookie를 이용해 상태값 유지하기
    JSP, Servlet 2021. 12. 12. 23:14

    쿠키 저장하기(클라이언트에 보내기)
    Cookie cookie = new Cookie("c", String.valueOf(result));
    response.addCookie(cookie);

    쿠키 읽기
    Cookie[] cookies = request.getCookies();
    String _c = "";
    //쿠키의 키 값을 찾아서 맞는 값을 얻어야 함
    if(cookies != null)
        for(Cookie cookie : cookies)
            if("c".equals(cookie.getName()))
                _c = cookie.getValue();

     

     

    Cookie의 path 옵션
    서블릿이 여러 개일 때, 서블릿마다 다른 값을 쿠키에 저장하려고 하는 경우 쿠키는 같으면 안 됨.
    그 URL에 관련된 서블릿에게만 쿠키를 전달하려고 함

    valueCookie.setPath("/");
    opCookie.setPath("/");
    url을 설정하면 해당하는 url에서만 전달됨

     

     

     

    Cookie의 maxAge 옵션
    maxAge를 설정하지 않으면 브라우저가 닫힐 때 쿠키 값도 사라짐
    valueCookie.setMaxAge(60 * 60); //지금으로부터 1시간 동안은 쿠키가 살아있음

     

     


    <html>
    <head>
    	<meta charset="UTF-8">
    	<meta name="viewport" content="width=device-width, initial-scale=1.0">
    	<title>연습</title>
    </head>
    <body>
    	<form action="calc" method="post">
    		계산할 값을 입력 하세요. <br>
    		<div>
    			<label>입력 : </label>
    			<input type="text" name="value" />
    		</div>
    		<div>
    			<input type="submit" name="operator" value="+"/>
    			<input type="submit" name="operator" value="-"/>
    			<input type="submit" name="operator" value="="/>
    		</div>
    	</form>
    	
    </body>
    </html>
    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;
    
    
    @WebServlet("/calc")
    public class Calc extends HttpServlet {
    	
    	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		request.setCharacterEncoding("utf-8");
    		response.setCharacterEncoding("utf-8");
    		response.setContentType("text/html; charset=utf-8");
    		
    		Cookie[] cookies = request.getCookies();
    		
    		String v_ = request.getParameter("value");
    		String op = request.getParameter("operator");
    		
    		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")) {
    					//String이니까 정수형으로 변환
    					x = Integer.parseInt(c.getValue());
    					break;
    				}
    			}
    			int y = v;
    			
    			String operator = "";
    			for(Cookie c : cookies) {
    				if(c.getName().equals("op")) {
    					operator = c.getValue();
    					break;
    				}
    			}
    			
    			int result = 0;
    			
    			if(operator.equals("+")) {
    					result = x+y;
    			} else {
    					result = x-y;
    			}
    			
    			response.getWriter().printf("결과는 %d입니다. \n", result);
    		//값을 저장
    		} else {
    			//문자열만 저장하기 때문에 String.valueOf 사용
    			Cookie valueCookie = new Cookie("value", String.valueOf(v));
    			Cookie opCookie = new Cookie("op", op);
    			response.addCookie(valueCookie);
    			response.addCookie(opCookie);
    		}		
    	}
    }

    댓글