[JSP/Servlet] Cookie 예제 -숫자 누적처리
- BACKEND/Servlet&JSP
- 2017. 5. 11. 18:14
● 목록
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_3_1.xsd" version="3.1">
<display-name>cookie_stacknumber</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>
<!-- Cookie 숫자 누적처리 - StackNumber -->
<servlet>
<servlet-name>stackNumber</servlet-name>
<servlet-class>servlet.cookie.stacknum.StackNumberServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>stackNumber</servlet-name>
<url-pattern>/cookie/stack/stackNumber</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>showStackNumber</servlet-name>
<servlet-class>servlet.cookie.stacknum.ShowStackNumberServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>showStackNumber</servlet-name>
<url-pattern>/cookie/stack/showStackNumber</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>removeStackNumber</servlet-name>
<servlet-class>servlet.cookie.stacknum.RemoveStackNumberServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>removeStackNumber</servlet-name>
<url-pattern>/cookie/stack/removeStackNumber</url-pattern>
</servlet-mapping>
</web-app>
request.jsp
<%@ page contentType="text/html;charset=utf-8" %>
<html>
<head>
<meta charset="UTF-8">
<title>쿠키 예제</title>
</head>
<body>
<h2>숫자 누적 쿠키 테스트</h2>
<a href="/cookie_stacknumber/cookie/stack/stackNumber">숫자 누적 요청</a><br>
<a href="/cookie_stacknumber/cookie/stack/showStackNumber">누적된 숫자 보기</a><br>
<a href="/cookie_stacknumber/cookie/stack/removeStackNumber">누적된 숫자 쿠키 삭제</a>
</body>
</html>
response.jsp
<%@ page contentType="text/html;charset=utf-8" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2>누적 숫자 값</h2>
<%=request.getAttribute("message") %><p>
<a href="/cookie_stacknumber/cookie/stack/request.jsp">request.jsp 로 이동</a>
</body>
</html>
StackNumberServlet.java
package servlet.cookie.stacknum;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class StackNumberServlet extends HttpServlet{
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 1. 누적할 임의의 숫자를 생성
int num = (int)(Math.random()*100)+1;
// 2. 누적되 있는 쿠키값(name : stackNumber)을 조회
Cookie [] cookies = request.getCookies();
String stackNumber = "";//누적된 숫자를 저장할 변수 - 쿠키로 전송될값
if(cookies != null){
for(int i = 0; i < cookies.length; i++){
if(cookies[i].getName().equals("stackNumber")){
// 기존 Cookie에 저장된 누적 숫자들 + num(랜덤값)
stackNumber = cookies[i].getValue()+","+num;
break;
}
}
}
//첫 누적
if(stackNumber.isEmpty()){
stackNumber = stackNumber+num;
}
//쿠키 생성 및 전송 처리
response.addCookie(new Cookie("stackNumber", stackNumber));
RequestDispatcher rdp = request.getRequestDispatcher("/cookie/stack/request.jsp");
rdp.forward(request, response);
}
}
ShowStackNumberServlet.java
package servlet.cookie.stacknum;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ShowStackNumberServlet extends HttpServlet{
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 쿠키값들 조회
Cookie [] cookies = request.getCookies();
// stackNumber 이름의 쿠키를 찾아 그 값을 request 속성 저장 영역에 binding
String message = null;
if(cookies != null){
for(Cookie cookie : cookies){
if(cookie.getName().equals("stackNumber")){
message = cookie.getValue();
}
}
}
if(message != null){
request.setAttribute("message", message);
}else{
request.setAttribute("message", "누적된 숫자가 없습니다.");
}
//response.jsp로 이동해 출력
request.getRequestDispatcher("/cookie/stack/response.jsp").forward(request, response);
}
}
RemoveStackNumberServlet.java
package servlet.cookie.stacknum;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class RemoveStackNumberServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Cookie cookie = new Cookie("stackNumber", "");//삭제할 것이므로 값은 상관없다.
cookie.setMaxAge(0);
response.addCookie(cookie);
RequestDispatcher rdp = request.getRequestDispatcher("/cookie/stack/request.jsp");
rdp.forward(request, response);
}
}
● 결과
-> 누적된 숫자 보기를 여러번 클릭하면 임의의 값이 계속 추가되어 출력된다.
-> 누적된 숫자 쿠키 삭제를 하면 쿠키가 모두 삭제된다.
'BACKEND > Servlet&JSP' 카테고리의 다른 글
[JSP/Servlet] JSP 동적 부분 (0) | 2017.05.15 |
---|---|
[JSP/Servlet] Cookie 기본 예제 (0) | 2017.05.11 |
[JSP/Servlet] Listener 및 ServletContext/ServletConfig 예제 (0) | 2017.05.10 |
[JSP/Servlet] Form 예제 (0) | 2017.05.10 |
[JSP/Servlet] Session 관리 (0) | 2017.05.10 |