大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

Servlet教程

Servlet Cookies處理

Cookies 是存儲在客戶端計算機上的文本文件,并保留了各種跟蹤信息。Java Servlet 顯然支持 HTTP Cookies。

識別返回用戶包括三個步驟:

• 服務器腳本向瀏覽器發送一組 Cookies。例如:姓名、年齡或識別號碼等。

• 瀏覽器將這些信息存儲在本地計算機上,以備將來使用。

• 當下一次瀏覽器向 Web 服務器發送任何請求時,瀏覽器會把這些 Cookies 信息發送到服務器,服務器將使用這些信息來識別用戶。

本章將向您講解如何設置或重置 Cookies,如何訪問它們,以及如何將它們刪除。

Servlet Cookie 處理需要對中文進行編碼與解碼,方法如下:

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

Cookie 剖析

Cookies 通常設置在 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=bjpowernode.com
Connection: close
Content-Type: text/html

正如您所看到的,Set-Cookie 頭包含了一個名稱值對、一個 GMT 日期、一個路徑和一個域。名稱和值會被 URL 編碼。expires 字段是一個指令,告訴瀏覽器在給定的時間和日期之后"忘記"該 Cookie。

如果瀏覽器被配置為存儲 Cookies,它將會保留此信息直到到期日期。如果用戶的瀏覽器指向任何匹配該 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 Cookies 方法

以下是在 Servlet 中操作 Cookies 時可使用的有用的方法列表。

序號

方法 & 描述

1

public void setDomain(String pattern)

該方法設置 cookie 適用的域,例如 bjpowernode.com。

2

public String getDomain()

該方法獲取 cookie 適用的域,例如 bjpowernode.com。

3

public void setMaxAge(int expiry)

該方法設置 cookie 過期的時間(以秒為單位)。如果不這樣設置,cookie 只會在當前 session 會話中持續有效。

4

public int getMaxAge()

該方法返回 cookie 的最大生存周期(以秒為單位),默認情況下,-1 表示 cookie 將持續下去,直到瀏覽器關閉。

5

public String getName()

該方法返回 cookie 的名稱。名稱在創建后不能改變。

6

public void setValue(String newValue)

該方法設置與 cookie 關聯的值。

7

public String getValue()

該方法獲取與 cookie 關聯的值。

8

public void setPath(String uri)

該方法設置 cookie 適用的路徑。如果您不指定路徑,與當前頁面相同目錄下的(包括子目錄下的)所有 URL 都會返回 cookie。

9

public String getPath()

該方法獲取 cookie 適用的路徑。

10

public void setSecure(boolean flag)

該方法設置布爾值,表示 cookie 是否應該只在加密的(即 SSL)連接上發送。

11

public void setComment(String purpose)

該方法規定了描述 cookie 目的的注釋。該注釋在瀏覽器向用戶呈現 cookie 時非常有用。

12

public String getComment()

該方法返回了描述 cookie 目的的注釋,如果 cookie 沒有注釋則返回 null。

通過 Servlet 設置 Cookies

通過 Servlet 設置 Cookies 包括三個步驟:

1. 創建一個 Cookie 對象:您可以調用帶有 cookie 名稱和 cookie 值的 Cookie 構造函數,cookie 名稱和 cookie 值都是字符串。

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

請記住,無論是名字還是值,都不應該包含空格或以下任何字符:

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

2.設置最大生存周期:您可以使用 setMaxAge 方法來指定 cookie 能夠保持有效的時間(以秒為單位)。下面將設置一個最長有效期為 24 小時的 cookie。

cookie.setMaxAge(60*60*24); 

3. 發送 Cookie 到 HTTP 響應頭:您可以使用 response.addCookie 來添加 HTTP 響應頭中的 Cookies,如下所示:

response.addCookie(cookie);

實例

讓我們修改我們的 表單數據實例,為名字和姓氏設置 Cookies。

// 導入必需的 java 庫
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
 
// 擴展 HttpServlet 類
public class HelloForm extends HttpServlet {
 
  public void doGet(HttpServletRequest request,
                    HttpServletResponse response)
            throws ServletException, IOException
  {
      // 為名字和姓氏創建 Cookies      
      Cookie firstName = new Cookie("first_name",
                      request.getParameter("first_name"));
      Cookie lastName = new Cookie("last_name",
                      request.getParameter("last_name"));

      // 為兩個 Cookies 設置過期日期為 24 小時后
      firstName.setMaxAge(60*60*24); 
      lastName.setMaxAge(60*60*24); 

      // 在響應頭中添加兩個 Cookies
      response.addCookie( firstName );
      response.addCookie( lastName );

      // 設置響應內容類型
      response.setContentType("text/html");
 
      PrintWriter out = response.getWriter();
      String title = "設置 Cookies 實例";
      String docType =
      "<!doctype html public \"-//bjpowernode//dtd html 4.0 " +       "transitional//en\">\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("first_name") + "\n" +
                "  <li><b>姓氏</b>:"
                + request.getParameter("last_name") + "\n" +
                "</ul>\n" +
                "</body></html>");
  }
}

編譯上面的 Servlet HelloForm,并在 web.xml 文件中創建適當的條目,最后嘗試下面的 HTML 頁面來調用 Servlet。

 
<html>
<body>
<form action="HelloForm" method="GET">
名字:<input type="text" name="first_name">
<br />
姓氏:<input type="text" name="last_name" />
<input type="submit" value="提交" />
</form>
</body>
</html>

保存上面的 HTML 內容到文件 hello.htm 中,并把它放在 <Tomcat-installation-directory> /webapps/ROOT 目錄中。當您訪問 http://localhost:8080/Hello.htm 時,上面表單的實際輸出如下所示:

嘗試輸入名字和姓氏,然后點擊"提交"按鈕,名字和姓氏將顯示在屏幕上,同時會設置 firstName 和 lastName 這兩個 Cookies,當下次您按下提交按鈕時,會將這兩個 Cookies 傳回到服務器。

下一節會講解如何在 Web 應用程序中訪問這些 Cookies。

通過 Servlet 讀取 Cookies

要讀取 Cookies,您需要通過調用 HttpServletRequest 的 getCookies( ) 方法創建一個 javax.servlet.http.Cookie 對象的數組。然后循環遍歷數組,并使用 getName() 和 getValue() 方法來訪問每個 cookie 和關聯的值。

實例

讓我們讀取上面的實例中設置的 Cookies

// 導入必需的 java 庫
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
 
// 擴展 HttpServlet 類
public class ReadCookies extends HttpServlet {
 
  public void doGet(HttpServletRequest request,
                    HttpServletResponse response)
            throws ServletException, IOException
  {
      Cookie cookie = null;
    Cookie[] cookies = null;
      // 獲取與該域相關的 Cookies 的數組
      cookies = request.getCookies();
      
    // 設置響應內容類型
      response.setContentType("text/html");
 
      PrintWriter out = response.getWriter();
      String title = "Reading Cookies Example";
      String docType =
      "<!doctype html public \"-//bjpowernode//dtd html 4.0 " +       "transitional//en\">\n";
      out.println(docType +
                "<html>\n" +
                "<head><title>" + title + "</title></head>\n" +
                "<body bgcolor=\"#f0f0f0\">\n" );
      if( cookies != null ){
         out.println("<h2>查找 Cookies 名稱和值</h2>");
         for (int i = 0; i < cookies.length; i++){             cookie = cookies[i];             out.print("名稱:" + cookie.getName( ) + ",");             out.print("值:" + cookie.getValue( )+" <br/>");
         }
      }else{
          out.println(
            "<h2 class="tutheader">未找到 Cookies</h2>");
      }
      out.println("</body>");
      out.println("</html>");
   }
}

編譯上面的 Servlet ReadCookies,并在 web.xml 文件中創建適當的條目。如果您已經設置了 first_name cookie 為 "John",last_name cookie 為 "Player" ,嘗試運行 http://localhost:8080/ReadCookies,將顯示如下結果:

查找 Cookies 名稱和值
名稱:first_name,值:John
名稱:last_name,值:Player

通過 Servlet 刪除 Cookies

刪除 Cookies 是非常簡單的。如果您想刪除一個 cookie,那么您只需要按照以下三個步驟進行:

• 讀取一個現有的 cookie,并把它存儲在 Cookie 對象中。

• 使用 setMaxAge() 方法設置 cookie 的年齡為零,來刪除現有的 cookie。

• 把這個 cookie 添加到響應頭。

實例

下面的例子將刪除現有的名為 "first_name" 的 cookie,當您下次運行 ReadCookies 的 Servlet 時,它會返回 first_name 為空值。

// 導入必需的 java 庫
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
 
// 擴展 HttpServlet 類
public class DeleteCookies extends HttpServlet {
 
  public void doGet(HttpServletRequest request,
                    HttpServletResponse response)
            throws ServletException, IOException
  {
      Cookie cookie = null;
    Cookie[] cookies = null;
      // 獲取與該域相關的 Cookies 的數組
      cookies = request.getCookies();
      
    // 設置響應內容類型
      response.setContentType("text/html");
 
      PrintWriter out = response.getWriter();
      String title = "Delete Cookies Example";
      String docType =
      "<!doctype html public \"-//bjpowernode//dtd html 4.0 " +       "transitional//en\">\n";
      out.println(docType +
                "<html>\n" +
                "<head><title>" + title + "</title></head>\n" +
                "<body bgcolor=\"#f0f0f0\">\n" );
       if( cookies != null ){
         out.println("<h2>Cookies 名稱和值</h2>");
         for (int i = 0; i < cookies.length; i++){             cookie = cookies[i];             if((cookie.getName( )).compareTo("first_name") == 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 cookies founds</h2>");
      }
      out.println("</body>");
      out.println("</html>");
   }
}

編譯上面的 Servlet DeleteCookies,并在 web.xml 文件中創建適當的條目。現在運行 http://localhost:8080/DeleteCookies,將顯示如下結果:

Cookies 名稱和值
已刪除的 cookie:first_name
名稱:first_name,值:John
名稱:last_name,值:Player

現在嘗試運行 http://localhost:8080/ReadCookies,它將只顯示一個 cookie,如下所示:

查找 Cookies 名稱和值
名稱:last_name,值:Player

您可以手動在 Internet Explorer 中刪除 Cookies。在"工具"菜單,選擇"Internet 選項"。如果要刪除所有的 Cookies,請按"刪除 Cookies"。

全部教程
主站蜘蛛池模板: 国产精品久久久亚洲 | 亚洲码欧美码一区二区三区 | 日本一区二区三区不卡在线视频 | 伊人情人综合 | 高清亚洲 | 精品国产999 | 一级片a级片 | 国产成人高清在线观看播放 | 欧美一区二区三区在线可观看 | 精品亚洲综合久久中文字幕 | 99国产欧美久久精品 | 欧美一级高清片欧美国产欧美 | 亚洲精品国产经典一区二区 | 二级片免费看 | 天天综合天天做 | 九九热国产精品视频 | 日日操影院| 国产高清在线视频一区二区三区 | 奇米影视奇奇米色狠狠色777 | 分分操这里只有精品 | 特级黄色| 国产一在线精品一区在线观看 | 97影院午夜午夜伦不卡 | 日日摸夜夜爽夜夜爽出水 | 亚洲狠狠97婷婷综合久久久久 | 欧美大成色www永久网站 | 全部免费特黄特色大片中国 | 99视频在线精品免费观看18 | 五月天 亚洲| 国产香蕉一区二区在线网站 | 奇米第四色视频 | 手机看片福利日韩国产 | 国产福利一区二区在线观看 | 国产a免费视频 | 中国一级特黄高清免费的大片 | 亚洲一区二区三区免费看 | 狠狠色丁香婷婷综合最新地址 | 老司机福利免费 | 国产精品视频第一区二区三区 | 在线观看免费视频a | 亚洲伊人精品综合在合线 |