빅데이터 서비스 교육/JSP Servlet

JSP Cookie

Manly 2022. 5. 12. 17:47
반응형

비연결성 (Connectionless)

무상태(Stateless)

 

Cookie & Session

Client의 정보를 지속적으로 유지하기 위한 방법

 

 

 

 

클라이언트 PC에 저장

 

 

 

 

 

 

 

 

 

 

Cookie 만들기

<%@page import="java.net.URLEncoder"%>
<%@ 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>
	<h1>쿠키 생성</h1>
	<%
 // 쿠키(Object) 생성
 // new Cookie("Name", "(string)value")
 // 같은 이름이 들어오면 덮어쓰기 -> 나중에 들어온 것만 남아있다
 Cookie cookie = new Cookie("firstCookie", "첫번째쿠키");

 // Cookie에는 특수문자/공백 같은걸 저장할 수 없다.
 // URL방식으로 인코딩 해주면 저장가능
 // URLEncorder.encode("인코딩할 문자열", "인코딩 방식")
 String encoded = URLEncoder.encode("두 번째 쿠키", "utf-8");
 Cookie cookie2 = new Cookie("secondCookie", encoded);
 
 // 응답에 쿠키 추가
 // addCookie( Cookie객체 )
response.addCookie(cookie);
response.addCookie(cookie2);


%>
<a href="ex02selectCookie.jsp">쿠키 조회</a>
</body>
</html>

Cookie 조회

<%@page import="java.net.URLDecoder"%>
<%@ 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>
	<h1>쿠키 조회</h1>
	<%
	// 쿠키 조회할때 request로 부터 꺼낸다.
	// request.getCookies()
	// 현재 가지고 있는 모든 쿠키를 배열로 리턴
	Cookie[] cookies = request.getCookies();

	// 반복문을 이용해서 쿠키내용 꺼내기
	// list1 = [1, 2, 3, 4, 5]
	// for i in list1:  -> python

	// for each문
	// for( 꺼내서 담을 변수선언 : 배열(ArrayList))
	for (Cookie c : cookies) {

		// 쿠키의 이름 가져오기
		String name = c.getName();

		//.contains("문자열") : 포함되어 있는가?
		if (name.contains("Cookie")) {

			// 값 가져오기
			// 인코딩된 문자열 디코딩                 어떤방식으로 인코딩 되었는지?
			// URlDecoder.decode("디코딩할 문자열","인코딩 방식");
			String value = c.getValue();
			value = URLDecoder.decode(value, "utf-8");

			// 페이지에 출력
			out.print(name + ":" + value + "<br>");
		}
	}
	%>
	<a href="ex03updateCookie">쿠키 수정</a>
	
</body>
</html>

updateCookie

package ex0512;

import java.io.IOException;
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("/ex03updateCookie")
public class ex03updateCookie extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void service(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		// 쿠키 정보 수정
		// URL방식으로 Encoding하면 +가 공백을 나타낸다.
		// 쿠키 값 수정
		Cookie cookie = new Cookie("firstCookie", "first+cookie");

		// 쿠키 유효기간 수정
        // cookie.setMaxAge( int(단위 : 초));
		cookie.setMaxAge( 60*60*24*365 );
		
		// 응답에 쿠키 추가
		response.addCookie(cookie);
		
		// 쿠키 삭제
		// 쿠키 유효기간을 0으로 설정하고 덮어쓰기
		Cookie cookie2 = new Cookie("secondCookie", "");
		cookie2.setMaxAge(0);
		response.addCookie(cookie2);
		
		// 페이지 이동
		// response.senRedirect("주소값");
		response.sendRedirect("ex02selectCookie.jsp");

	}

}

 

Cookie 실습 - 최근 본 상품 보여주기

 

 

 

쿠키는 각 페이지(마우스, pc, 폰)에서

생성되고 응답에 쿠키가 같이 와서 list페이지에 최근 본페이지에 추가.

 

 

 

 

 

 

 

List.jsp

<%@page import="java.net.URLDecoder"%>
<%@ 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>
	<h1>판매 목록</h1>
	<ul>
		<li><a href="ex04mouse.jsp">마우스</a></li>
		<li><a href="ex04phone.jsp">갤럭시 s22</a></li>
		<li><a href="ex04computer.jsp">사무용 PC</a></li>
	</ul>
	<hr>
	
	<h2>최근 본 상품</h2>
	
	<%
	// 쿠키들 가져오기
	Cookie[] cookies = request.getCookies();
	
	// 쿠키 출력
	for(Cookie c : cookies){
		
		// 쿠키 이름
		String name = c.getName();
		
		// 조건문으로 필요한 쿠키만 출력
	if(name.contains("item")){
		
		// 쿠키 값 가져오기
		String value = c.getValue();
		
		// 디코딩
		value = URLDecoder.decode(value, "utf-8");
		
		out.print("<p>"+value+"</p>");
		
	}
	}
	%>
</body>
</html>

mouse.jsp

<%@page import="java.net.URLEncoder"%>
<%@ 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>
	<p>
		마우스에 대한 상세 페이지 입니다. <br> 
		모델명: 로지텍 게이밍 마우스 <br> 
		제품가격: 21,900원		<br>
	</p>
	<%
// 마우스 정보를 담고있는 쿠키 생성
String data = "로지텍 게이밍 마우스";
//URL방식 인코딩
String encoded = URLEncoder.encode(data,"utf-8");
// 쿠키 생성
Cookie cookie = new Cookie("item_mouse",encoded);
// 유효기간 설정
cookie.setMaxAge(60*60);
// 응답에 쿠키 추가
response.addCookie(cookie);
%>

	<a href="ex04list.jsp">제품 목록 페이지</a>
</body>
</html>

computer.jsp

<%@page import="java.net.URLEncoder"%>
<%@ 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>
<p>
사무용 PC에 대한 상세 페이지 입니다. <br>
모델명: 사무용PC <br>
제품가격: 159,000원 <br>
</p>
<%
//쿠키 생성
String data = "사무용 PC";
String encoded = URLEncoder.encode(data,"utf-8");
Cookie cookie = new Cookie("item_pc",encoded);
cookie.setMaxAge(60*60);
response.addCookie(cookie);
%>

<a href="ex04list.jsp">제품 목록 페이지</a>
</body>
</html>

phone.jsp

<%@page import="java.net.URLEncoder"%>
<%@ 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>
<p>
갤럭시 s22에 대한 상세 페이지 입니다. <br>
모델명: 갤럭시 S22 <br>
제품가격: 1,397,000원 <br>
</p>
<%
String encoded = URLEncoder.encode("갤럭시 s22","utf-8");
Cookie cookie = new Cookie("item_phone",encoded);
cookie.setMaxAge(60*60);
response.addCookie(cookie);
%>
<a href="ex04list.jsp">제품 목록 페이지</a>
</body>
</html>

 

복습

Cookie는 데이터를 client pc에 저장 시킨다

        저장형태는 text타입 (특수문자x, 띄어쓰기x) -> 그래서 URLEncoder.encode()로 Encoding

 

Client가 Server로 요청 했을때 응답을 돌려주면서 응답 + 쿠키로 응답. 그래서 -> response.addCookie();

 

   2번째 요청에 자동으로 쿠키를 담아서 요청   그래서 이 쿠키를 쓰려면 -> request.getCookies();

 

쿠키 이름(Name)을 사용해서 구분 -> 같은 이름의 쿠키를 생성하면 덮어씌워진다.

이를 이용해 값을 변경하거나 setmaxAge 

 

 

반응형

'빅데이터 서비스 교육 > JSP Servlet' 카테고리의 다른 글

JSP 내장객체 (Scope) & JDBC & Maven  (0) 2022.05.16
JSP Session  (0) 2022.05.13
JSP request, response  (0) 2022.05.11
JSP 지시자, 내장객체  (0) 2022.05.10
JSP 개념, 구성요소  (0) 2022.05.10