
성낙현의 JSP 자바 웹 프로그래밍
- 쿠키
쿠키란, 클라이언트의 상태 정보등을 키(Key), 값(value) 형태로 저장하는 기술입니다.
쿠키로 저장할 값을 클라이언트 단에서 저장하다가, 다음 요청 시 요청과 함께 서버로 전송합니다.
- 쿠키의 제약조건
1) 3000개까지 생성 가능
2) 쿠키 하나의 최대 크기는 4096바이트 입니다.
3) 하나의 호스트나 도메인에서 최대 50개까지 만들 수 있습니다.
4) 쿠키 키(Key), 값(value) 은 String형으로 저장할 수 있으며, 몇몇의 특수문자는 제한됩니다.
( ) < > @ , ; : \ " / [ ] ? = { }
- 쿠키 굽는 방법
1) 쿠키 생성 : 쿠키를 생성할 때는 Cookie 생성자를 이용해서 생성합니다.
Cookie 변수명 = new Cookie(String Key, String value);
2) 도메인 설정 : 쿠키에 적용할 도메인을 설정합니다.
변수명.setDomain(String domain);
3) 경로 설정 : 쿠키가 적용될 경로로 지정합니다.
변수명.setPath(String path);
4) 수명 설정 : 해당 쿠키가 유지될 기간을 초단위로 작성합니다. 미작성 시 0으로 설정되면 만들어지자마자 사라집니다.
변수명.setMaxAge(int age);
5) 열심히 만든 쿠키 추가하기 : 위 순서대로 만든 쿠키를 response 객체를 이용해서 응답헤더에 쿠키를 추가합니다.
- 쿠키 값 바꾸기
변수명.setValue(String value);
- 쿠키 정보 읽기
1) 쿠키 정보 갖고오기 : request 객체를 이용해서 생성되어있는 쿠키 정보를 배열로 가져옵니다.
Cookie[] 변수명 = request.getCookie();
2) 쿠키 값 가져오기 : 위 생성한 배열에서 getName, getValue 으로 쿠키명과 값을 갖고올 수 있습니다.
for(Cookie 변수명1 : 쿠키담은 변수명) {
String 쿠키이름 담을 변수명 = 변수명1.getName();
String 쿠키값 담을 변수명 = 변수명1.getValue();
}
위 for문을 이용해서 if문으로 조건을 걸어 원하는 쿠키만 갖고오는 식으로 활용할 수 있습니다.
3) 쿠키의 다양한 정보 갖고오기
쿠키담은변수.getDomain(); => 도메인 정보
쿠키담은변수.getPath(); => 경로 정보
쿠키담은변수.getMaxAge(); => 쿠키 수명
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page trimDirectiveWhitespaces="true" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2>쿠키 사용하기</h2>
<%!
// 쿠키 값 저장하는 메서드로 사용하는 법(예시)
/*
public void setCookie(String name, String val, String path, int expire_date, String domain, HttpServletRequest req, HttpServletResponse reps) {
Cookie cookie = new Cookie(name, val);
cookie.setPath(!(path.isEmpty()) ? path : req.getContextPath());
cookie.setMaxAge(expire_date > 0 ? expire_date : 0);
cookie.setDomain(!(domain.isEmpty())? domain : "");
reps.addCookie(cookie);
}
*/
%>
<h3>1. 쿠기 저장</h3>
<%
Cookie cookie = new Cookie("myCookie", "쿠키값1");
cookie.setPath(request.getContextPath()); // 컨텍스트 패스에 값을 안주면 루트가 됨
cookie.setMaxAge(3600);
response.addCookie(cookie);
// 위 작성한 메서드 활용해보기 (예시)
//setCookie("myCookie", "쿠키값1", "/", 3600, "", request, response);
%>
<h3>2. 쿠기 조회</h3>
<%
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for(Cookie c : cookies) {
String cookieName = c.getName();
String cookieVal = c.getValue();
out.print(String.format("%s : %s<br>", cookieName, cookieVal));
}
}
%>
<a href="cookie2.jsp">쿠키 조회하기</a>
</body>
</html>
// 리스트 페이지
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page trimDirectiveWhitespaces="true" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<ul>
<%
for(int i = 1; i < 11; i++) {
out.print("<li><a href='click.jsp?params=" + i + "'>리스트" + i + "</a></li>");
}
%>
</ul>
</body>
</html>
// 쿠키 굽는 페이지
<%@page import="java.util.*"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page trimDirectiveWhitespaces="true" %>
<%@ page import="chap04.CookieUtil"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
// 뉴 버전
String param;
String referer;
// 파라미터 값 읽어서 가져오기
String params = request.getParameter("params");
String referers = request.getHeader("referer");
param = params;
referer = referers;
// 이전 쿠키 값 갖고와서 넣기
String paramC = CookieUtil.getCookieValue(request, "paramList");
String refererC = CookieUtil.getCookieValue(request, "referlerList");
if(paramC != null && paramC != "" && paramC != "null") {
if(paramC.indexOf("~") > 0) {
String[] arrParam = paramC.split("~");
if(arrParam.length < 3){
param = param + "~" + paramC;
} else {
param = param + "~" + paramC.substring(0, paramC.lastIndexOf("~"));
}
} else {
param = param + "~" + paramC;
}
}
if(refererC != null && refererC != "" && refererC != "null") {
if(refererC.indexOf("~") > 0) {
String[] arrReferer = refererC.split("~");
if(arrReferer.length < 3){
referer = referer + "~" + refererC;
} else {
referer = referer + "~" + refererC.substring(0, refererC.lastIndexOf("~"));
}
} else {
referer = referer + "~" + refererC;
}
}
// 쿠키 꾸워
CookieUtil.setCookie(response, "paramList", param, 3600, "/");
CookieUtil.setCookie(response, "referlerList", referer, 3600, "/");
/*
// 예전 버전
List<String> paramList = new ArrayList<String>();
List<String> referlerList = new ArrayList<String>();
// 이전 쿠기 값 갖고와서 리스트로 전환 후 넣기
String paramC = CookieUtil.getCookieValue(request, "paramList");
if(paramC != null && paramC != "" && paramC != "null") {
List<String> orgParam = Arrays.asList((paramC.replace("|", " ")).split(" "));
for (String e : orgParam) {
paramList.add(e);
}
}
String refererC = CookieUtil.getCookieValue(request, "referlerList");
if(refererC != null && refererC != "" && refererC != "null") {
List<String> orgrefer = Arrays.asList((refererC.replace("|", " ")).split(" "));
for (String e : orgrefer) {
referlerList.add(e);
}
}
// list 페이지에서 파라미터 값 받아서 리스트에 넣어주기
String params = request.getParameter("params");
if ((paramList.size()) < 3) {
paramList.add(params);
} else {
paramList.remove(0);
paramList.add(params);
}
// 최종 리스트를 String으로 전환
String realParams = (((paramList.toString()).replace("[", "")).replace("]","")).replace(", ", "|");
String referer = request.getHeader("referer");
if ((referlerList.size()) < 3) {
referlerList.add(referer);
} else {
referlerList.remove(0);
referlerList.add(referer);
}
String realRefere = (((referlerList.toString()).replace("[", "")).replace("]","")).replace(", ", "|");
// 쿠키 꾸워
CookieUtil.setCookie(response, "paramList", realParams, 3600, "/");
CookieUtil.setCookie(response, "referlerList", realRefere, 3600, "/");
*/
// 넘겨
response.sendRedirect("show.jsp");
%>
<h2><%= param %></h2>
<h2><%= referer %></h2>
<h2><%= params %></h2>
<h2><%= referers %></h2>
<h2><%= paramC %></h2>
<h2><%= refererC %></h2>
<h2><% if(paramC.indexOf("~") > 0) {out.print(Arrays.toString(paramC.split("~")));} else {out.print(paramC);} %></h2>
<h2><% if(refererC.indexOf("~") > 0) {out.print(Arrays.toString(refererC.split("~")));} else {out.print(refererC);} %></h2>
</body>
</html>
// 결과 페이지
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page trimDirectiveWhitespaces="true" %>
<%@ page import="chap04.CookieUtil"%>
<%@page import="java.util.*"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
String param = CookieUtil.getCookieValue(request, "paramList");
List<String> paramList = Arrays.asList((param.replace("~", " ")).split(" "));
String referer = CookieUtil.getCookieValue(request, "referlerList");
List<String> refererList = Arrays.asList((referer.replace("~", " ")).split(" "));
%>
<ul>
<%
for(int i = 0; i < paramList.size(); i++) {
out.print("<li>" + (i+1) + "번째 param : " + paramList.get(i) + " url : " + refererList.get(i));
}
%>
</ul>
<a href="list.jsp"><button>돌아가기</button></a>
</body>
</html>