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

來源:互聯網
上載者:User

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 CookieDemo13  */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 CookieTest13  */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 stub24     }25 26     /**27      * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)28      */29     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {30 31         //將CookieObject Storage Service到數組中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 HttpSessionDemo15  */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 stub26     }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 stub33         //設定編碼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 id41         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中所有的name52             String name = (String)attributeNames.nextElement();53             //找出name對應的value54             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 }

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.