다음은 오라클에서 설명하는 Cookie 클래스이다.
읽어보면 도움이 되니 읽어보는 것을 추천한다!
docs.oracle.com/javaee/7/api/javax/servlet/http/Cookie.html
쿠키는 웹서버에서 클라이언트(사용자의 브라우저)로 부여해주는 방식으로 필요할 때마다 추출해간다.
쿠키 사용 시기
서버와 클라이언트의 연결이 끊어져도 클라이언트에서 개별적으로 상태 정보를 유지할 필요가 있을 때
쿠키 생성
쿠키 생성
javax.servlet.http.Cookie을 import한 상태에서
Cookie 변수명 = new Cookie(String name, String value);
형식으로 생성하며, name에 value값이 부여되는 형식으로 한번 설정된 name은 수정할 수 없다.
쿠키는 유효 기간을 가질 수 있으며
setMaxAge(int expiry)로 설정 가능하다. 단위는 '초'이며,
0 이면 쿠키 삭제
음수값이면 브라우저가 종료되면 쿠키도 자동으로 삭제. 지정하지 않아도 음수값으로 적용
쿠키 경로 설정
setPath(String uri)
지정된 경로와 그 하위 경로의 요청에 대해서만 클라이언트로부터 쿠키가 전송
쿠키 도메인 설정
setDomain(String domain)
(default)기본적으로 전송된 서버에서만 읽어 들여 사용함
www.edu.com 과 같이 지정하면 정확히 일치하는 도메인만 가능
.(dot)으로 시작하는 도메인을 지정하면 그 해당 도메인이 포함된 도메인 서버에서 읽을 수 있다. (예, .edu.com -> it.edu.com(가능), .avcedu.com(불가능)
쿠키 전송
addCookie(Cookie cookie)
생성된 쿠키를 클라이언트로 보낼때는 HttpServlet 객체의 addCookie( ) 메소드 이용.
아래는 예시이다.
package com.edu.test.cookie;
import java.io.IOException;
import java.io.PrintWriter;
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("/cookie1")
public class CookieTest1Servelet extends HttpServlet{
@Override
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=UTF-8"); // 응답 utf-8 형식
PrintWriter out = resp.getWriter();
Cookie c1 = new Cookie("id", "guest"); // 이름 id에 guest 값 부여
c1.setPath("/"); // 유효기간 default로 음수 지정되어 브라우저 닫힘과 동시에 쿠키 삭제됨
resp.addCookie(c1);
Cookie c2 = new Cookie("code", "0001"); // 이름 code에 0001 값 부여
c2.setPath("/");
c2.setMaxAge(60 * 60 * 3); // 유효기간 3시간
//c2.setMaxAge(-1);
resp.addCookie(c2);
Cookie c3 = new Cookie("subject", "java"); // 이름 subject에 java 값 부여
c3.setPath("/");
c3.setMaxAge(60 * 60 * 24); // 유효기간 1일
//c3.setMaxAge(-1);
resp.addCookie(c3);
out.println("쿠키 전송 완료");
out.close();
}
}
쿠키 추출
쿠키 추출
Cookie[ ] Arr = HttpServletRequest.getCookies()
서버 쪽에서 쿠키를 읽어 들이기 위해 HttpServletRequest 객체의 getCookies() 메소드를 이용한다.
Cookie 검색
String getName()
쿠키를 검색할 때는 쿠키의 이름을 가지고 검색하며, 쿠키의 이름만을 추출할 때 사용한다.
Cookie 값 추출
String getValue()
검색한 쿠키의 값을 추출할 때 사용
아래는 예시
package com.edu.test.cookie;
import java.io.IOException;
import java.io.PrintWriter;
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("/cookie2")
public class CookieTest2Servlet extends HttpServlet {
@Override
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=UTF-8");
PrintWriter out = resp.getWriter();
Cookie[] list = req.getCookies(); // 모든 쿠키 값을 배열에 저장
/*
for(int i = 0; list != null && i< list.length; ++i) { // 일반 for문으로 cookie 값이 리스트에 있고 개수만큼 확인
out.println(list[i].getName() + " : " + list[i].getValue() + "<br>");
}
*/
for(Cookie cookie : list) { // 배열 for문으로 확인
out.println(cookie.getName() + " : " + cookie.getValue() + "<br>");
}
out.println("Print finish");
out.close();
}
}
현재 클라이언트의 쿠키 정보 값을 읽어서 갱신하기
package com.edu.test.cookie;
import java.io.IOException;
import java.io.PrintWriter;
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("/cookie3")
public class CookieTest3Servlet extends HttpServlet {
@Override
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
int cnt = 0;
Cookie[] list = req.getCookies(); // 쿠키 값을 받아서 저장
/*
for(int i =0; list!=null && i < list.length; ++i) {
if(list[i].getName().equals("count")) { // 쿠키 이름이 count면 cnt에 값을 저장
cnt = Integer.parseInt(list[i].getValue());
}
}
*/
for(Cookie cookie : list) {
if(cookie.getName().equals("count")) {
cnt = Integer.parseInt(cookie.getValue());
}
}
cnt++; // 방문 횟수 증가
Cookie c = new Cookie("count", cnt+"");
//c.setMaxAge(60 * 60 * 24);
c.setMaxAge(-1);
c.setPath("/");
resp.addCookie(c);
resp.setContentType("text/html;charset=UTF-8");
PrintWriter out = resp.getWriter();
out.print("<h1>방문 횟수 : " + cnt);
out.close();
}
}
'Servlet & JSP' 카테고리의 다른 글
JSP에서 Database(MySQL) 연결이 안될 때 : JDBC 연결이 안될 때 (0) | 2021.05.14 |
---|---|
Servlet & JSP에서 Session 사용법 (0) | 2021.05.07 |
Servlet에서 init()으로 객체를 받는 방법 (0) | 2021.04.30 |