1.쿠키란
웹브라우저 - > 파라미터 - > 웹서버 정보전달
웹서버 -> 쿠키 -> 웹브라우저 정보전달
2. 쿠키의구성
쿠키는 이름 + 값
이름 - >여러개의 쿠키가 있으면 이름으로 구분한다.
값 ->서버는 이 값을 사용해서 작업을 수행한다
3. 쿠키의 제한
쿠키의 이름은 알파벳과 숫자로 이루어져 있고 콤마 세미콜론은 안된다.
4. 쿠키의 생성
Cookie cookie = new Cookie("cookiename","cookievalue");
response.addCookie("cookie");
위 코드처럼 작성하면 쿠키가 생성된다.
5. 쿠키의 변경
이름이 name 인 쿠키의 값을 변경하기위해서는
Cookie cookie = new Cookie("name", URLEncode.encode("새로운값","euc-kr"));
response.addCookie(cookie);
사실 이렇게 해버리면 쿠키가 없는 에는 그냥 생성해버리므로 실제쓸때는 조건문이 조금 들어가야한다
Cookie[] cookies = request.getCookies(); //쿠키를 배열로 읽어들이고
if(cookies != null && cookies.length >0){
for(i=0; i<cookies.length; i++){
if((cookies[i].getName().equals("name")){ //name에는 변경할 쿠키이름
Cookie cookie = new Cookie("name", URLEncode.encode("새로운값","euc-kr"));
}
}
}
이런식으로 바꾼다.
6. 쿠키의 삭제
쿠키의 삭제는 위에랑 똑같다
Cookie[] cookies = request.getCookies(); //쿠키를 배열로 읽어들이고
if(cookies != null && cookies.length >0){
for(i=0; i<cookies.length; i++){
if((cookies[i].getName().equals("name")){ //name에는 변경할 쿠키이름
cookie[i].setMaxAge(0); // 해버리면 삭제된다
}
}
}
7. 쿠키를 편하게 쓰도록 클래스 파일하나만 만들어보자
package util;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.Cookie;
import java.util.Map;
import java.net.URLEncoder;
import java.net.URLDecoder;
import java.io.IOException;
public class CookieUil {
// 쿠키를 <쿠키이름, cookie 객체> 쌍으로 저장하는 맵
private Map cookieMap = new java.util.HashMap();
/*
* 생성자
* cookie배열을 cookieMap에 저장한다.
* @param request
*/
public CookieUil(HttpServletRequest request) {
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (int i = 0 ; i < cookies.length ; i++) {
cookieMap.put(cookies[i].getName(), cookies[i]);
}
}
}
/*
* 쿠키객체를 생성해서 리턴
* @param name
* @param value
* @return cookie
* @throws IOException
*/
public static Cookie createCookie(String name, String value)
throws IOException {
return new Cookie(name, URLEncoder.encode(value, "utf-8"));
}
/*
* 쿠키객체를 생성해서 리턴
* @param name
* @param value
* @param path
* @param maxAge
* @return cookie
* @throws IOException
*/
public static Cookie createCookie(String name, String value, String path, int maxAge)
throws IOException {
Cookie cookie = new Cookie(name, URLEncoder.encode(value, "utf-8"));
cookie.setPath(path);
cookie.setMaxAge(maxAge);
return cookie;
}
/*
* 쿠키객체를 생성해서 리턴
* @param name
* @param value
* @param domain
* @param path
* @param maxAge
* @return cookie
* @throws IOException
*/
public static Cookie createCookie(String name, String value, String domain, String path, int maxAge)
throws IOException {
Cookie cookie = new Cookie(name, URLEncoder.encode(value, "utf-8"));
cookie.setDomain(domain);
cookie.setPath(path);
cookie.setMaxAge(maxAge);
return cookie;
}
/*
* 쿠키를 가져온다
* @param name
* @return cookie
*/
public Cookie getCookie(String name) {
return (Cookie)cookieMap.get(name);
}
/*
* 쿠키의 값을 가져온다
* @param name
* @return value
* @throws IOException
*/
public String getValue(String name) throws IOException {
Cookie cookie = (Cookie)cookieMap.get(name);
if (cookie == null) return null;
return URLDecoder.decode(cookie.getValue(), "utf-8");
}
/*
* 쿠키 삭제
* @param cookieKey
* @return
*/
public Cookie deleteCookie(String cookieKey){
Cookie cookie = null;
if(isExist(cookieKey)){
cookie = getCookie(cookieKey);
// 쿠키생성시에 setPath()가 설정되어 있으면 삭제시에도 해당 패스를 다시 삭제하기위해서 생성된
// 쿠키에 재설정하고 setMaxAge(0)으로 설정하며 삭제합니다.
if(cookie.getPath() != null){
cookie.setPath(cookie.getPath());
}else{
cookie.setPath("/");
}
if(cookie.getDomain() != null){
cookie.setDomain(cookie.getDomain());
}
cookie.setMaxAge(0);
}
return cookie;
}
/*
* 쿠키 존재 여부
* @param name
* @return 존재 : true, 미존재 : false
*/
public boolean isExist(String name) {
return cookieMap.get(name) != null;
}
}
8. 다음은 쿠키를 관리하는 유틸의 사용법이다.
// CookieUtil 클래스의 생성자는 request로부터 쿠키 정보를 추출
CookieUtil cookieUtil = new CookieUtil(request);
// 쿠키가 존재하지 않으면 null 리턴
Cookie idCookie = cookieUtil.getCookie("id");
// 지정한 이름의 쿠키가 존재하는지의 여부
if (cookieUtil.exists("name")) {
...
}
// 지정한 이름의 쿠키가 존재하지 않으면 값으로 null 리턴
String value = cookieUtil.getValue("ROLE");
* 쿠키 생성
-> createCookie 함수를 사용하여 각각에 맞는 쿠키를 생성
생성 후 리턴받은 cookie를 response.addCookie(cookie); 해주는 것은 잊지 말자! (클라이언트에게 전송)
* 쿠키 삭제
-> deleteCookie 함수를 사용해서 삭제
cookie가 없다면 리턴값은 null 이고
cookie를 리턴받았으면 response.addCookie(cookie); 해주는 것도 잊지 말자! (클라이언트에게 전송)
* jsp 에서 쿠키 유틸 사용법
<%@page import = " util.CookieUtil %>
Cookie cookie = response.addCookie(CookieUtil.createCookie("이름","값","path",60));
변수값은 이름 , 값, path , 시간을 지정하였다.
* jsp 에서 쿠키 유틸 읽기 방법
<%@ page contentType = "text/html; charset=euc-kr" %>
<%@ page import = "util.CookieUtil" %>
<%
CookieUtil cookieUtil = new CookieUtil(request);
%>
<html>
<head><title>Cookie 사용</title></head>
<body>
name 쿠키 = <%= cookieUtil.getValue("name") %> <br>
<% if (cookieUtil.exists("id")) { %>
id 쿠키 = <%= cookieUtil.getValue("id") %> <br>
<% } %>
</body>
</html>
반응형
'JAVA' 카테고리의 다른 글
[Java] 자바 버전 확인 하는법 (0) | 2021.12.13 |
---|---|
쿠키(Cookie)의 생성, 응용편 (0) | 2021.12.12 |
Java Cookie 사용하기 (0) | 2021.12.11 |
Java(자바) 형변환 하기 (0) | 2021.12.10 |
Java 와 JavaEE의 차이점 (0) | 2021.12.10 |
최근댓글