데이터를 저장할 수 있는 공간
더보기
화면에 보여주는 데이터를 다 보여주고 나면 서버와 접속이 끊어짐
링크를 눌렀을 때 해당하는 서버로 가서 데이터를 가져오고 나서 다시 접속이 끊어짐
사용자가 요청 > 시스템이 웹서버를 가져옴 > 클라이언트에게 보냄 (응답) > 연결이 끊김
쿠키 (Cookie) | 세션 (HttpSession) |
클라이언트 쪽에 저장 (웹브라우저에 저장) |
서버에 저장 |
문자열만 저장 | 객체, 문자, 숫자 등 원하는 자료형으로 저장 가능 |
쿠키(Cookie)
저장
- Cookie객체를 생성한다.
==> '쿠키이름'과 '쿠키값'을 지정해서 생성한다
('쿠키이름'과 '쿠키값'은 문자열로 지정한다)
형식) Cookie cookie변수 = new Cookie("쿠키이름", "쿠키값");- 쿠키값으로 한글을 사용할 경우에는 URLEncoder.encode()메서드로 인코딩한 후에 저장한다.
- 하나의 쿠키는 4KB(4096byte)까지 저장 가능하다.
- 하나의 도메인 당 20개(총 300개)까지 저장 가능하다.
- 쿠키 속성 설정
- cookie변수.setPath("적용경로");
지정한 경로와 그 하위 경로에서만 사용 가능하다
생략하면 쿠키를 설정할 당시 경로가 설정된다 - cookie변수.setMaxAge(유지시간);
단위(초)
-1 : 브라우저가 종료될 때까지 유지 (기본값)
0 : 즉시 해당 쿠키가 삭제된다. - cookie변수.setDomain("적용도메인명")
지정한 도메인명에서 사용이 가능하다
예) "ddit.or.kr"라면
http://www.ddit.or.kr | mail.ddit.or.kr같은 곳에서 사용 가능 - cookie변수.setSecure(보안여부)
true(적용), false(미적용)
- cookie변수.setPath("적용경로");
- Response객체를 이용하여 쿠키를 웹브라우저로 보내면 웹브라우저가 이 쿠키를 받아서 저장한다
형식) Response객체.addCookie(1번에서 만든 쿠키 객체)
읽기
- 전체 쿠키 정보를 Request 객체를 이용하여 가져온다
==> 가져온 쿠키 정보들은 배열에 저장된다
형식) Cookie[] 쿠키배열변수 = Request객체.getCookies(); - 쿠키 배열에서 해당 쿠키 정보를 구해온다
- cookie객체.getName()
쿠키이름 - cookie객체.getValue()
쿠키값
- cookie객체.getName()
삭제
- 쿠키 데이터의 삭제는 쿠키의 유지시간을 0으로 설정하는 방법을 사용한다.
삭제할 쿠키를 찾아서 해당 쿠키의 유지시간을 0으로 설정한 후 다시 저장하면 된다.
쿠키이름이 'gender'인 쿠키 삭제하기 - 쿠키 배열에서 해당 쿠키 정보를 구해온다
cookie객체.getName() - 쿠키이름이 삭제할 쿠키인지 검사한다
- 방법 1: 찾은 쿠키의 유지시간을 0으로 설정한 후 다시 저장하기
cookie.setMaxAge(0);
response.addCookie(cookie); - 방법 2: 쿠키 이름을 삭제할 쿠키이름과 같은 Cookie객체를 생성하고
생성된 쿠키의 유지시간을 0으로 설정한 후 저장하기
Cookie delCookie = new Cookie("gender", "..");
delCookie.setMaxAge(0);
response.addCookie(delCookie);
- 방법 1: 찾은 쿠키의 유지시간을 0으로 설정한 후 다시 저장하기
예시(저장/읽기/삭제)
JSP
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Cookie 연습</title>
</head>
<body>
<a href="<%=request.getContextPath()%>/cookieAdd.do">Cookie 정보 저장하기</a><br><br>
<a href="<%=request.getContextPath()%>/cookieRead.do">Cookie 정보 읽어오기</a><br><br>
<a href="<%=request.getContextPath()%>/cookieDelete.do">Cookie 정보 삭제하기</a><br><br>
</body>
</html>
CookieAdd 저장
package kr.or.ddit.cookie;
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("/cookieAdd.do")
public class CookieAddTest extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setCharacterEncoding("utf-8");
response.setContentType("text/html; charset=utf-8");
PrintWriter out = response.getWriter();
// Cookie 저장하는 방법
// 1. Cookie객체를 생성한다. ==> '쿠키이름'과 '쿠키값'을 지정해서 생성한다
// ('쿠키이름'과 '쿠키값'은 문자열로 지정한다)
// 형식) Cookie cookie변수 = new Cookie("쿠키이름", "쿠키값");
// ==> 쿠키값으로 한글을 사용할 경우에는 URLEncoder.encode()메서드로
// 인코딩한 후에 저장한다.
// ==> 하나의 쿠키는 4KB(4096byte)까지 저장 가능하다.
// ==> 하나의 도메인 당 20개(총 300개)까지 저장 가능하다.
Cookie nameCookie = new Cookie("name", "오리");
Cookie ageCookie = new Cookie("age", "20");
Cookie genderCookie = new Cookie("gender", "Male");
// 2. 쿠키 속성 설정
/*
cookie변수.setPath("적용경로"); ==> 지정한 경로와 그 하위 경로에서만 사용 가능하다
==> 생략하면 쿠키를 설정할 당시 경로가 설정된다
cookie변수.setMaxAge(유지시간); ==> 단위(초),
==> 유지시간이 -1일 경우(기본값) 브라우저가 종료될 때까지 유지
0 : 즉시 해당 쿠키가 삭제된다.
cookie변수.setDomain("적용도메인명")
지정한 도메인명에서 사용이 가능하다
==> 예) "ddit.or.kr" ==> www.ddit.or.kr
==> mail.ddit.or.kr
cookie변수.setSecure(보안여부)
true(적용), false(미적용)
*/
// 3. Response객체를 이용하여 쿠키를 웹브라우저로 보내면 웹브라우저가 이 쿠키를
// 받아서 저장한다
// 형식) Response객체.addCookie(1번에서 만든 쿠키 객체)
response.addCookie(nameCookie);
response.addCookie(ageCookie);
response.addCookie(genderCookie);
out.println("<html>");
out.println("<head><meta charset='utf-8'><title>Cookie 저장 연습</title></head>");
out.println("<body>");
out.println("<h3>Cookie 데이터가 저장되었습니다</h3>");
out.println("<br><hr><br>");
out.println("<a href='"+ request.getContextPath()
+"/cookie/cookieTest01.jsp'>시작문서로 이동</a>");
out.println("</body></html>");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
CookieRead 읽기
package kr.or.ddit.cookie;
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("/cookieRead.do")
public class CookieReadTest extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setCharacterEncoding("utf-8");
response.setContentType("text/html; charset=utf-8");
PrintWriter out = response.getWriter();
// 저장된 쿠키 읽어오기
// 1. 전체 쿠키 정보를 Request 객체를 이용하여 가져온다
// ==> 가져온 쿠키 정보들은 배열에 저장된다
// 형식) Cookie[] 쿠키배열변수 = Request객체.getCookies();
Cookie[] cookieArr = request.getCookies();
out.println("<html>");
out.println("<head><meta charset='utf-8'><title>Cookie 읽기 연습</title></head>");
out.println("<body>");
out.println("<h3>저장된 Cookie데이터 확인하기</h3>");
out.println("<hr color='teal'>");
if(cookieArr==null || cookieArr.length==0) {
out.println("<h3>저장된 Cookie가 없습니다</h3>");
} else {
// 2. 쿠키 배열에서 해당 쿠키 정보를 구해온다
for(Cookie cookie : cookieArr) {
String name = cookie.getName(); // '쿠키이름' 구하기
String value = cookie.getValue(); // '쿠키값' 구하기
out.println("쿠키이름 : "+name+"<br>");
out.println("쿠키값 : "+value+"<hr>");
}
}
out.println("<a href='"+ request.getContextPath()
+"/cookie/cookieTest01.jsp'>시작문서로 이동</a>");
out.println("</body></html>");
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
CookieDelete 삭제
package kr.or.ddit.cookie;
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;
/**
* Servlet implementation class CookieDeleteTest
*/
@WebServlet("/cookieDelete.do")
public class CookieDeleteTest extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setCharacterEncoding("utf-8");
response.setContentType("text/html; charset=utf-8");
PrintWriter out = response.getWriter();
// 쿠키 삭제하기
// 1. 쿠키 데이터의 삭제는 쿠키의 유지시간을 0으로 설정하는 방법을 사용한다.
// 삭제할 쿠키를 찾아서 해당 쿠키의 유지시간을 0으로 설정한 후 다시 저장하면 된다.
// 쿠키이름이 'gender'인 쿠키 삭제하기
Cookie[] cookieArr = request.getCookies();
out.println("<html>");
out.println("<head><meta charset='utf-8'><title>Cookie 삭제 연습</title></head>");
out.println("<body>");
out.println("<h3>저장된 Cookie데이터 삭제하기</h3>");
out.println("<hr color='teal'>");
if(cookieArr==null || cookieArr.length==0) {
out.println("<h3>저장된 Cookie가 없습니다</h3>");
} else {
// 2. 쿠키 배열에서 해당 쿠키 정보를 구해온다
for(Cookie cookie : cookieArr) {
String name = cookie.getName(); // '쿠키이름' 구하기
// 쿠키이름이 삭제할 쿠키인지 검사한다
if("gender".equals(name)) {
// 방법 1: 찾은 쿠키의 유지시간을 0으로 설정한 후 다시 저장하기
cookie.setMaxAge(0);
response.addCookie(cookie);
// 방법 2: 쿠키 이름을 삭제할 쿠키이름과 같은 Cookie객체를 생성하고
// 생성된 쿠키의 유지시간을 0으로 설정한 후 저장하기
// Cookie delCookie = new Cookie("gender", "..");
// delCookie.setMaxAge(0);
// response.addCookie(delCookie);
}
}
}
out.println("<a href='"+ request.getContextPath()
+"/cookie/cookieTest01.jsp'>시작문서로 이동</a>");
out.println("</body></html>");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
문제
JSP
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Cookie 연습</title>
</head>
<body>
<a href="<%=request.getContextPath()%>/cookieCountServlet.do">Cookie Count 증가하기</a><br><br>
<a href="<%=request.getContextPath()%>/cookieCountDelServlet.do">Cookie Count 초기화 하기</a><br><br>
</body>
</html>
CountAdd
package kr.or.ddit.cookie;
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;
/**
* Servlet implementation class CookieCountTest
*/
@WebServlet("/cookieCountServlet.do")
public class CookieCountTest extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setCharacterEncoding("utf-8");
response.setContentType("text/html; charset=utf-8");
PrintWriter out = response.getWriter();
int cnt = 1;
Cookie[] cookieArr = request.getCookies();
if(cookieArr!=null) {
for(Cookie co: cookieArr) {
String name = co.getName();
if(name.equals("cnt")) {
// 만약 쿠키값이 없으면 0
cnt = Integer.parseInt(co.getValue());
// 찾았다면 for문을 끝냄
break;
}
}
}
Cookie cntCookie = new Cookie("cnt", String.valueOf(++cnt));
response.addCookie(cntCookie);
out.println("<html>");
out.println("<head><meta charset='utf-8'><title>Cookie count 증가/title></head>");
out.println("<body>");
out.println("<h3>어서오세요. 당신은 "+cnt+"번째 방문입니다</h3>");
out.println("<hr color='teal'>");
out.println("<a href='"+ request.getContextPath()
+"/cookieCountServlet.do'>카운트 증가하기</a>");
out.println("<a href='"+ request.getContextPath()
+"/cookie/cookieTest02.jsp'>시작문서로 이동</a>");
out.println("</body></html>");
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
CountDel
package kr.or.ddit.cookie;
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;
/**
* Servlet implementation class CookieCountDeltTest
*/
@WebServlet("/cookieCountDelServlet.do")
public class CookieCountDeltTest extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setCharacterEncoding("utf-8");
response.setContentType("text/html; charset=utf-8");
PrintWriter out = response.getWriter();
Cookie[] cookieArr = request.getCookies();
out.println("<html>");
out.println("<head><meta charset='utf-8'><title>Cookie 초기화itle></head>");
out.println("<body>");
out.println("<h3>count가 초기화되었습니다</h3>");
out.println("<hr color='teal'>");
if(cookieArr==null || cookieArr.length==0) {
out.println("<h3>저장된 Cookie가 없습니다</h3>");
} else {
for(Cookie cookie : cookieArr) {
String name = cookie.getName(); // '쿠키이름' 구하기
// 쿠키이름이 삭제할 쿠키인지 검사한다
if("cnt".equals(name)) {
// 방법 1: 찾은 쿠키의 유지시간을 0으로 설정한 후 다시 저장하기
cookie.setMaxAge(0);
response.addCookie(cookie);
break;
}
}
}
out.println("<a href='"+ request.getContextPath()
+"/cookie/cookieTest02.jsp'>시작문서로 이동</a>");
out.println("</body></html>");
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
'JAVA > HIGH JAVA' 카테고리의 다른 글
[JAVA] 세션(HttpSession) (1) | 2024.06.03 |
---|---|
5/31 Homework - 로그인(쿠키로 id기억) (0) | 2024.05.31 |
[JAVA] UseCase (0) | 2024.05.30 |
[JAVA] Servlet 활용 & forward방식 redirect방식 (0) | 2024.05.29 |
[JAVA] 서블릿(Servlet) (1) | 2024.05.28 |