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);
		
	}

}