Cookie(쿠키)
- 클라이언트 쿠키 폴더에 저장
- 예: 장바구니
Session(세션)
- 서버에 저장
- 예: 로그인/로그아웃
- 웹 브라우저에서 서버로 어떤 데이터를 요청하면, 서버측에서는 알맞은 로직을 수행한 후 데이터를 웹 브라우저에 응답한 후 서버는 웹 브라우저와의 관계를 종료한다.
- 연결이 끊어졌을 때 어떤 정보를 지속적으로 유지하기 위한 수단으로 쿠키라는 방식을 사용한다.
- 쿠키는 서버에서 생성하여 서버가 아닌 클라이언트측에 특정 정보를 저장한다.(4KB 용량 제한)
- 세션도 쿠키와 마찬가지로 서버와의 관계를 유지하기 위한 수단입니다.
단, 쿠키와 달리 클라이언트의 특정 위치에 저장되는 것이 아니라, 서버상에 객체로 존재한다. - 따라서 세션은 서버에서만 접근이 가능하여 보안에 좋고, 데이터 용량 한계가 없다.
[예제] 장바구니 페이지를 만들어서 쿠키를 사용해보자.
09_example.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- 장바구니 저장, 보기, 삭제 -->
<form action="http://localhost:8181/webTesting/com/java/servlet/Example09_CookieSet" method="post">
<table>
<tr>
<td>
<img src="./../img/image1.jpg" width="200" height="150" />
</td>
<td>
<img src="./../img/image2.jpg" width="200" height="150" />
</td>
<td>
<img src="./../img/image3.jpg" width="200" height="150" />
</td>
</tr>
<tr>
<td align="center">
<input type="checkbox" name="food" value="image1"/>고구마
</td>
<td align="center">
<input type="checkbox" name="food" value="image2"/>옥수수
</td>
<td align="center">
<input type="checkbox" name="food" value="image3"/>블루베리
</td>
</tr>
<tr>
<td colspan="3" align="center">
<input type="submit" value="장바구니"/>
<input type="reset" value="취소"/>
</td>
</tr>
</table>
<div>
<a href="http://localhost:8181/webTesting/com/java/servlet/Example09_CookieGet">
장바구니 보기</a><br /><br />
<a href="http://localhost:8181/webTesting/com/java/servlet/Example09_CookieDel">
장바구니 삭제</a>
</div>
</form>
</body>
</html>
Example09_CoockieSet.java
package com.java.servlet;
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;
/**
* Servlet implementation class Example09
*/
public class Example09_CookieSet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public Example09_CookieSet() {
super();
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
String[] food = request.getParameterValues("food");
System.out.println(food.length);
// sessionScope : context(webTesting) 안에 모든 page에서 공유
// response : 쿠키 설정(저장), request : 쿠키 읽기
if(food.length != 0) {
for(int i=0; i<food.length; i++) {
// key, value
String key = "food" + (i+1);
String value = food[i];
System.out.println(key + "\t" + value);
Cookie cookie = new Cookie(key, value);
// 쿠키가 살아있는 시간 10분
cookie.setMaxAge(60*10); //초*분*시*일 (60*60*24*365)
//사용자가 쿠키 폴더에서 지우면
response.addCookie(cookie);
}
}
}
/**
* @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);
}
}
Example09_CoockieGet.java
package com.java.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class Example09_CookieGet
*/
public class Example09_CookieGet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public Example09_CookieGet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
Cookie[] cookies = request.getCookies();
//System.out.println(cookies.length);
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.print("<html>");
out.print("<head><title></title></head>");
out.print("<body>");
if(cookies != null) {
for(int i=0; i<cookies.length;i++) {
out.print("<h3>" + cookies[i].getName() + "</h3>");
out.print("<h3>" + cookies[i].getValue() + "</h3>");
}
String contextPath = request.getContextPath();
for(int i=0; i<cookies.length;i++) {
String imgStr = contextPath+"/img/"+ cookies[i].getValue() + ".jpg";
System.out.println(imgStr);
out.print("<img src='"+ imgStr +"' width='200' height='150' />");
}
}else {
out.print("<h3>장바구니가 비었습니다.</h3>");
}
out.print("</body>");
out.print("</html>");
out.close();
}
/**
* @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);
}
}
Example09_CoockieDel.java
package com.java.servlet;
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 Example09_CookieDel
*/
@WebServlet("/Example09_CookieDel")
public class Example09_CookieDel extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public Example09_CookieDel() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Cookie[] cookies = request.getCookies();
if(cookies!=null) {
for(int i=0; i<cookies.length; i++) {
// 쿠키를 지운다.
cookies[i].setMaxAge(0);
response.addCookie(cookies[i]);
}
}
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.print("<html>");
out.print("<head><title></title></head>");
out.print("<body>");
out.print("<script type='text/javascript'>");
out.print("alert('장바구니를 비웠습니다.');");
out.print("location.href='http://localhost:8181/webTesting/Servlet/09_example.html';");
out.print("</script>");
out.print("</body>");
out.print("</html>");
out.close();
}
/**
* @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);
}
}
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0">
<display-name>webTesting</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>Example09_CookieSet</servlet-name>
<servlet-class>com.java.servlet.Example09_CookieSet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Example09_CookieSet</servlet-name>
<url-pattern>/com/java/servlet/Example09_CookieSet</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>Example09_CookieGet</servlet-name>
<servlet-class>com.java.servlet.Example09_CookieGet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Example09_CookieGet</servlet-name>
<url-pattern>/com/java/servlet/Example09_CookieGet</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>Example09_CookieDel</servlet-name>
<servlet-class>com.java.servlet.Example09_CookieDel</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Example09_CookieDel</servlet-name>
<url-pattern>/com/java/servlet/Example09_CookieDel</url-pattern>
</servlet-mapping>
</web-app>
쿠키 확인
크롬 설정 > 개인정보 및 보안 > 사이트 설정 > 쿠키 및 사이트 데이터 > 모든 쿠키 및 사이트 데이터 보기
선택한 고구마, 옥수수 쿠키를 볼 수 있다
설정한 유효시간인 10분 후 쿠키가 사라졌음을 확인할 수 있다.
고구마, 옥수수, 블루베리 선택 후 장바구니 추가
장바구니 비우기 클릭
비운 후 장바구니 보기 클릭
[예제] 로그인 페이지를 만들어서 세션을 사용해보자.
10_example.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="http://localhost:8181/webTesting/com/java/servlet/Example10_SessionSet" method="post">
<label>아이디</label>
<input type="text" name="id"/>
<br /><br />
<label>비밀번호</label>
<input type="text" name="pwd"/>
<br /><br />
<input type="submit" value="로그인"/>
<input type="reset" value="취소" />
</form>
<br /><br />
<div>
<a href="http://localhost:8181/webTesting/com/java/servlet/Example10_SessionGet">
세션 보기</a><br /><br />
<a href="http://localhost:8181/webTesting/com/java/servlet/Example10_SessionDel">
로그아웃</a>
</div>
</body>
</html>
Example10_SessionSet.java
package com.java.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
* Servlet implementation class Example10_SessionSet
*/
public class Example10_SessionSet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public Example10_SessionSet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
/* 웹 브라우저에서 서버로 어떤 데이터를 요청하면, 서버측에서는 알맞은 로직을 수행한 후
* 데이터를 웹 브라우저에 응답한 후 서버는 웹 브라우저와의 관계를 종료한다.
* 연결이 끊어졌을 때 어떤 정보를 지속적으로 유지하기 위한 수단으로 쿠키라는 방식을 사용한다.
* 쿠키는 서버에서 생성하여 서버가 아닌 클라이언트측에 특정 정보를 저장한다.(4KB 용량 제한)
*
* 세션도 쿠키와 마찬가지로 서버와의 관계를 유지하기 위한 수단입니다.
* 단, 쿠키와 달리 클라이언트의 특정 위치에 저장되는 것이 아니라, 서버상에 객체로 존재한다.
* 따라서 세션은 서버에서만 접근이 가능하여 보안에 좋고, 데이터 용량 한계가 없다.
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
String id = request.getParameter("id");
String pwd = request.getParameter("pwd");
System.out.println(id + "\t" + pwd);
// 현재 session 이 존재하면 기존 session 리턴하고, 존재하지 않은 새로운 session 리턴
HttpSession session = request.getSession();
String msg = "";
if(session.isNew()) {
msg= "새로운 세션이 생성";
session.setAttribute("id", id);
session.setAttribute("pwd", pwd);
}else {
msg= "기존 세션이 반환";
}
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.print("<html>");
out.print("<head><title></title></head>");
out.print("<body>");
out.print("<script type='text/javascript'>");
out.print("alert('"+ msg +": 로그인 성공');");
out.print("location.href='http://localhost:8181/webTesting/Servlet/10_example.html';");
out.print("</script>");
out.print("</body>");
out.print("</html>");
out.close();
}
/**
* @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);
}
}
Example10_SessionGet.java
package com.java.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
* Servlet implementation class Example10_SessionGet
*/
public class Example10_SessionGet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public Example10_SessionGet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession();
if(!session.isNew()) {
String id= (String) session.getAttribute("id");
String pwd = (String) session.getAttribute("pwd");
System.out.println(id + "\t" + pwd + "\t" + session.getId());
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.print("<html>");
out.print("<head><title></title></head>");
out.print("<body>");
out.print("<h3> 아이디:" +id+ "</h3>");
out.print("<h3> 비밀번호:" +pwd+ "</h3>");
out.print("</body>");
out.print("</html>");
out.close();
}
}
/**
* @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);
}
}
Example10_SessionDel.java
package com.java.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
* Servlet implementation class Example10_SessionDel
*/
public class Example10_SessionDel extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public Example10_SessionDel() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
if(request.isRequestedSessionIdValid()) {
System.out.println("세션 아이디가 유효합니다.");
}else {
System.out.println("세션 아이디가 유효하지 않습니다.");
}
HttpSession session = request.getSession();
if(!session.isNew()) {
session.invalidate(); //세션종료
if(request.isRequestedSessionIdValid()) {
System.out.println("세션 아이디가 유효합니다.");
}else {
System.out.println("세션 아이디가 유효하지 않습니다.");
}
}
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.print("<html>");
out.print("<head><title></title></head>");
out.print("<body>");
out.print("<h3> 로그아웃 되었습니다. </h3>");
out.print("</body>");
out.print("</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);
}
}
Example11.java
package com.java.servlet;
import java.io.IOException;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
* Servlet implementation class Example11
*/
@WebServlet("/Example11")
public class Example11 extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public Example11() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession();
// 세션 생성시간
long createTime = session.getCreationTime();
// 세션 마지막 접근시간
long lastTime = session.getLastAccessedTime();
// 사이트 머문 시간 = 마지막 접근시간 - 생성시간
long userTime = (lastTime - createTime)/60000;
Date date = new Date(createTime);
System.out.println("생성시간: "+createTime + "\t" + date);
System.out.println("마지막 접근시간:" +lastTime + "\t" + new Date(lastTime).toString());
System.out.println("머문시간:" +userTime);
/*if(userTime < 5) { // 5분이 안되면 세션자동으로 끊어준다.
session.invalidate();
}*/
int max = session.getMaxInactiveInterval() / 60; // 30분부여 - 서버
System.out.println(max + "분");
// 액션이 없을 경우 세션 시간 설정으로 자동 종료
if(request.isRequestedSessionIdValid()) {
System.out.println("세션 아이디가 유효합니다.");
}else {
System.out.println("세션 아이디가 유효하지 않습니다.");
}
// 액션(마우스나 키보드)이 없을때 세션 시간 설정으로 자동 종료
session.setMaxInactiveInterval(60);
}
/**
* @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);
}
}
세션 테스트 클릭
Example11.java
package com.java.servlet;
import java.io.IOException;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
* @author : 김소현
* @Date : 2020. 6. 10.
* @Description :
*/
public class Example11 extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public Example11() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession();
// 세션 생성시간
long createTime = session.getCreationTime();
// 세션 마지막 접근시간
long lastTime = session.getLastAccessedTime();
// 사이트 머문 시간 = 마지막 접근시간 - 생성시간
long userTime = (lastTime - createTime)/60000;
Date date = new Date(createTime);
System.out.println("생성시간: "+createTime + "\t" + date);
System.out.println("마지막 접근시간:" +lastTime + "\t" + new Date(lastTime).toString());
System.out.println("머문시간:" +userTime);
/*if(userTime < 5) { // 5분이 안되면 세션자동으로 끊어준다.
session.invalidate();
}*/
int max = session.getMaxInactiveInterval() / 60; // 30분부여 - 서버
System.out.println(max + "분");
// 액션이 없을 경우 세션 시간 설정으로 자동 종료
if(request.isRequestedSessionIdValid()) {
System.out.println("세션 아이디가 유효합니다.");
}else {
System.out.println("세션 아이디가 유효하지 않습니다.");
}
// 액션(마우스나 키보드)이 없을때 세션 시간 설정으로 자동 종료
session.setMaxInactiveInterval(60);
}
/**
* @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);
}
}
ContextLifeCycle.java
package com.java.contextLifeCycle;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
/**
* @author : 김소현
* @Date : 2020. 6. 10.
* @Description : 웹 어플리케이션(webTesting / context) 생명주기
*
*
* <listener>
* <listener-class>com.java.contextLifeCycle.ContextListener</listener-class>
* </listener>
*
*/
public class ContextListener implements ServletContextListener{
@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("contextInitialized~~~~~~~~~~~~~~~~~~~~~~~");
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("contextDestroyed~~~~~~~~~~~~~~~~~~~~~~~");
}
}
'Coding > JSP' 카테고리의 다른 글
[MVC/DB연동] 로그인 페이지 (로그아웃, 회원수정, 회원탈퇴 기능) (2) (0) | 2022.04.08 |
---|---|
JSTL(JSP Standard Tag Library) 다운로드 / c:set, c:remove (0) | 2022.04.04 |
EL, JSTL (0) | 2022.04.04 |
[Servlet] Servlet 객체 범위 (0) | 2022.04.04 |
[Servlet] Servlet(서블릿) (1) (0) | 2022.04.04 |