저장위치
: 클라이언트
(접속자 PC)저장형식
: text
만료시점
: 쿠키 저장시 설정용량제한
: 하나의 도메인당 20개
속도
: session보다는 빠르다
보안
: session 보다는 안좋다.
1. 요청이 들어온다.
-> ex) 사용자가 처음 사이트에 방문
2. 서버가 저장하고자 하는 데이터를 쿠키에 담아서 응답을 한다.
-> ex) 처음 방문한 사용자임을 파악하고,
'사이트에 방문한 적이 있는 사람' 이라는 데이터를 같이 응답한다.
3. 사용자가 새로운 요청을 할 때 쿠키가 딸려온다.
-> 사용자가 다시 요청을 보낼 때, 쿠키 데이터를 다시 가지고 온다.
사이트는 이 데이터를 받아서 '처음 방문한 사용자가 아니다'를 파악한다.
4. 사용자 PC에 저장하고 있던 데이터를 가공한다.
- cookie의 사용
-> Cookie 객체 생성, Cookie는 배열로 반환 됨.-> cookie 값 저장하기Cookie[] cookies = arg0.getCookies();
- cookie 객체 생성할 때, 생성자에 String, String만 가능-> 2. 저장한 쿠키를 다시 사용자에게 전달한다.//value값이 int이기 때문에, String으로 변환시켜 준다. Cookie valueCookie = new Cookie("value", String.valueOf(value)); Cookie opCookie = new Cookie("op", op);
-> cookie[] 값 꺼내기arg1.addCookie(valueCookie); arg1.addCookie(opCookie);
- 저장된 값은 배열에 저장되어 있는데, 어느 index에 있는지 모르므로,
"value"이름으로 값을 찾아야 한다.)// cookie 배열에 String으로 저장되어 있으므로 다시 int로 바꿔줘야 한다. int x = 0; for(Cookie c : cookies) { if(c.getName().equals("value") ) { //name이 value와 같다면 x = Integer.parseInt(c.getValue()); // 값을 꺼내기 break; // 값을 찾으면 반복문 나오기 } } //Cookie 의 "op"이름으로 값 꺼내기 String operator = ""; for(Cookie c : cookies) { if(c.getName().equals("op")) { operator = c.getValue(); break; // 값을 찾으면 반복문 나오기 } }
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <form action="calc4" method="post"> <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>
"+"
나 "-"
를 클릭하면 첫번 째 입력했던 숫자와Cookie 에 저장
되고, 두번 째 숫자를 입력하고"="
을 클릭하면 연산 결과가 출력된다.package com.koit.web.servlet; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletContext; 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; import javax.servlet.http.HttpSession; @WebServlet("/calc4") public class MyServlet4 extends HttpServlet{ @Override protected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException { // Cookie 객체 생성, Cookie는 배열로 반환 됨. Cookie[] cookies = arg0.getCookies(); PrintWriter out = arg1.getWriter(); String value_ = arg0.getParameter("value"); String op = arg0.getParameter("operator"); int value = 0; if(value_ != null && !value_.equals("")) { value = Integer.parseInt(value_); } if(op.equals("=")) { // 두번째 숫자와 '=' 이 value와 op에 저장됨. // 3. Cookie 꺼내기 (Cookie는 배열에 저장되어 있다. //어느 index에 있는지 모르므로, "value"이름으로 값을 찾아야 한다.) int x = 0; for(Cookie c : cookies) { if(c.getName().equals("value") ) { x = Integer.parseInt(c.getValue()); break; // 값을 찾으면 반복문 나오기 } } int y = value; // 두번재 넘어온 숫자 //Cookie 의 "op"이름으로 값 꺼내기 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; } out.println("결과 : " + result); }else { // op가 +, - 인 경우 또 value와 op값을 받아야하는데, //요청은 단발성이기 때문에 요청이 다시 들어오면 기존 값은 사라진다. // 그렇기 때문에 기존 요청을 Cookie에 저장해놓고 //다시 파라미터를 전달받아야 한다. // 1. cookie로 저장 //cookie 객체 생성할 때, 생성자에 String, String만 가능하다. //value값이 int이기 때문에, String으로 변환시켜 준다. Cookie valueCookie = new Cookie("value", String.valueOf(value)); Cookie opCookie = new Cookie("op", op); // 2. 저장한 쿠키를 다시 사용자에게 전달한다. arg1.addCookie(valueCookie); arg1.addCookie(opCookie); arg1.sendRedirect("calc4.html"); } } }
cookie 저장소 선언하기
Cookie[] cookies = arg0.getCookies();
사용자가 처음 입력한 숫자와 '+', '-' 를 파라미터로 받아 변수에 저장한다.
ex) 5-
op변수가 '+', '-' 인 경우 두번째 숫자와 '='의 요청을 받아야하는데,
그렇게 되면 첫 번째 받는 요청의 값이 사라지게 된다.
ex) 3=
그렇기 때문에 첫번째 요청값인 5-를 cookie 배열에 저장을 해야한다.
cookie에 값 저장하기
Cookie valueCookie = new Cookie("value", String.valueOf(value)); Cookie opCookie = new Cookie("op", op);
사용자에게 cookie 전달하기
arg1.addCookie(valueCookie); arg1.addCookie(opCookie);
그 다음 두번째 요청 값인 숫자와 '='을 다시 변수에 받아오면
처음 요청된 '+','-' 에 맞게 연산을 해야하기 때문에
cookie 배열에서 값을 꺼내와야 한다.
cookie 배열 값 꺼내기
(저장할 때 썼던 이름값으로 담겨진 값을 가져온다)
for(Cookie c : cookies) { if(c.getName().equals("value") ) { x = Integer.parseInt(c.getValue()); break; // 값을 찾으면 반복문 나오기 } }