관리 메뉴

거니의 velog

230927_Servlet 3 본문

대덕인재개발원_자바기반 애플리케이션

230927_Servlet 3

Unlimited00 2023. 9. 27. 13:41

[cookieTest01.jsp]

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>Cookie 연습 1</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.java]

package kr.or.ddit.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;

// Cookie를 추가하는 서블릿
@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; charset=utf-8");
		PrintWriter out = response.getWriter();
		
		// Cookie를 저장하는 방법 및 순서
		
		// 1. Cookie 객체를 생성한다. ==> '쿠키이름'과 '쿠키값'은 문자열로 지정한다.
		// 	형식) Cookie cookie변수 = new Cookie("쿠키이름", "쿠키값");
		//		- '쿠키값'에 한글이 포함되었을 경우에는 URLEncoder.encode()메서드로 인코딩 후 저장한다.
		//		- 하나의 쿠키는 4KB(4096byte)까지 저장 가능하다.
		//		- 하나의 도메인 당 20개 (총 300개) 까지 가능하다.
//		Cookie nameCookie = new Cookie("name", "홍길동");
		Cookie nameCookie = new Cookie("name", URLEncoder.encode("홍길동", "utf-8"));
		Cookie ageCookie1 = new Cookie("age", "20");
		int age = 30;
//		Cookie ageCookie2 = new Cookie("age", age + "");
		Cookie ageCookie2 = new Cookie("age", String.valueOf(age));
		Cookie genderCookie = new Cookie("gender", "Male");
		
		// 2. 쿠키 속성 설정
		// cookie변수.setPath("적용경로"); ==> 지정된 경로와 그 하위 경로에서만 사용 가능하다. 현재 경로가 기본값.
		// cookie변수.setMaxAge(유지시간); ==> 단위:초, 
		//								(-1:브라우저가 종료될 때까지 유지(기본값), 0:즉시 삭제된다.)
		// cookie변수.setDomain("적용도메인명"); ==> 현재 도메인이 기본값.
		// 						예)"ddit.or.kr" ==> www.ddit.or.kr, mail.ddit.or.kr, cafe.ddit.or.kr
		// cookie변수.setSecure(보안여부); ==> true:보안적용(https프로토콜사용), false:미적용-기본값
		
		// 3. Response객체를 이용하여 쿠키를 웹브라우저로 보낸다.
		//		그러면 웹 브라우저가 이 쿠키를 받아서 저장한다.
		//	형식) response객체.addCookie(1번에서 만든 Cookie객체);
		response.addCookie(nameCookie);
		response.addCookie(ageCookie1);
		response.addCookie(ageCookie2);
		response.addCookie(genderCookie);
		//--------------------------------------------
		
		out.println("<html>");
		out.println("<head><meta charset='utf-8' /><title>쿠키 저장</title></head>");
		out.println("<body>");
		
		out.println("<h3>Cookie가 저장되었습니다.</h3><br /><hr /><br />");
		out.println("<a href='"+ request.getContextPath() +"/basic/cookie/cookieTest01.jsp'>시작 문서로 가기</a>");
		
		out.println("</body>");
		out.println("</html>");
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}

- http://localhost:8090/webTest/basic/cookie/cookieTest01.jsp


[CookieRead.java]

package kr.or.ddit.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;


// 저장된 Cookie를 읽어오는 서블릿
@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; charset=utf-8");
		PrintWriter out = response.getWriter();
		
		// 저장된 쿠키 읽어오기
		
		// 1. 전체 쿠키 정보를 Request객체를 통해서 가져온다.
		//		==> 가져온 쿠키 정보들은 배열에 저장된다.
		// 형식) Cookie[] 쿠키배열변수 = request객체.getCookies();
		Cookie[] cookieArr = request.getCookies();
		
		out.println("<html>");
		out.println("<head><meta charset='utf-8' /><title>쿠키 읽기</title></head>");
		out.println("<body>");
		
		out.println("<h3>저장된 Cookie 데이터 확인하기</h3>");
		
		if(cookieArr == null || cookieArr.length == 0) {
			out.println("<h3>저장된 쿠키가 하나도 없습니다.</h3>");
		}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 />");
			}
		}
		
		// JSP문서, CSS문서 등이 저장된 폴더 중에서 'ContextPath'에 해당하는 폴더는
		// 'WebContent' 폴더이다.
		out.println("<br />");
		out.println("<a href='"+ request.getContextPath() +"/basic/cookie/cookieTest01.jsp'>시작 문서로 가기</a>");
		
		out.println("</body>");
		out.println("</html>");
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}

- http://localhost:8090/webTest/basic/cookie/cookieTest01.jsp


[CookieDelete.java]

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; charset=utf-8");
		PrintWriter out = response.getWriter();
		
		// 저장된 쿠키 삭제하기
		
		// 쿠키의 삭제는 쿠키의 '유지시간'을 '0'으로 설정하여 다시 저장하는 방법을 사용한다.
		
		// 1. 전체 쿠키 정보 가져오기
		Cookie[] cookieArr = request.getCookies();
		
		out.println("<html>");
		out.println("<head><meta charset='utf-8' /><title>쿠키 삭제</title></head>");
		out.println("<body>");
		
		out.println("<h3>저장된 Cookie정보 삭제하기</h3>");
		
		if(cookieArr != null) {
			// 2. 전체 쿠키 정보 중에서 삭제할 쿠키를 찾는다. (예: gender쿠키 삭제하기)
			for(Cookie cookie : cookieArr) {
				String name = cookie.getName(); // '쿠키이름' 구하기
				
				if("gender".equals(name)) { // 삭제할 쿠키이름과 같은지 비교하여 찾는다.
					// 3. 찾은 쿠키의 유지시간을 '0'으로 설정하여 다시 저장한다.
					cookie.setMaxAge(0); // 유지시간 설정
					response.addCookie(cookie); // 쿠키 다시 저장
				}
			}
		}
		
		out.println("<br /><hr /><br />");
		out.println("<a href='"+ request.getContextPath() +"/basic/cookie/cookieTest01.jsp'>시작 문서로 가기</a>");
		
		out.println("</body>");
		out.println("</html>");
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}

- http://localhost:8090/webTest/basic/cookie/cookieTest01.jsp


[cookieTest02.jsp]

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>Cookie 연습 2 - Count</title>
	</head>
	<body>
		<a href="<%= request.getContextPath() %>/cookieCountServlet.do">Cookie Count 증가하기</a><br /><br />
		<a href="<%= request.getContextPath() %>/cookieCountDelServlet.do">Cookie Count 초기화 하기</a><br /><br />
	</body>
</html>

[CookieCountServlet.java]

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("/cookieCountServlet.do")
public class CookieCountServlet extends HttpServlet {
	
	private static final long serialVersionUID = 1L;

	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();
		
		// count라는 쿠키변수를 사용해서 처리하자.
		
		// 쿠키가 있는지 검사하여 있을 때만 count 세기
		Cookie[] cookies = request.getCookies();
		int count = 0; // 카운트 값 저장할 변수 선언 및 초기화
		
		if(cookies != null) {
			for(Cookie cookie : cookies) {
				String name = cookie.getName();
				if("count".equals(name)) {
					// 현재의 count값 구하기
					count = Integer.parseInt(cookie.getValue());
				}
			}
		}
		
		count++;
		
		// 증가된 count값을 저장한다.
		
		Cookie countCookie = new Cookie("count", String.valueOf(count));
		
		response.addCookie(countCookie);
		
		out.println("<html>");
		out.println("<head><meta charset='utf-8' /><title>Cookie Count 연습</title></head>");
		out.println("<body>");
		
		out.println("<h3>어서오세요. 당신은 "+ count +"번째 방문입니다.</h3><br /><hr /><br />");
		
		out.println("<a href='"+ request.getContextPath() +"/cookieCountServlet.do'>카운트 증가하기</a>");
		out.println("<a href='"+ request.getContextPath() +"/basic/cookie/cookieTest02.jsp'>시작 문서로 가기</a>");
		
		out.println("</body>");
		out.println("</html>");
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}

[CookieCountDelServlet.java]

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("/cookieCountDelServlet.do")
public class CookieCountDelServlet 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; charset=utf-8");
		PrintWriter out = response.getWriter();
		
		out.println("<html>");
		out.println("<head><meta charset='utf-8' /><title>쿠키 삭제</title></head>");
		out.println("<body>");
		
		out.println("<h3>저장된 Cookie정보 삭제하기</h3>");
		
		Cookie[] cookieArr = request.getCookies();
		
		if(cookieArr != null) { // 쿠키가 비어 있지 않을 때 실행
			for(Cookie cookie : cookieArr) {
				String count = cookie.getName(); // 쿠키변수 값 구하기
				
				if("count".equals(count)) { // 삭제할 쿠키 찾기
					cookie.setMaxAge(0); // 유지시간을 0으로 설정
					response.addCookie(cookie); // 변경된 쿠키를 저장한다.
				}
			}
		}
		
		out.println("<br /><hr /><br />");
		out.println("<a href='"+ request.getContextPath() +"/basic/cookie/cookieTest02.jsp'>시작 문서로 가기</a>");
		
		out.println("</body>");
		out.println("</html>");
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}

- http://localhost:8090/webTest/basic/cookie/cookieTest02.jsp

쿠키 정보 삭제 후 1번째 방문으로 초기화됨...


[선생님 풀이]

[cookieTest02.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() %>/cookieCountServlet.do">Cookie Count 증가하기</a><br /><br />
		<a href="<%= request.getContextPath() %>/cookieCountDelServlet.do">Cookie Count 초기화 하기</a><br /><br />
	</body>
</html>

[CookieCountServlet.java]

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("/cookieCountServlet.do")
public class CookieCountServlet 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; charset=utf-8");
		PrintWriter out = response.getWriter();
		
		// 쿠키 이름은 'count'로 한다.
		
		// 'count'라는 쿠키가 있는지 검사한다.
		Cookie[] cookieArr = request.getCookies();
		
		int count = 0; // 읽어온 쿠키값이 저장될 변수
		
		if(cookieArr != null) {
			for(Cookie cookie : cookieArr) {
				if("count".equals(cookie.getName())) { // 'count' 쿠키이름 찾기
					String value = cookie.getValue(); // 현재의 쿠키값(count) 구하기
					count = Integer.parseInt(value);
				}
			}
		}
		count++; // count값 증가
		
		// 쿠키 객체 생성
		Cookie countCookie = new Cookie("count", String.valueOf(count));
		response.addCookie(countCookie); // 쿠키 저장
		
		out.println("<html>");
		out.println("<head><meta charset='utf-8' /><title>쿠키 카운트</title></head>");
		out.println("<body>");
		
		out.println("<h3>어서오세요. 당신은 "+ count +"번째 방문입니다.</h3><br /><br />");
		
		out.println("<a href='"+ request.getContextPath() +"/cookieCountServlet.do'>카운트 증가하기</a>");
		out.println("<a href='"+ request.getContextPath() +"/basic/cookie/cookieTest02.jsp'>시작 문서로 이동하기</a>");
		
		out.println("</body>");
		out.println("</html>");
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}

[CookieCountDelServlet.java]

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("/cookieCountDelServlet.do")
public class CookieCountDelServlet 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; charset=utf-8");
		PrintWriter out = response.getWriter();
		
		Cookie[] cookieArr = request.getCookies();
		
		if(cookieArr != null) {
			for(Cookie cookie : cookieArr) {
				if("count".equals(cookie.getName())) {
					cookie.setMaxAge(0);
					response.addCookie(cookie);
				}
			}
		}
		
		out.println("<html>");
		out.println("<head><meta charset='utf-8' /><title>쿠키 삭제</title></head>");
		out.println("<body>");
		
		out.println("<h3>count가 초기화 되었습니다.</h3>");
		
		out.println("<a href='"+ request.getContextPath() +"/basic/cookie/cookieTest02.jsp'>시작 문서로 가기</a>");
		
		out.println("</body>");
		out.println("</html>");
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}

'대덕인재개발원_자바기반 애플리케이션' 카테고리의 다른 글

231004_Servlet 5  (0) 2023.10.02
231002_Servlet 4  (0) 2023.09.27
230926_Servlet 2  (0) 2023.09.26
230925_Servlet 1  (0) 2023.09.25
230922_Log4J  (0) 2023.09.22