-
Cookie 객체Servlet-JSP 2022. 1. 14. 14:10
**유튜브 뉴렉쳐님의 강의를 들으면서 공부하고 정리한 내용입니다.
앞에서 우리는 Application 객체와 Session 객체를 통해서 상태 값 유지하는 것을 배웠다.
이 Application 객체와 Session 객체 말고도 Cookie라는 것으로 상태 값을 유지 할 수가 있다.
이 세가지의 차이점은

헬스장의 탈의실을 예로 생각해보면 좀 더 쉽게 이해 할 수 있다.
application은 다 같이 이용하는 공용탈의실, session은 개인이 사용 할 수 있는 락커 공간 그리고 cookie는 지니고 다닐 수 있는 락커 키 라고 생각해보면 좀 더 이해가 쉽게 될 것이다 .
이 cookie는 상태값을 클라이언트가 가지고 왔다 갔다 할 수 있는 것이다. 이렇게 자기고 왔다갔다해서 상태값은 유지가 된다.
값을 저장 하는 공간은 이렇듯 세가지가 있는데 서버쪽에는 application, session이 있고 클라이언트 쪽에는 cookie가 있게 된다. 각각 저장공간의 특징을 이해해서 적절하게 서버에 둘 것인지 클라이언트에 둘 것인지를 결정 하면 된다.

cookie를 사용하는 방법으로는 먼저 서버에서 심어서 보낼때에는 addCookie(); 그리고 클라이언트에서 요청을 보낼 경우에는 getCookies();를 사용해서 보낸다.
우선
쿠키를 저장 할 경우
Cookie cookie = new Cookie("c", String.valueOf(result));
response.addCookie();Cookie("key", value) 형식으로 적어줘야 한다.
"c"라는 key로 값을 심어서 보내게 되면 addCookie를 통해서 출력을 하게 되고 reponse에 심어진 것을 브라우저가 읽을 수 있게 되고 그것을 브라우저가 가지게 된다.
이 쿠키는 브라우저에게 전달하는 값이라고 하고
나중에 브라우저가 사이트로 다시 요청을 하게 되면 이쪽 사이트에 cookie가 있었지 하고 다시 cookie를 보내오게 되고
쿠키를 읽어 올 경우
Cookie[] cookies = request.getCookies();
String _c = "";
if(cookies != null)
for(Cookie cookie : cookies)
if("c".equals(cookie.getName()))
_c = cookie.getValue();서버에서는 그 쿠키를 getCookies 복수형 배열로 오게 된다. (하나가 아니라 여러개가 심어 질 수 있기 때문에) 맵컬랙션 처럼 키와 값으로 여러개가 심어져서 올 수 있다.
받아 오면 내가 심었던 쿠키를 찾는 작업이 필요하게 된다. 그래서 for문을 돌려서 내가 심어두었던 쿠키를 찾는 작업을 해야 한다.
앞에 사용 했던 예제를 이용해서 cookie 사용법을 배워보다
쿠키는 심어주는 것 먼저 해 주어야 한다.
Cookie valueCookie = new Cookie("value", v); Cookie opCookie = new Cookie("op", op);Cookie값으로 사용 하는 것은 문자열로만 가능하고 url로 보낼 수 있는 문자 형태로만 작성 해 줘야한다.
하지만 나중에 json이나 xml 등을 사용하게 되면 다양한 객체를 cookie로 만들어서 보낼 수 있게 된다.
지금 우리가 작성 한 valuecookie에서 에러가 나기 때문에 문자열 형태로 변환 시켜줘야한다.
Cookie valueCookie = new Cookie("value", String.valueOf(v)); //이렇게 문자열로 변환시켜준다.
그리고 클라이언트에게 보내 줄 코드를 작성한다.
response.addCookie(valueCookie); //클라이언트에서 보내 주기 위한 코드 response.addCookie(opCookie); //클라이언트에서 보내 주기 위한 코드 response Header에서 심어지는 형태로 보내지게 된다.클라이언트에게 보내지는데 Header 부분에 심어지는 형태로 보내지게 된다.
이것을 전달 받은 브라우저가 받은 쿠키를 저장하게 된다.
쿠키가 잘 저장되면 설정에서 쿠키 사이트들이 보냈었던 쿠키들을 확인 해 볼 수 있다.
그럼 이렇게 쿠키를 심어 준 다음 윗부분으로 올라가서 쿠키를 읽기 위한 변수를 선언 해 준다.
(어플리케이션이랑 세션 선언 밑에 선언 해 주면 된다.)
Cookie[] cookies = request.getCookies();읽는 부분은 if 부분에 작성 해 준다.
int x = 0; //찾은 쿠키 값을 담아야 할 그릇. 0으로 초기화 해 준다. for(Cookie c : cookies) if(c.getName().equals("value")); { // 내가 설정해준 이름을 찾아야하니깐 밑에 작성한 이름으로 비교 operator = c.getValue(); // 찾은 값을 x에 넣어줘야한다. 형변화도 해주고. 한번만 찾는게 아니니깐 for문을 돌려준다. break; //찾았으면 break } int y =v; //지금 사용자가 저장한 value 값이라 v로 String operater=""; for(Cookie c : cookies) if(c.getName().equals("op")); { // 내가 설정해준 이름을 찾아야하니깐 밑에 작성한 이름으로 비교 x = Integer.parseInt(c.getValue()); // 찾은 값을 x에 넣어줘야한다. 형변화도 해주고. 한번만 찾는게 아니니깐 for문을 돌려준다. break; //찾았으면 break }'Servlet-JSP' 카테고리의 다른 글
서버에서 페이지 전환하기 Redirect (0) 2022.01.14 Cookie의 maxAge 옵션 (0) 2022.01.14 Session객체 (feat.Application과의 차이점) (0) 2022.01.13 Application객체와 서블릿Context (0) 2022.01.13 상태 유지의 필요성 application, session, cookie (0) 2022.01.13