亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

manual rujukan dalam talian jsp / JSP Cookie 處理

JSP Cookie 處理

Cookie是存儲在客戶機的文本文件,它們保存了大量軌跡信息。在servlet技術(shù)基礎(chǔ)上,JSP顯然能夠提供對HTTP cookie的支持。

通常有三個步驟來識別回頭客:

  •                 服務(wù)器腳本發(fā)送一系列cookie至瀏覽器。比如名字,年齡,ID號碼等等。

  •                 瀏覽器在本地機中存儲這些信息,以備不時之需。

  •                 當(dāng)下一次瀏覽器發(fā)送任何請求至服務(wù)器時,它會同時將這些cookie信息發(fā)送給服務(wù)器,然后服務(wù)器使用這些信息來識別用戶或者干些其它事情。

本章節(jié)將會傳授您如何去設(shè)置或重設(shè)cookie的方法,還有如何訪問它們及如何刪除它們。

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

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

        Cookie 剖析

Cookie通常在HTTP信息頭中設(shè)置(雖然JavaScript能夠直接在瀏覽器中設(shè)置cookie)。在JSP中,設(shè)置一個cookie需要發(fā)送如下的信息頭給服務(wù)器:

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

正如您所見,Set-Cookie信息頭包含一個鍵值對,一個GMT(格林尼治標準)時間,一個路徑,一個域名。鍵值對會被編碼為URL。有效期域是個指令,告訴瀏覽器在什么時候之后就可以清除這個cookie。

如果瀏覽器被配置成可存儲cookie,那么它將會保存這些信息直到過期。如果用戶訪問的任何頁面匹配了cookie中的路徑和域名,那么瀏覽器將會重新將這個cookie發(fā)回給服務(wù)器。瀏覽器端的信息頭長得就像下面這樣:

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

JSP腳本通過request對象中的getCookies()方法來訪問這些cookie,這個方法會返回一個Cookie對象的數(shù)組。


        Servlet Cookie 方法

下表列出了Cookie對象中常用的方法:

序號方法 & 描述
                    1public void setDomain(String pattern)


設(shè)置cookie的域名,比如w3cschool.cc
                    2public String getDomain()


獲取cookie的域名,比如w3cschool.cc
                    3public void setMaxAge(int expiry)


設(shè)置cookie有效期,以秒為單位,默認有效期為當(dāng)前session的存活時間
                    4public int getMaxAge()


獲取cookie有效期,以秒為單位,默認為-1 ,表明cookie會活到瀏覽器關(guān)閉為止
                    5public String getName()


返回 cookie的名稱,名稱創(chuàng)建后將不能被修改
                    6public void setValue(String newValue)


設(shè)置 cookie的值
                    7public String getValue()


獲取cookie的值
                    8public void setPath(String uri)


設(shè)置cookie 的路徑,默認為當(dāng)前頁面目錄下的所有URL,還有此目錄下的所有子目錄
                    9public String getPath()


獲取cookie 的路徑
                    10public void setSecure(boolean flag)


指明cookie是否要加密傳輸
                    11public void setComment(String purpose)


設(shè)置注釋描述 cookie的目的。當(dāng)瀏覽器將cookie展現(xiàn)給用戶時,注釋將會變得非常有用
                    12public String getComment()


返回描述cookie目的的注釋,若沒有則返回null

使用JSP設(shè)置Cookie

使用JSP設(shè)置cookie包含三個步驟:

(1)創(chuàng)建一個Cookie對象: 調(diào)用Cookie的構(gòu)造函數(shù),使用一個cookie名稱和值做參數(shù),它們都是字符串。

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

請務(wù)必牢記,名稱和值中都不能包含空格或者如下的字符:

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

(2) 設(shè)置有效期:調(diào)用setMaxAge()函數(shù)表明cookie在多長時間(以秒為單位)內(nèi)有效。下面的操作將有效期設(shè)為了24小時。

cookie.setMaxAge(60*60*24);

(3) 將cookie發(fā)送至HTTP響應(yīng)頭中:調(diào)用response.addCookie()函數(shù)來向HTTP響應(yīng)頭中添加cookie。

response.addCookie(cookie);

實例演示

main.jsp 文件代碼如下所示:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.net.*" %>
<%
   // 編碼,解決中文亂碼   
   String str = URLEncoder.encode(request.getParameter("name"),"utf-8");  
   // 設(shè)置 name 和 url cookie 
   Cookie name = new Cookie("name",
		   str);
   Cookie url = new Cookie("url",
			  request.getParameter("url"));

   // 設(shè)置cookie過期時間為24小時。
   name.setMaxAge(60*60*24); 
   url.setMaxAge(60*60*24); 

   // 在響應(yīng)頭部添加cookie
   response.addCookie( name );
   response.addCookie( url );
%>
<html>
<head>
<title>設(shè)置 Cookie</title>
</head>
<body>

<h1>設(shè)置 Cookie</h1>

<ul>
<li><p><b>網(wǎng)站名:</b>
   <%= request.getParameter("name")%>
</p></li>
<li><p><b>網(wǎng)址:</b>
   <%= request.getParameter("url")%>
</p></li>
</ul>
</body>
</html>

以下是一個簡單的 HTML 表單通過GET方法將客戶端數(shù)據(jù)提交到 main.jsp 文件中,并設(shè)置 cookie:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>php中文網(wǎng)(php.cn)</title>
</head>
<body>

<form action="main.jsp" method=GET>
站點名: <input type="text" name="name">
<br />
網(wǎng)址: <input type="text" name="url" />
<input type="submit" value="提交" />
</form>

</body>
</html>

將以上HTML代碼保存到test.htm文件中。

將該文件放置于當(dāng)前jsp項目的 WebContent 目錄下(與 main.jsp 同一個目錄)。

通過訪問 http://localhost:8080/testjsp/test.html 提交表單數(shù)據(jù)到 main.jsp 文件,演示 Gif 圖如下所示:

試著輸入 "站點名" 和 "網(wǎng)址",然后點擊提交按鈕,它將會在您的屏幕中顯示 "站點名" 和 "網(wǎng)址",并且設(shè)置 "站點名" 和 "網(wǎng)址" 的兩個 cookie。


使用 JSP 讀取 Cookie

想要讀取cookie,您就需要調(diào)用request.getCookies()方法來獲得一個javax.servlet.http.Cookie對象的數(shù)組,然后遍歷這個數(shù)組,使用getName()方法和getValue()方法來獲取每一個cookie的名稱和值。

<h3實例演示< h3="">

讓我們來讀取上個例子中的cookie, 以下為 cookie.jsp 文件代碼:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.net.*" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>獲取 Cookie</title>
</head>
<body>
<%
   Cookie cookie = null;
   Cookie[] cookies = null;
   // 獲取cookies的數(shù)據(jù),是一個數(shù)組
   cookies = request.getCookies();
   if( cookies != null ){
      out.println("<h2> 查找 Cookie 名與值</h2>");
      for (int i = 0; i < cookies.length; i++){
         cookie = cookies[i];
        
         out.print("參數(shù)名 : " + cookie.getName());
         out.print("<br>");
         out.print("參數(shù)值: " + URLDecoder.decode(cookie.getValue(), "utf-8") +" <br>");
         out.print("------------------------------------<br>");
      }
  }else{
      out.println("<h2>沒有發(fā)現(xiàn) Cookie</h2>");
  }
%>
</body>
</html>

瀏覽器訪問后,輸出結(jié)果為:

C6A7341F-029A-4244-8B38-BE010E391091.jpg


        使用JSP刪除Cookie

刪除cookie非常簡單。如果您想要刪除一個cookie,按照下面給的步驟來做就行了:

  •                 獲取一個已經(jīng)存在的cookie然后存儲在Cookie對象中。

  •                 將cookie的有效期設(shè)置為0。

  •                 將這個cookie重新添加進響應(yīng)頭中。


實例演示

下面的程序刪除一個名為"name"的cookie,當(dāng)您第二次運行cookie.jsp時,name 將會為 null。

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.net.*" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>獲取 Cookie</title>
</head>
<body>
<%
   Cookie cookie = null;
   Cookie[] cookies = null;
   // 獲取當(dāng)前域名下的cookies,是一個數(shù)組
   cookies = request.getCookies();
   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("參數(shù)名 : " + cookie.getName());
         out.print("<br>");
         out.print("參數(shù)值: " + URLDecoder.decode(cookie.getValue(), "utf-8") +" <br>");
         out.print("------------------------------------<br>");
      }
  }else{
	  out.println("<h2>沒有發(fā)現(xiàn) Cookie</h2>");
  }
%>
</body>
</html>

通過瀏覽器訪問,輸出結(jié)果為:

C6A7341F-029A-4244-8B38-BE010E391091.jpg

再次訪問 http://localhost:8080/testjsp/cookie.jsp,將會得到如下結(jié)果:

7BF1C669-F7A4-4245-B7B0-B79BBB272604.jpg

可以看到名為 width="70%" "name" 的 cookie 已經(jīng)不見了。

您也可以手動在瀏覽器中刪除 cookie。IE 瀏覽器通過點擊Tools菜單項,然后選擇Internet Options,點擊 Delete Cookies,就能刪除所有 cookie 。