[JSP/Servlet] Cookie 예제 -숫자 누적처리

● 목록



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);

}

}



● 결과




-> 누적된 숫자 보기를 여러번 클릭하면 임의의 값이 계속 추가되어 출력된다.



->  누적된 숫자 쿠키 삭제를 하면 쿠키가 모두 삭제된다.


댓글

Designed by JB FACTORY