Language/Java
[JAVA] Cookie 생성, 조회 ,삭제
생각하는 감쟈🥔
2024. 6. 4. 12:24
cookieTest01.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href ="<%=request.getContextPath()%>/cookieAdd.do">Cookie 정보 저장하기</a><br><br>
<a href ="<%=request.getContextPath()%>/cookieRead.do">Cookie 정보 읽어오기</a><br><br>
<a href ="<%=request.getContextPath()%>/cookieDelete.do">Cookie 정보 삭제하기</a><br><br>
</body>
</html>
쿠키 추가
cookieAdd.do
package kr.or.ddit.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("/cookieAdd.do")
public class CookieAdd extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setCharacterEncoding("utf-8");
response.setContentType("text/html; chatset=utf-8");
PrintWriter out = response.getWriter();
// Cookie 저장하는 방법
// 1. Cookie객체를 생성한다 >> '쿠키이름'과 '쿠키값'을 지정해서 생성한다.
// ( '쿠키이름'과 '쿠키값'은 문자열로 지정한다.)
// 형식) Cookie cookie변수 = new Cookie("쿠기 이름", "쿠키값");
// >> 쿠키값으로 한글을 사용할 경우에는 URLEncoder.encode()메서드로
// 인코딩한 후에 저장한다.
// >> 하나의 쿠키는 4KB(4096bytes)까지 저장 가능하다.
// >> 하나의 도메인 당 20개 (총 300개)까지 저장 가능하다.
Cookie nameCookie = new Cookie("name", "홍길동");
Cookie ageCookie = new Cookie("age", "25");
Cookie genderCookie = new Cookie("gender", "Male");
// 2. 쿠기 속성 설정
/*
* cookie변수.setPath("적용 경로"); >> 지정한 경로와 그 하위 경로에서만 사용 가능하다
* >> 생략하면 쿠기를 설정할 당시의 경로가 설정된다
* cookie변수.setMaxAge(유지시간); >> 단위(초),
* >> (-1 : 브라우저가 종료될 때 까지 유지된다. (기본값)
* 0 : 즉시 해당 쿠기가 삭제된다.
* cookie변수.Domain("적용도메인명")
* >> 예)"ddit.or.kr" >> www.ddit.or.kr
* >> mail.ddit.or.kr, .....
* cookie변수.setSecure(보안여부); // true(보안 적용) / false(미적용)
*
*
*/
//3.Response객체를 이용해서 쿠키를 웹브라우저로 보내면 웹브라우저가 이 쿠키를 받아서 저장한다
// 형식) Response객체.addCookie(1번에서 만든 쿠키객체)
response.addCookie(nameCookie);
response.addCookie(ageCookie);
response.addCookie(genderCookie);
out.println("<html>");
out.println("<head><mata charset='utf-8'>"
+"<title>Cookie객체연습</title></head>");
out.println("<body>");
out.println("<h2>Cookie데이터가 저장되었습니다</h2>");
out.println("<br><hr><br>");
out.println("<a href='"+ request.getContextPath()+"/cookie/cookieTest01.jsp'> 시작문서로 이동</a>");
out.println("</body> </html>");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
쿠키 조회
cookieRead.do
package kr.or.ddit.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("/cookieRead.do")
public class CookieRead extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setCharacterEncoding("utf-8");
response.setContentType("text/html; chatset=utf-8");
PrintWriter out = response.getWriter();
// 저장된 쿠기 읽어오기
// 1. 전체 쿠키 정보를 Request객체를 이용하여 가져온다.
// >> 가져온 쿠기 정보들은 배열에 저장된다.
// 형식) Cookie[] 쿠기배열변수 = Request객체.getCookies();
Cookie[] cookieArr = request.getCookies();
out.println("<html>");
out.println("<head> <mata charset='utf-8'>");
out.println("<title>쿠키 읽기 연습</title></head>");
out.println("<body>");
out.println("<h3> 저장된 Cookie 데이터 확인하기</h3><br><hr>");
if(cookieArr==null || cookieArr.length==0) {
out.println("<h3> 저장된 쿠키가 하나도 없습니다...</h3>");
}else {
// 2. 쿠키 배열에서 해당 쿠키 정보를 구해온다.
for (Cookie cookie : cookieArr) {
String name = cookie.getName(); // '쿠키 이름' 구하기
String value = cookie.getValue(); // '쿠키값' 구하기
out.println("쿠키 이름 : "+ name +"<br>");
out.println("쿠키값 : "+ value +"<hr>");
}
}
out.println("<a href ='" +
request.getContextPath() + "/cookie/cookieTest01.jsp'> 시작문서로 이동</a>");
out.println("</body></html>");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
쿠키 삭제
cookieDelete.do
package kr.or.ddit.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("/cookieDelete.do")
public class CookieDelete extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setCharacterEncoding("utf-8");
response.setContentType("text/html; chatset=utf-8");
PrintWriter out = response.getWriter();
// 쿠키 삭제하기
// 1. 쿠키 데이터의 삭제는 쿠기의 유지시간을 0으로 설정하는 방법올 사용한다.
// 삭제할 쿠키를 찾아서 해당 쿠기의 유지시간을 0으로 설정한 후 다시 저장하면 된다.
// 형식) Cookie객체.setMaxAge(0);
// 쿠키 이름이 'gender'인 쿠키 삭제하기
Cookie[] cookieArr = request.getCookies();
out.println("<html>");
out.println("<head><meta charset='utf-8'>");
out.println("<title>쿠키 삭제 연습</title></head>");
out.println("<body>");
out.println("<h2>저장된 Cookie정보 삭제하기... </h2><br><hr>");
if(cookieArr == null || cookieArr.length==0) {
out.println("<h3> 저장된 Cookie가 하나도 없습니다...</h3>");
}else {
for(Cookie cookie : cookieArr) {
String name = cookie.getName(); // 쿠키이름 구하기
// 쿠키 이름이 삭제할 쿠기인지 검사한다.
if("gender".equals(name)) {
// 방법 1 : 찾은 쿠키의 유지시간을 0으로 설정한 후 다시 저장하기
cookie.setMaxAge(0);
response.addCookie(cookie);
// 방법 2 : 쿠키 이름을 삭제할 쿠키이름과 같은 Cookie객체 생성하고
// 생성된 쿠키의 유지시간을 0으로 설정한 후 저장하기
// Cookie delCookie = new Cookie("gender",".."); // 새로운 쿠키 객체를 같은 이름으로 생성
// delCookie.setMaxAge(0);
// response.addCookie(delCookie);
} // if
} // for
} // else
out.println("<br><hr><br>");
out.println("<a href='"+ request.getContextPath()+"/cookie/cookieTest01.jsp'> 시작문서로 이동</a>");
out.println("</body></html>");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
cookieTest02.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href ="<%=request.getContextPath()%>/cookieCountSer.do">Cookie Count 증가 하기</a><br><br>
<a href ="<%=request.getContextPath()%>/cookieCountDel.do">Cookie Count 초기화 하기</a><br><br>
</body>
</html>
쿠키 카운트
cookieCountSer.do
package kr.or.ddit.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("/cookieCountSer.do")
public class CookieCountSer extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setCharacterEncoding("utf-8");
response.setContentType("text/html; chatset=utf-8");
PrintWriter out = response.getWriter();
// 쿠키 이름 ? == count
Cookie[] cookieArr = request.getCookies();
int cnt = 0;
if(cookieArr !=null) {
for(Cookie cookie : cookieArr) {
String name = cookie.getName();
if("count".equals(name)) {
String value = cookie.getValue();
cnt = Integer.parseInt(value);
break;
}
}
}
cnt++; // count증가
// 'count'라는 쿠키이름으로 증가된 count값을 value값으로 하는 Cookie객체 생성
Cookie countCookie = new Cookie("count", String.valueOf(cnt));
// 생성된 Cookie객체를 저장한다.
response.addCookie(countCookie);
out.println("<html>");
out.println("<head><meta charset='utf-8'>");
out.println("<title>쿠키 count 증가 연습</title></head>");
out.println("<body>");
out.println("<h2> 어서오세요. 당싱은 "+ cnt +"번째 방문입니다. </h2>");
out.println("<br><br>");
out.println("<a href ='"+ request.getContextPath()
+"/cookieCountSer.do'> 카운트 증가 하기</a>");
out.println("<a href ='"+ request.getContextPath()
+"/cookie/cookieTest02.jsp'> 시작 문서로 이동하기</a>");
out.println("</body></hrml>");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
쿠키 카운트 초기화
cookieCountDel.do
package kr.or.ddit.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("/cookieCountDel.do")
public class CookieCountDel extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setCharacterEncoding("utf-8");
response.setContentType("text/html; chatset=utf-8");
PrintWriter out = response.getWriter();
// 쿠키 이름 ? == count
Cookie[] cookieArr = request.getCookies();
if(cookieArr !=null) {
for(Cookie cookie : cookieArr) {
String name = cookie.getName();
if("count".equals(name)) {
cookie.setMaxAge(0);
response.addCookie(cookie);
break;
}
}
}
out.println("<html>");
out.println("<head><meta charset='utf-8'>");
out.println("<title>쿠키 count 증가 연습</title></head>");
out.println("<body>");
out.println("<h2> count가 초기화 되었습니다.</h2>");
out.println("<br><br>");
out.println("<a href ='"+ request.getContextPath()
+"/cookie/cookieTest02.jsp'> 시작 문서로 이동하기</a>");
out.println("</body></hrml>");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}