程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> Java web會話簡單應用,javaweb會話

Java web會話簡單應用,javaweb會話

編輯:JAVA綜合教程

Java web會話簡單應用,javaweb會話


Java會話主要分為兩塊:Cookie和HttpSession
Cookie技術:會話數據保存在浏覽器客戶端。
Session技術:會話數據保存在服務器端。
一.下面介紹一下Cookie的應用
1. Cookie技術核心
Cookie類:用於存儲會話數據

1)構造Cookie對象
Cookie(java.lang.String name, java.lang.String value)
2)設置cookie
void setPath(java.lang.String uri) :設置cookie的有效訪問路徑
void setMaxAge(int expiry) : 設置cookie的有效時間
void setValue(java.lang.String newValue) :設置cookie的值
3)發送cookie到浏覽器端保存
void response.addCookie(Cookie cookie) : 發送cookie
4)服務器接收cookie
Cookie[] request.getCookies() : 接收cookie

2. Cookie原理
1)服務器創建cookie對象,把會話數據存儲到cookie對象中。
new Cookie("name","value");
2)服務器發送cookie信息到浏覽器
response.addCookie(cookie);

舉例: set-cookie: name=eric (隱藏發送了一個set-cookie名稱的響應頭)
3)浏覽器得到服務器發送的cookie,然後保存在浏覽器端。
4)浏覽器在下次訪問服務器時,會帶著cookie信息
舉例: cookie: name=eric (隱藏帶著一個叫cookie名稱的請求頭)
5)服務器接收到浏覽器帶來的cookie信息
request.getCookies();

3 Cookie的細節
1)void setPath(java.lang.String uri) :設置cookie的有效訪問路徑。有效路徑指的是cookie的有效路徑保存在哪裡,那麼浏覽器在有效路徑下訪問服務器時就會帶著cookie信息,否則不帶cookie信息。

2)void setMaxAge(int expiry) : 設置cookie的有效時間。
正整數:表示cookie數據保存浏覽器的緩存目錄(硬盤中),數值表示保存的時間。
負整數:表示cookie數據保存浏覽器的內存中。浏覽器關閉cookie就丟失了!!
零:表示刪除同名的cookie數據
3)Cookie數據類型只能保存非中文字符串類型的。可以保存多個cookie,但是浏覽器一般只允許存放300個Cookie,每個站點最多存放20個Cookie,每個Cookie的大小限制為4KB。
4.下面是Cookie應用的代碼

1)設置Cookie

 1 package com.vastsum;
 2 
 3 import java.io.IOException;
 4 import javax.servlet.ServletException;
 5 import javax.servlet.annotation.WebServlet;
 6 import javax.servlet.http.Cookie;
 7 import javax.servlet.http.HttpServlet;
 8 import javax.servlet.http.HttpServletRequest;
 9 import javax.servlet.http.HttpServletResponse;
10 
11 /**
12  * Servlet implementation class CookieDemo
13  */
14 @WebServlet("/CookieDemo")
15 public class CookieDemo extends HttpServlet {
16 
17     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
18         //創建Cookie對象
19         Cookie cookie = new Cookie("name","shutu008");
20         /**
21          * 如果沒有設置路徑,表示當前項目根目錄下
22          * 如果設置路徑保存在指定目錄下
23          */
24         //設置保存在 /test目錄下,設置Cookie對象的路徑,如果設置表示此Cookie不在根目錄下。
25         cookie.setPath("/test");
26         //設置cookie時間,默認時間粒度為秒
27         cookie.setMaxAge(1000);
28         //將Cookie對象發送到浏覽器
29         response.addCookie(cookie);
30         
31     }
32 
33 
34 }

2)獲取cookie

 1 package com.vastsum;
 2 
 3 import java.io.IOException;
 4 import javax.servlet.ServletException;
 5 import javax.servlet.annotation.WebServlet;
 6 import javax.servlet.http.Cookie;
 7 import javax.servlet.http.HttpServlet;
 8 import javax.servlet.http.HttpServletRequest;
 9 import javax.servlet.http.HttpServletResponse;
10 
11 /**
12  * Servlet implementation class CookieTest
13  */
14 @WebServlet("/CookieTest")
15 public class CookieTest extends HttpServlet {
16     private static final long serialVersionUID = 1L;
17        
18     /**
19      * @see HttpServlet#HttpServlet()
20      */
21     public CookieTest() {
22         super();
23         // TODO Auto-generated constructor stub
24     }
25 
26     /**
27      * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
28      */
29     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
30 
31         //將Cookie對象存儲到數組中
32         Cookie[] cookies = request.getCookies();
33         if (cookies!=null){
34             //遍歷所有Cookie對象
35             for(Cookie c:cookies){
36                 //獲取Cookie對象的名稱
37                 String name = c.getName();
38                 //獲取Cookie對象的值
39                 String value = c.getValue();
40                 //將結果輸出到頁面上
41                 response.getWriter().write(name+ "=" + value);
42             }
43         }
44     }
45 
46 }

二.接下來介紹一下session的應用
1.HttpSession類:用於保存會話數據
1)創建或得到session對象
HttpSession getSession()
HttpSession getSession(boolean create)
2)設置session對象
void setMaxInactiveInterval(int interval) : 設置session的有效時間
void invalidate() : 銷毀session對象
java.lang.String getId() : 得到session編號
3)保存會話數據到session對象
void setAttribute(java.lang.String name, java.lang.Object value) : 保存數據
java.lang.Object getAttribute(java.lang.String name) : 獲取數據
void removeAttribute(java.lang.String name) : 清除數據
2.Session原理
問題: 服務器能夠識別不同的浏覽者!!!

前提: 在哪個session域對象保存數據,就必須從哪個域對象取出!!!!
浏覽器1:(給s1分配一個唯一的標記:s001,把s001發送給浏覽器)
1)創建session對象,保存會話數據
HttpSession session = request.getSession(); --保存會話數據 s1
浏覽器1 的新窗口(帶著s001的標記到服務器查詢,s001->s1,返回s1)
1)得到session對象的會話數據
HttpSession session = request.getSession(); --可以取出 s1

新的浏覽器1:(沒有帶s001,不能返回s1)
1)得到session對象的會話數據
HttpSession session = request.getSession(); --不可以取出 s2

浏覽器2:(沒有帶s001,不能返回s1)
1)得到session對象的會話數據
HttpSession session = request.getSession(); --不可以取出 s3
3. Sesson細節
1)java.lang.String getId() : 得到session編號
2)兩個getSession方法:
getSession(true) / getSession() : 創建或得到session對象。沒有匹配的session編號,自動創 建新的session對象。
getSession(false): 得到session對象。沒有匹配的session編號,返回null
3)void setMaxInactiveInterval(int interval) : 設置session的有效時間
session對象銷毀時間:
3.1 默認情況30分服務器自動回收
3.2 修改session回收時間
3.3 全局修改session有效時間

<!-- 修改session全局有效時間:分鐘 -->
<session-config>
<session-timeout>1</session-timeout>
</session-config>

手動銷毀session對象
void invalidate() : 銷毀session對象
4)如何避免浏覽器的JSESSIONID的cookie隨著浏覽器關閉而丟失的問題

/**
* 手動發送一個硬盤保存的cookie給浏覽器
*/
Cookie c = new Cookie("JSESSIONID",session.getId());
c.setMaxAge(60*60);
response.addCookie(c);

4.下面是HttpSession應用的代碼

 1 package com.vastsum;
 2 
 3 import java.io.IOException;
 4 import java.util.Enumeration;
 5 
 6 import javax.servlet.ServletException;
 7 import javax.servlet.annotation.WebServlet;
 8 import javax.servlet.http.HttpServlet;
 9 import javax.servlet.http.HttpServletRequest;
10 import javax.servlet.http.HttpServletResponse;
11 import javax.servlet.http.HttpSession;
12 
13 /**
14  * Servlet implementation class HttpSessionDemo
15  */
16 @WebServlet("/HttpSessionDemo")
17 public class HttpSessionDemo extends HttpServlet {
18     private static final long serialVersionUID = 1L;
19        
20     /**
21      * @see HttpServlet#HttpServlet()
22      */
23     public HttpSessionDemo() {
24         super();
25         // TODO Auto-generated constructor stub
26     }
27 
28     /**
29      * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
30      */
31     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
32         // TODO Auto-generated method stub
33         //設置編碼
34          response.setContentType("text/html;charset=UTF-8");
35          //創建HttpSession對象
36         HttpSession httpSession = request.getSession();
37         //設置HttpSession的值和內容
38         httpSession.setAttribute("name", "srv");
39         httpSession.setAttribute("phone", "051112345678");
40         //獲取唯一的session id
41         String sessionId = httpSession.getId();
42         //獲取指定名稱的值
43         //String value = (String)httpSession.getAttribute("name");
44         
45         /**
46          * 獲取HttpSession中所有的值。返回值是枚舉類型
47          */
48         Enumeration<String> attributeNames = httpSession.getAttributeNames();
49         
50         while(attributeNames.hasMoreElements()){
51             //遍歷出session中所有的name
52             String name = (String)attributeNames.nextElement();
53             //找出name對應的value
54             String value = (String)httpSession.getAttribute(name);
55             //輸出到浏覽器
56             response.getWriter().write(name+ "=" + value);
57         }
58         if(httpSession.isNew()){
59             response.getWriter().write("session不存在,最新sessionId是:" + sessionId);
60         }
61         else{
62             response.getWriter().write("session已經存在,設置的sessionId是:" + sessionId );
63         }
64         //設置對象銷毀時間,時間粒度為分鐘
65         httpSession.setMaxInactiveInterval(1);
66     }
67     
68 }

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved