Latest web development tutorials

Servlet Cookie Processing

Cookie to plik tekstowy przechowywany na komputerze klienckim i przechowuje szereg informacji śledzenia. Java Servlet wyraźnie obsługę ciasteczek HTTP.

Zwraca identyfikator użytkownika składa się z trzech etapów:

  • Skrypt serwer wysyła plik cookie w przeglądarce. Na przykład: imię i nazwisko, wiek lub numer identyfikacyjny.
  • Przeglądarka będzie przechowywać te informacje na komputerze lokalnym w celu późniejszego wykorzystania.
  • Następnym razem, gdy przeglądarka wysyła żądanie do dowolnego serwera WWW, przeglądarka wysyła informacje Cookie do serwera, serwer będzie wykorzystywać te informacje do identyfikacji użytkowników.

W tym rozdziale opisano sposób ustawić lub zresetować Cookie, jak z nich korzystać i jak je usunąć.

Servlet Cookie przetwarzanie potrzeb chińskiego kodowania i dekodowania, co następuje:

String   str   =   java.net.URLEncoder.encode("中文");            //编码
String   str   =   java.net.URLDecoder.decode("编码后的字符串");   // 解码

Analiza Cookie

Cookie jest zwykle ustawiony w nagłówku HTTP informacji (choć JavaScript można również ustawić bezpośrednio w przeglądarce cookie). Ustawianie Servlet Cookie wyśle ​​następujący nagłówek:

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=w3cschool.cc
Connection: close
Content-Type: text/html

Jak widać, nagłówek Set-Cookie zawiera parę nazwa wartość, datę GMT, ścieżkę i domeny. Jego nazwa i wartość zostanie zakodowany w adresie URL. wygasa pole jest instrukcja, która informuje przeglądarkę, po danej dacie i czasie, aby "zapomnieć" ciasteczka.

Jeśli Twoja przeglądarka jest skonfigurowana do przechowywania plików cookie, będzie utrzymać tę informację do daty ważności. Jeżeli przeglądarka użytkownika pasują do każdej domeny Cookie i ścieżkę strony, zostanie on ponownie wysłać Cookie na serwerze. nagłówek przeglądarka może wyglądać następująco:

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

Aplet może przejść przez Cookierequest.getCookiesmetoda żądania(),która zwraca tablicę obiektówCookie.

Metody Servlet Cookie

Poniżej znajduje się lista przydatnych metod podczas pracy w Servlet Cookie mogą być użyte.

序号方法 & 描述
1public void setDomain(String pattern)
该方法设置 cookie 适用的域,例如 w3cschool.cc。
2public String getDomain()
该方法获取 cookie 适用的域,例如 w3cschool.cc。
3public void setMaxAge(int expiry)
该方法设置 cookie 过期的时间(以秒为单位)。如果不这样设置,cookie 只会在当前 session 会话中持续有效。
4public int getMaxAge()
该方法返回 cookie 的最大生存周期(以秒为单位),默认情况下,-1 表示 cookie 将持续下去,直到浏览器关闭。
5public String getName()
该方法返回 cookie 的名称。名称在创建后不能改变。
6public void setValue(String newValue)
该方法设置与 cookie 关联的值。
7public String getValue()
该方法获取与 cookie 关联的值。
8public void setPath(String uri)
该方法设置 cookie 适用的路径。如果您不指定路径,与当前页面相同目录下的(包括子目录下的)所有 URL 都会返回 cookie。
9public String getPath()
该方法获取 cookie 适用的路径。
10public void setSecure(boolean flag)
该方法设置布尔值,表示 cookie 是否应该只在加密的(即 SSL)连接上发送。
11public void setComment(String purpose)
设置cookie的注释。该注释在浏览器向用户呈现 cookie 时非常有用。
12public String getComment()
获取 cookie 的注释,如果 cookie 没有注释则返回 null。

Ustawienia cookies poprzez Servlet

Ustawiając Servlet Cookie obejmuje trzy etapy:

(1) Tworzenie obiektu Cookie: Można wywołać konstruktor cookie z nazwy ciasteczka i wartość cookie, nazwa ciasteczka i ciasteczka wartości są ciągami.

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

Pamiętaj, że niezależnie od nazwy i wartości, nie powinny zawierać żadnych spacji ani następujących znaków:

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

(2) ustawić maksymalną żywotność: Można użyć metody określić cookies setMaxAge stanie utrzymać prawidłowy czas (w sekundach).Będziemy ustawić maksymalną ważność przez 24 godziny na cookie.

cookie.setMaxAge(60*60*24); 

(3), aby wysłać nagłówki HTTP odpowiedzi Cookie: Można użyć response.addCookiedodanie nagłówka odpowiedzi HTTP Cookie, co następuje:

response.addCookie(cookie);

Przykłady

Zmieńmy nasze instancje formularzu danych , ustaw cookie imion i nazwisk.

package com.w3big.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 implementation class 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);
	}

}

Skompilować poprzedniServlet HelloForm i utworzyć odpowiedni wpis w pliku web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app>
  <servlet> 
    <!-- 类名 -->  
    <servlet-name>HelloForm</servlet-name>
    <!-- 所在的包 -->
    <servlet-class>com.w3big.test.HelloForm</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>HelloForm</servlet-name>
    <!-- 访问的网址 -->
    <url-pattern>/TomcatTest/HelloForm</url-pattern>
  </servlet-mapping>
</web-app>
Ostatnia próba wywołać następującą stronę HTML serwletu.

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>本教程(w3big.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>

Zapisz plik zawartości powyżej /TomcatTest/test.html HTML.

Następnie na stronie http: // localhost: 8080 / TomcatTest / test.html, GIF demo, co następuje:

Uwaga: Niektóre z powyższej ścieżki wymaga bardziej rzeczywista ścieżka modyfikować swój projekt.

Zapoznaj się Servlet Cookie

Aby przeczytać Cookie, trzeba utworzyć obiektjavax.servlet.http.Cookiepoprzez wywołaniegetCookiesHttpServletRequest()tablica metodą. Następnie pętli tablicy i używa getName () oraz metodę getValue (), aby uzyskać dostęp do wartości każdego ciasteczka i powiązanych.

Przykłady

Cookie Przeczytajmy powyższym przykładzie zestawu

package com.w3big.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 implementation class 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 founds</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);
	}

}

Skompilować powyższy ReadCookiesServlet i utworzyć odpowiedni wpis w pliku web.xml.Spróbuj uruchomićhttp: // localhost: 8080 / TomcatTest/ HelloForm, pokaże następujące wyniki:


Usuń Cookie przez Servlet

Usuń Cookie jest bardzo prosta. Jeśli chcesz usunąć plik cookie, wystarczy wykonać następujące trzy etapy:

  • Odczytuje istniejące cookie i przechowywać go w obiekcie Cookie.
  • Użyj metodysetMaxAge (), aby ustawić wiek ciasteczko Zero usunąć istniejący plik cookie.
  • Dodaj plik cookie do nagłówków odpowiedzi.

Przykłady

Poniższy przykład usunąć istniejący plik cookie o nazwie "url", przy następnym uruchomieniu ReadCookies Servlet, powróci url jest null.

package com.w3big.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 founds</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);
	}

}

Skompilować powyższy DeleteCookiesServlet i utworzyć odpowiedni wpis w pliku web.xml.Teraz uruchomhttp: // localhost: 8080 / TomcatTest/ DeleteCookies, pokaże następujące wyniki: