출처사이트 : https://uoonleen.tistory.com/m/65
■ 쿠키(Cookie)란?
▶ URL 인코딩을 하여 저장하면 됩니다.
─────
쿠키의 사용 I : 쿠키 객체 생성
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("/cookieEx/Servlet01")
public class Servlet01 extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException { /* 1) 쿠키 생성 */ Cookie cookie = new Cookie("c1", "aaaaaa"); /* 2) 쿠키를 응답 헤더에 포함시켜 보내기 HTTP/1.1 200 Set-Cookie: c1=aaaaaa <----- 쿠키 데이터가 이렇게 헤더에 추가됨. Content-Type: text/plain;charset=UTF-8 Content-Length: 29 Date: Mon, 12 Jun 2017 03:35:03 GMT */ resp.addCookie(cookie); resp.setContentType("text/plain;charset=UTF-8"); PrintWriter out = resp.getWriter(); out.println("Servlet01: 쿠키 보냈음."); } }
▶ 서버를 실행하고 웹브라우저 url 주소에 localhost:8080/프로젝트명/cookieEx/Servlet01 을 입력하면 쿠키가 생성되어 웹브라우저에 저장됩니다.
────
웹브라우저에 저장된 쿠키의 값을 읽기
mport 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;
/* 쿠키 읽기 I
* => 웹브라우저가 보낸 쿠키 정보를 읽기
*/
@WebServlet("/cookieEx/CookieReader01")
public class CookieReader01 extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
resp.setContentType("text/plain;charset=UTF-8");
PrintWriter out = resp.getWriter();
/* 1) 요청 헤더에서 쿠키 정보를 추출하기
* => 웹브라우저가 쿠키를 보내지 않았다면, null을 리턴한다.
GET /프로젝트명/cookieEx/CookieReader01 HTTP/1.1
Host: localhost:8080
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,
*... Accept-Encoding: gzip, deflate, sdch, br Accept-Language: ko-KR,ko;q=0.8,en-US;q=0.6,en;q=0.4 Cookie: c1=aaaaaa <------------ 웹브라우저가 웹서버에 보내는 쿠키 데이터 */ Cookie[] cookies = req.getCookies(); // 2) 읽은 쿠기 정보 출력하기 if (cookies != null) { for (Cookie cookie : cookies) { out.printf("%s=%s\n", cookie.getName(), // 쿠키 이름 cookie.getValue()); // 쿠키 값 } } else { out.println("쿠키가 한 개도 없습니다."); } } }
▶ 서버를 실행시킨 후 웹브라우저 url 주소에 localhost:8080/프로젝트명/cookieEx/CookieReader01 을 입력하면 저장된 쿠키의 이름과 값이 출력됩니다.
─────
쿠키의 사용 II : 사용 범위 지정
cookie.setPath(req.getContextPath());
▶ 쿠키의 사용 범위를 지정해주지 않으면 쿠키를 보낸 서블릿의 경로에
한정됩니다. 따라서 쿠키의 사용 범위를 현재 웹 어플리케이션 전체로
지정하고 싶다면 setPath(주소) 함수를 이용해야 합니다.
▶ 여기서 req.getContextPath() 는 "/웹프로젝트명"과 동일합니다.
─────
쿠키의 사용 III : 사용 기간 지정
cookie.setMaxAge(60);
▶ 쿠키의 사용 기간을 지정하지 않으면 웹브라우저가 실행되는 동안만
쿠키가 보관됩니다. 웹브라우저를 '모두' 닫으면 사용 기간을 지정하지
않은 쿠키는 모두 소멸되어 버리는 것이죠.
▶ 사용 기간을 지정하면, 컴퓨터를 껐다 켜도 지정한 시간 만큼 유지할 수
있습니다. 웹브라우저는 보낼 쿠키를 검사할 때 사용 기간이 지난 쿠키는
제거합니다.
▶ 여기서 setMaxAge() 메서드의 파라미터로 넘어가는 값(60)의 단위는 '초'입니다.
─────
쿠키의 사용 IV : 한글 보내는 법
Cookie cookie = new Cookie("c4", URLEncoder.encode("ABC가각간", "UTF-8"));
▶ 만약 웹서버가 유니코드를 그대로 내보내는 서버가 아니라면, 위와 같이
개발자가 URL 인코딩을 직접 수행해야 합니다.
▶ 한글 "가각간"을 보내주기 위해선 URLEncoder 인스턴스의 encode()
메서드를 사용해야 하는 것입니다. 첫번째 아규먼트로 넘겨줄 값을,
두번째 아규먼트로 인코딩 형식을 지정해야 하죠.
▶ 웹서버가 유니코드 값을 보내더라도 웹브라우저 중에서는 유니코드를
처리할 수 없는 브라우저도 있기 때문에 개발자가 URL 인코딩을 해서
보내기를 권장합니다.
왜 URL 인코딩을 해야만 하는지에 대해선 이전 글을 참고해주세요 :)
2017/06/12 - [Programming/java] - [Java] URL 인코딩이란 무엇인가?
─────
쿠키의 사용 V : 한글로 인코딩 된 쿠키 값을 읽기
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;
/* 쿠키 읽기 III
* => 쿠키 값이 URL 인코딩 되어 있을 때,
* 개발자가 직접 URL 디코딩을 수행해야 한다.
*
*/
@WebServlet("/cookieEx/CookieReader03")
public class CookieReader03 extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
resp.setContentType("text/plain;charset=UTF-8");
PrintWriter out = resp.getWriter();
Cookie[] cookies = req.getCookies();
if (cookies != null) {
for (Cookie cookie : cookies) {
out.printf("%s=%s\n",
cookie.getName(), // 쿠키 이름
URLDecoder.decode(cookie.getValue(), "UTF-8"));
// 영어는 URL 디코딩해도 값이 같다. 그러니 영어를 디코딩하는 것에 대해 걱정말라!
}
} else {
out.println("쿠키가 한 개도 없습니다.");
}
}
}
▶ URLEncoder를 통해 인코딩 된 쿠키 데이터(한글 값)는 URLDecoder의
decode() 메서드를 통해 디코딩 시켜주어야 합니다.
▶ decode() 메서드에 넣어주는 첫번째 아규먼트는 쿠키 데이터, 두번째
아규먼트는 디코딩 형식입니다.
▶ 영어는 URL 디코딩을 해도 값이 달라지지 않습니다. 그러니 영어를
디코딩하는 것에 대해선 걱정마세요 :)
'웹개발 > js' 카테고리의 다른 글
script 웹페이지 잘리지 않게 PDF 파일로 만들기 (0) | 2022.10.17 |
---|---|
Javascript 화면 캡쳐 [html2canvas] (0) | 2022.10.17 |
쿠키등록 ( 팝업창 하루동안 열지 않기 & 하루에 한번만 띄우기) (0) | 2022.02.18 |
JavaScript 키보드 이벤트 생성 (0) | 2022.02.17 |
Javascript에서 DOM의 특정 요소(element) 찾는 방법 (0) | 2022.02.17 |
댓글