쿠키 정보 저장 확인 삭제

조수경·2021년 12월 7일
0

고급자바

목록 보기
91/97

(키, 값)이 쿠키에서는 (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);
   }

}
profile
신입 개발자 입니다!!!

0개의 댓글

관련 채용 정보