English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Servlet 쿠키 처리

订单是存储在客户端订单上的文本文件,定义了多种记录信息。Java Servlet 明现支持 HTTP 订单。

认证还来至用户的请求包含三步:

  • 服务器转换到浏览器的一组 订单。例如:名称、年龄或认证号等。

  • 浏览器将该信息将存储在本地订单上,即又用。

  • 在下一次浏览器向网站服务器发送任何请求时,浏览器会将该 订单信息发送到服务器,服务器将使用该信息来认证用户。

详述一个指定或重置 订单、访问它以及删除它的方法。

数据输入服务器后请求请求将中文输入编码。

String 㮵u672c地编码的 中文编码。-8");            //encoding
String str = java.net.URLDecoder.decode("encoded string","UTF-8");   // decoded

Cookie 분석

Cookie는 일반적으로 HTTP 헤더 정보에 설정됩니다(JavaScript도 브라우저에서 직접 Cookie를 설정할 수 있습니다). Cookie를 설정하는 Servlet은 다음과 같은 헤더 정보를 전송합니다:

HTTP/1.1 200 OK
Date: Fri, 04 Feb 2000 21:03:38 GMT
Server: Apache/1.3.9 (UNIX) PHP/4.0b3
Set-Cookie: name=xyz; expires=Friday, 04-Feb-07 22:03:38 GMT; 
                 path=/; domain=oldtoolbag.com
Connection: close
Content-Type: text/html

정말로 볼 수 있듯이 Set-Cookie 헤더는 이름 값 쌍, GMT 날짜, 경로, 도메인을 포함하고 있습니다. 이름과 값은 URL 인코딩됩니다. expires 필드는 브라우저가 지정된 시간과 날짜 이후에 해당 Cookie를 "잊어버리도록" 지시하는 명령입니다.

브라우저가 Cookie를 저장된 설정이 되어 있다면, 만료일까지 정보를 유지할 것입니다. 사용자의 브라우저가 해당 Cookie와 일치하는 경로와 도메인의 페이지로 이동하면, Cookie를 서버로 다시 전송할 것입니다. 브라우저의 헤더 정보는 다음과 같을 수 있습니다:

GET / HTTP/1.0
Connection: Keep-Alive
User-Agent: Mozilla/4.6 (X11; I; Linux 2.2.6-15apmac ppc)
Host: zink.demon.co.uk:1126
Accept: image/gif, */*
Accept-Encoding: gzip
Accept-Language: en
Accept-Charset: iso-8859-1,*,utf-8
Cookie: name=xyz

Servlet은 요청 메서드를 통해 request.getCookies() Cookie에 접근하면 이 메서드는 Cookie 객체 배열

Servlet Cookie 메서드

Servlet에서 Cookie를 처리할 때 사용할 수 있는 유용한 메서드 목록은 다음과 같습니다.

순번메서드 & 설명
1public void setDomain(String pattern)
이 메서드는 쿠키가 적용되는 도메인을 설정합니다. 예를 들어, oldtoolbag.com。
2public String getDomain()
이 메서드는 쿠키가 적용되는 도메인을 가져옵니다. 예를 들어, oldtoolbag.com。
3public void setMaxAge(int expiry)
이 메서드는 쿠키가 만료되는 시간(초 단위)을 설정합니다. 이렇게 설정하지 않으면 쿠키는 현재 세션에서만 유효합니다.
4public int getMaxAge()
이 메서드는 쿠키의 최대 유효 기간(초 단위)을 반환합니다. 기본적으로,-1 쿠키가 브라우저가 닫을 때까지 지속될 것을 나타냅니다.
5public String getName()
이 메서드는 쿠키의 이름을 반환합니다. 이름은 생성 후 변경할 수 없습니다.
6public void setValue(String newValue)
이 메서드는 쿠키와 연관된 값을 설정합니다.
7public String getValue()
이 메서드는 쿠키와 연관된 값을 가져옵니다.
8public void setPath(String uri)
이 메서드는 쿠키가 적용되는 경로를 설정합니다. 경로를 지정하지 않으면 현재 페이지와 같은 디렉토리(하위 디렉토리 포함)에 있는 모든 URL이 쿠키를 반환합니다.
9public String getPath()
이 메서드는 쿠키가 적용되는 경로를 가져옵니다.
10public void setSecure(boolean flag)
이 메서드는 쿠키가 암호화된(즉, SSL) 연결에서만 전송되어야 하는지 여부를 나타내는 부울 값을 설정합니다.
11public void setComment(String purpose)
쿠키의 설명을 설정합니다. 이 설명은 브라우저가 사용자에게 쿠키를 표시할 때 매우 유용합니다.
12public String getComment()
쿠키의 설명을 가져옵니다. 쿠키에 설명이 없으면 null을 반환합니다.

Servlet를 통해 쿠키 설정

Servlet를 통해 쿠키를 설정하는 과정은 세 단계로 이루어집니다:

(1) 쿠키 객체를 생성합니다:쿠키 이름과 쿠키 값이 모두 문자열인 쿠키 생성자를 호출할 수 있습니다.

Cookie cookie = new Cookie("key","value");

이름이나 값에는 공백이나 다음과 같은 문자를 포함해서는 안 됩니다:

[ ] ( ) = , " / ? @ : ;

(2) 설정 최대 유지 기간:setMaxAge 메서드를 사용하여 cookie가 유효할 수 있는 시간을 지정할 수 있습니다(초로 표시됩니다)。다음은 최대 유효 기간을 설정합니다 24 시간의 cookie.

cookie.setMaxAge(60*60*24);

(3)를 사용하여 Cookie를 전송합니다:Cookie를 HTTP 응답 헤더에 전송할 수 있습니다 response.addCookie 을 수정하여 HTTP 응답 헤더에 Cookie를 추가하겠습니다:

response.addCookie(cookie);

온라인 예제

우리의 양식 데이터 예제,이름과 성에 대한 Cookie를 설정합니다。

package com.w3codebox.test;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLEncoder;
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 구현 클래스 HelloServlet
 */
@WebServlet("/HelloForm)
public class HelloForm extends HttpServlet {
    private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public HelloForm() {
        super();
        // TODO Auto-generated constructor stub
    }
    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    {
        // 이름과 성을 포함한 Cookie를 생성합니다      
        Cookie name = new Cookie("name",
                URLEncoder.encode(request.getParameter("name"), "UTF-8")); // 중국어 인코딩
        Cookie url = new Cookie("url",
                      request.getParameter("url"));
        
        // 두 개의 Cookie의 만료 날짜를 설정합니다 24 시간 후
        name.setMaxAge(60*60*24); 
        url.setMaxAge(60*60*24); 
        
        // 응답 헤더에 두 개의 Cookie를 추가합니다
        response.addCookie( name );
        response.addCookie( url );
        
        // 서버 응답 내용 타입 설정
        response.setContentType("text/html;charset=UTF-8");
        
        PrintWriter out = response.getWriter();
        String title = "Cookie 설정 예제";
        String docType = "<!DOCTYPE html>\n";
        out.println(docType +
                "<html>\n" +
                "<head><title>" + title + "</title></head>\n" +
                "<body bgcolor=\"#f0f0f0\">\n" +
                "<h1 align=\"center\">" + title + "</h1>\n" +
                "<ul>\n" +
                "  <li><b>사이트명:</b>:"
                + request.getParameter("name") + "\n</li>" +
                "  <li><b>사이트 URL:</b>:"
                + request.getParameter("url") + "\n</li>" +
                "</ul>\n" +
                "</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);
    }
}

위의 Servlet을 컴파일합니다 HelloForm을 추가하고 web.xml 파일에서 적절한 항목을 생성합니다:

<?xml version="1.0" encoding="UTF-8"?>
<web-app>
  <servlet> 
    <!-- 클래스 이름 -->  
    <servlet-name>HelloForm</servlet-name>
    <!-- 에 위치한 패키지 -->
    <servlet-class>com.w3codebox.test.HelloForm</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>HelloForm</servlet-name>
    <!-- 방문하는 웹사이트 -->
    <url-pattern>/TomcatTest/HelloForm</url-pattern>
  </servlet-mapping>
</web-app>

마지막으로 다음과 같은 HTML 페이지를 호출하여 Servlet을 호출합니다.

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>기본 튜토리얼 웹(w3(codebox.com)</title>
</head>
<body>
<form action="/TomcatTest/HelloForm" method="GET">
사이트 이름:<input type="text" name="name">
<br />
사이트 URL:<input type="text" name="url" /><br>
<input type="submit" value="제출" />
</form>
</body>
</html>

위의 HTML 내용을 파일에 저장합니다 /TomcatTest/test.html에 있습니다.

다음으로 http:을 방문합니다://localhost:8080/TomcatTest/test.html, 다음과 같이 보입니다:

‘제출’을 클릭한 후, 다음과 같은 효과가 나타납니다:

주의:위의 일부 경로는 실제 프로젝트 경로에 따라 수정되어야 합니다.

Servlet을 통해 Cookie를 읽기

Cookie를 읽기 위해 호출해야 합니다 HttpServletRequestgetCookies( ) 메서드를 생성합니다 javax.servlet.http.Cookie 객체 배열입니다. 그런 다음 배열을 순회하며 getName()과 getValue() 메서드를 사용하여 각 cookie와 관련된 값을 액세스합니다.

온라인 예제

위의 예제에서 설정된 Cookie를 읽습니다.

package com.w3codebox.test;
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;
/**
 * Servlet 구현 클래스 ReadCookies
 */
@WebServlet("/ReadCookies)
public class ReadCookies extends HttpServlet {
    private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public ReadCookies() {
        super();
        // TODO Auto-generated constructor stub
    }
    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    {
        Cookie cookie = null;
        Cookie[] cookies = null;
        // 해당 도메인과 관련된 Cookie 배열을 가져옵니다
        cookies = request.getCookies();
         
         // 서버 응답 내용 타입 설정
         response.setContentType("text/html;charset=UTF-8");
    
         PrintWriter out = response.getWriter();
         String title = "Delete Cookie Example";
         String docType = "<!DOCTYPE html>\n";
         out.println(docType +
                   "<html>\n" +
                   "<head><title>" + title + "</title></head>\n" +
                   "<body bgcolor="#f0f0f0">\n")
          if(cookies != null){
            out.println("<h2>Cookie 이름과 값</h2>");
            for(int i = 0; i < cookies.length; i++{
               cookie = cookies[i];
               if((cookie.getName()).compareTo("name") == 0) {
                    cookie.setMaxAge(0);
                    response.addCookie(cookie);
                    out.print("삭제된 cookie: ") + 
                                 cookie.getName( ) + "<br}}/>");
               }
               out.print("파라미터 이름:" + cookie.getName( ) + ",
               out.print("파라미터 값:" +  URLDecoder.decode(cookie.getValue(), "utf-8) +" <br/>");
            }
         }else{
             out.println(
               "<h2 class=\"tutheader\">No Cookie found</h2>");
         }
         out.println("</body>");
         out.println("</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);
    }
}

위의 Servlet을 컴파일합니다 ReadCookies를 생성하고, web.xml 파일에서 적절한 항목을 만듭니다. 실행을 시도하세요 http://localhost:8080/TomcatTest/ReadCookies다음과 같은 결과를 표시합니다:


Servlet을 통해 쿠키를 지우기

쿠키를 지우는 것은 매우 간단합니다. 쿠키를 지우려면 다음 세 단계를 따르세요:

  • 기존 쿠키를 읽고 Cookie 객체에 저장합니다.

  • 사용 setMaxAge() 쿠키의 유효기를 0으로 설정하여 기존 쿠키를 지웁니다.

  • 이 쿠키를 응답 헤더에 추가합니다.

온라인 예제

이 예제에서는 "url"라는 이름의 쿠키를 지우기 위해 다음과 같은 예제를 제공합니다. ReadCookies Servlet을 다음 번 실행할 때, url이 null로 반환됩니다.

package com.w3codebox.test;
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 DeleteCookies
 */
@WebServlet("/DeleteCookies)
public class DeleteCookies extends HttpServlet {
    private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public DeleteCookies() {
        super();
        // TODO Auto-generated constructor stub
    }
    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    {
        Cookie cookie = null;
        Cookie[] cookies = null;
        // 해당 도메인과 관련된 Cookie 배열을 가져옵니다
        cookies = request.getCookies();
        
            // 서버 응답 내용 타입 설정
        response.setContentType("text/html;charset=UTF-8");
   
        PrintWriter out = response.getWriter();
        String title = "Cookie 삭제 예제";
        String docType = "<!DOCTYPE html>\n";
        out.println(docType +
                  "<html>\n" +
                  "<head><title>" + title + "</title></head>\n" +
                  "<body bgcolor="#f0f0f0">\n")
         if(cookies != null){
           out.println("<h2>Cookie 이름과 값</h2>");
           for(int i = 0; i < cookies.length; i++{
              cookie = cookies[i];
              if((cookie.getName()).compareTo("url") == 0){
                   cookie.setMaxAge(0);
                   response.addCookie(cookie);
                   out.print("삭제된 cookie: ") + 
                                cookie.getName( ) + "<br}}/>");
              }
              out.print("파라미터 이름:" + cookie.getName( ) + ",
              out.print("파라미터 값:" + cookie.getValue( )+" <br/>");
           }
        }else{
            out.println(
              "<h2 class=\"tutheader\">No Cookie found</h2>");
        }
        out.println("</body>");
        out.println("</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);
    }
}

위의 Servlet을 컴파일합니다 DeleteCookies웹.xml 파일에서 적절한 항목을 생성합니다. 아래를 실행하세요 http://localhost:8080/TomcatTest/DeleteCookies다음과 같은 결과를 표시합니다: