(키, 값)이 쿠키에서는 (name, value)와 같은 의미
cookieTest.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Cookie 연습</title>
</head>
<body>
<a href="<%=request.getContextPath() %>/cookieAddTest.do">
Cookie 정보 저장하기
</a><br><hr><br>
<a href="<%=request.getContextPath() %>/cookieReadTest.do">
Cookie 정보 확인하기
</a><br><hr><br>
<a href="<%=request.getContextPath() %>/cookieDeleteTest.do">
Cookie 정보 삭제하기
</a><br><hr><br>
</body>
</html>
CookieAddTest
package kr.or.ddit.basic.cookie;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLEncoder;
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;
/**
* Servlet implementation class CookieAddTest
*/
@WebServlet("/cookieAddTest.do")
public class CookieAddTest extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html; charset=utf-8");
PrintWriter out = response.getWriter();
//Cookie 저장하는 방법
// 1. Cookie객체를 생성한다. ==> '쿠키변수'와 '쿠키값'은 문자열로만 지정한다.
// 형식) Cookie cookie변수 = new Cookie('쿠키변수', '쿠키값');(쿠키의 키값, 저장할 값)
// ==> 쿠키값으로 한글을 사용할 경우에는
// URLEncoder.encode()메서드로 인코딩 후 저장한다.
Cookie nameCookie = new Cookie("name", URLEncoder.encode("홍길동", "utf-8"));
Cookie ageCookie = new Cookie("age", String.valueOf(30));//문자열만 지정가능해서 숫자를 입력할 때 무조건 형변환
Cookie cityCookie = new Cookie("city", "seoul");
// 2. 쿠키 속성 설정
// 쿠키변수.setPath("적용경로"); //지정한 경로와 그 하위 경로에서 사용 가능하다.
// ==> 생략하면 쿠키를 설정할 당시의 경로가 설정된다.
// 쿠키변수.setMaxAge(유지시간); // 쿠키가 기억될 시간을 나타내며 단위는 (초)
// 만약 유지시간이 (-1(음수)이면 브라우저가 종료될 때까지 유지를 하는것(기본값),
// 0이면 즉시 쿠키 삭제된다.)
// 쿠키변수.setDomain("적용도메인명");
// 예) ".ddit.or.kr" ==> www.ddit.or.kr, www2.ddit.or.kr
// 쿠키변수.setSecure(보안여부); //true: 적용, false: 미적용(기본값)
// 3. response객체를 이용하여 쿠키를 웹브라우저로 보내면
// 웹브라우저가 이 쿠키를 받아서 저장한다.
// 형식) response객체.addCookie(1번에서 만든 Cookie객체);
response.addCookie(nameCookie);
response.addCookie(ageCookie);
response.addCookie(cityCookie);
out.println("<html><head><meta charset='utf-8'>");
out.println("<title>Cookie 저장 연습</title></head>");
out.println("<body>");
out.println("<h2>Cookie데이터가 저장되었습니다.</h2>");
out.println("<a href='"
+request.getContextPath()
+"/cookie/cookieTest.jsp'>시작문서로 가기</a>");
out.println("</body></html>");
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
CookieReadTest
package kr.or.ddit.basic.cookie;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLDecoder;
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;
/**
* Servlet implementation class CookieReadTest
*/
@WebServlet("/cookieReadTest.do")
public class CookieReadTest extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html; charset=utf-8");
PrintWriter out = response.getWriter();
//저장된 Cookie 정보 읽어오기
//1. 전체 Cookie 정보를 Request객체를 이용해서 가져온다.
// ==> 가져온 Cookie 정보들은 배열에 저장된다.
// 형식) Cookie[] 쿠키배열변수 = request.getCookie();
Cookie[] cookieArr = request.getCookies();
out.println("<html><head><meta charset='utf-8'>");
out.println("<title>Cookie 읽기 연습</title></head>");
out.println("<body>");
out.println("<h2>저장된 Cookie 데이터 확인하기</h2>");
if(cookieArr==null || cookieArr.length==0) {
out.println("<h2>저장된 쿠키가 하나도 없습니다.</h2>");
}else {
//2. 쿠키 배열에서 해당 쿠키 정보를 구해온다.
for(Cookie cookie : cookieArr) {
String name = cookie.getName(); //'쿠키변수'구하기
// String value = cookie.getValue(); //'쿠키변수'구하기
//'쿠키값'으로 저장된 데이터가 한글일 경우 디코딩해서 사용
String value = URLDecoder.decode(cookie.getValue(), "utf-8");
out.println("쿠키변수 : "+ name + "<br>");
out.println("쿠키값 : "+ value + "<hr>");
}
}
out.println("<a href='"
+request.getContextPath()
+"/cookie/cookieTest.jsp'>시작문서로 가기</a>");
out.println("</body></html>");
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
CookieDeleteTest
package kr.or.ddit.basic.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("/cookieDeleteTest.do")
public class CookieDeleteTest extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//저장된 Cookie 삭제하기
response.setCharacterEncoding("utf-8");
response.setContentType("text/html; charset=utf-8");
PrintWriter out = response.getWriter();
//1. 쿠키 데이터의 삭제는 쿠키의 유지시간을 0으로 설정하는 방법을 사용한다.
// 먼저 삭제할 쿠키를 구한 후 이 쿠키의 유지시간을 0으로 설정한 후 addCookie()메서드로 다시 저장하면 된다.
Cookie[] cookieArr = request.getCookies();
out.println("<html><head><meta charset='utf-8'>");
out.println("<title>Cookie 삭제 연습</title></head>");
out.println("<body>");
out.println("<h2>저장된 Cookie 데이터 삭제하기</h2>");
if(cookieArr==null || cookieArr.length==0) {
out.println("<h3>삭제할 쿠키가 하나도 없습니다.</h3>");
}else {
//반복문을 사용해서 삭제할 쿠키를 찾는다.
//(예: city 쿠키변수에 저장된 쿠키삭제하기)
for(Cookie cookie : cookieArr) {
String name = cookie.getName(); //'쿠키변수'값 구하기
if("city".equals(name)) {//삭제할 쿠키 찾기
cookie.setMaxAge(0);
response.addCookie(cookie);//변경된 쿠키를 저장한다.
}
}
}
out.println("<a href='"+request.getContextPath()
+"/cookie/cookieTest.jsp'>시작문서로 가기</a>");
out.println("</body></html>");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}