반응형
비연결성 (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 |