Latest web development tutorials

Servlets Cookie-Verarbeitung

Cookie ist eine Textdatei auf dem Client-Computer gespeichert sind, und enthält eine Vielzahl von Informationen zu verfolgen. Java Servlet deutlich HTTP Cookies unterstützen.

Gibt die Benutzeridentifikation erfolgt in drei Schritten:

  • Server-Skript sendet ein Cookie an den Browser. Zum Beispiel: Name, Alter oder Identifikationsnummer.
  • Der Browser wird diese Informationen auf dem lokalen Computer für die zukünftige Verwendung.
  • Das nächste Mal, wenn der Browser eine Anfrage an einen beliebigen Web-Server sendet, wird der Browser die Cookie-Informationen an den Server senden, wird der Server diese Informationen benutzen, um Benutzer zu identifizieren.

In diesem Kapitel erfahren Sie, wie Sie festlegen oder löschen Cookie, wie diese zugänglich sind, und wie sie zu entfernen.

Servlet-Plätzchen Bedürfnisse der chinesischen kodieren und Decodierverarbeitung, wie folgt:

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

Cookie-Analyse

Cookie ist in der Regel in den HTTP-Header-Informationen festgelegt (obwohl JavaScript kann auch direkt in einem Browser-Cookie gesetzt werden). Einstellen des Servlets Cookie wird die folgende Header senden:

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

Wie Sie sehen können, Set-Cookie-Header enthält einen Namen Wert-Paar, ein GMT-Datum, einen Pfad und eine Domäne. Der Name und Wert wird URL-kodiert. Feld abläuft ist eine Anweisung, die den Browser nach einem bestimmten Datum und Zeit zu "vergessen", um die Plätzchen erzählt.

Wenn Ihr Browser Cookies zu speichern, ist so konfiguriert, wird es diese Informationen bis zum Ablaufdatum behalten. Wenn der Browser des Benutzers eine der Cookie-Domain und den Pfad der Seite zu entsprechen, wird das Cookie an den Server erneut zu senden. Browser-Header-Informationen können wie folgt aussehen:

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

Servlets kann durch Cookie - Request - Verfahrenrequest.getCookies () zugreifen,die eine Reihe vonCookie- Objekten zurückgibt.

Servlets Cookie-Methoden

Nachfolgend finden Sie eine Liste von nützlichen Methoden, wenn sie in einem Servlet-Plätzchen-Betrieb eingesetzt werden können.

序号方法 & 描述
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。

Cookie-Einstellungen durch Servlets

Durch die Einstellung Servlets Cookies umfasst drei Schritte:

(1) Erstellen Sie ein Cookie-Objekt:Sie können die Cookie - Konstruktor aufrufen mit einem Cookie - Namen und Cookie - Wert, Cookie - Namen und Cookie - Werte Strings sind.

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

Denken Sie daran, unabhängig vom Namen oder Wert, keine Leerzeichen oder die folgenden Zeichen enthalten:

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

(2) die maximale Lebensdauer: Sie können die Methode verwenden können , um Cookie setMaxAge der Lage zu halten eine gültige Zeit (in Sekunden) angeben.Wir werden eine Gültigkeit von maximal 24 Stunden pro Cookie gesetzt.

cookie.setMaxAge(60*60*24); 

(3) Cookie - HTTP-Antwort-Header zu senden:Sie könnenresponse.addCookieverwenden HTTP - Response - Header Cookie hinzufügen, wie folgt:

response.addCookie(cookie);

Beispiele

Lassen Sie uns unsere ändern Form Dateninstanzen , stellen Sie die Cookies von Vor- und Nachnamen.

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

}

Kompilieren Sie den vorherigenServlet HelloForm, und erstellen Sie den entsprechenden Eintrag in der Datei 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>
Der letzte Versuch, die folgende HTML-Seite Servlet aufzurufen.

<!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>

Speichern Sie die Datei auf HTML-Inhalte über /TomcatTest/test.html in.

Als nächstes besuchen wir http: // localhost: 8080 / TomcatTest / test.html, Demo Gif wie folgt:

Hinweis: Einige der oben genannten Pfad erfordert mehr tatsächlichen Pfad Ihres Projekts ändern.

Lesen Sie durch Servlets Plätzchen

Zum Lesen Cookie, müssen Sie durch Aufrufender HttpServletRequestgetCookies () -Methode Array einjavax.servlet.http.CookieObjekt zu erstellen. Dann Schleife durch das Array und verwendet getName () und getValue () -Methode den Wert jedes Cookie für den Zugriff auf und die damit verbundenen.

Beispiele

Cookie-Lassen Sie uns das obige Beispiel Satz gelesen

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

}

Füllen Sie bitte die vorherigeServlets ReadCookies, und erstellen Sie den entsprechenden Eintrag in der Datei web.xml.Versuchen Sie , laufenhttp: // localhost: 8080 / TomcatTest/ HelloForm, werden die folgenden Ergebnisse zeigen:


Entfernen Sie Cookies von Servlets

Entfernen Sie Cookies ist sehr einfach. Wenn Sie ein Cookie löschen möchten, müssen Sie nur die folgenden drei Schritte folgen:

  • Liest ein vorhandenes Cookie, und speichern Sie es in einem Cookie-Objekt.
  • Verwenden SiesetMaxAge () -Methode das Cookie des Alters Null zu setzen , ein vorhandenes Cookie zu löschen.
  • Fügen Sie den Cookie auf die Response-Header.

Beispiele

Im folgenden Beispiel wird die vorhandene Cookie mit dem Namen "url", das nächste Mal, wenn Sie die Servlet ReadCookies löschen ausführen, wird es zurückgeben url null ist.

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

}

Füllen Sie bitte die vorherigeServlets DeleteCookies, und erstellen Sie den entsprechenden Eintrag in der Datei web.xml.Jetzt laufenhttp: // localhost: 8080 / TomcatTest/ DeleteCookies, werden die folgenden Ergebnisse zeigen: