日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【Servlet】Session的特点和使用

發(fā)布時(shí)間:2024/2/28 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Servlet】Session的特点和使用 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Session

Session用來存儲(chǔ)用戶的不同請求的共享數(shù)據(jù)。作用范圍:一次會(huì)話

Request 對象解決了一次請求內(nèi)的不同Servlet 的數(shù)據(jù)共享問題,那么一個(gè)用戶的不同請求的處理需要使用相同的數(shù)據(jù)怎么辦呢?
使用session 技術(shù)。

session 原理:
用戶使用瀏覽器第一次向服務(wù)器發(fā)送請求,服務(wù)器在接受到請求后,調(diào)用對應(yīng)的Servlet 進(jìn)行處理。在處理過程中會(huì)給用戶創(chuàng)建一個(gè)session 對象,用來存儲(chǔ)用戶請求處理相關(guān)的公共數(shù)據(jù),并將此session 對象的JSESSIONID 以Cookie 的形式存儲(chǔ)在瀏覽器中(臨時(shí)存儲(chǔ),瀏覽器關(guān)閉即失效)。
用戶在發(fā)起第二次請求及后續(xù)請求時(shí),請求信息中會(huì)附帶JSESSIONID,服務(wù)器在接收到請求后,調(diào)用對應(yīng)的Servlet 進(jìn)行請求處理,同時(shí)根據(jù)JSESSIONID 返回其對應(yīng)的session 對象。

特點(diǎn):
Session 技術(shù)是依賴Cookie 技術(shù)的服務(wù)器端的數(shù)據(jù)存儲(chǔ)技術(shù)。
由服務(wù)器進(jìn)行創(chuàng)建
每個(gè)用戶獨(dú)立擁有一個(gè)session
默認(rèn)存儲(chǔ)時(shí)間為30分鐘(在30分鐘內(nèi),session對象沒有被使用,則自動(dòng)銷毀)

HttpSession hs = req.getSession(); //如果有則返回,沒有則創(chuàng)建新的session(單例模式?) hs.setMaxInactiveInterval(int seconds); // 在指定的時(shí)間內(nèi),如果發(fā)起了新的請求,重新計(jì)時(shí)

設(shè)置session強(qiáng)制失效

hs.invalidate();

作用:
解決了一個(gè)用戶的不同請求的數(shù)據(jù)共享問題。

使用:
創(chuàng)建Session 對象
存儲(chǔ)數(shù)據(jù)到session 對象
獲取session 對象
獲取數(shù)據(jù)從session 對象
如果獲取session 中不存在的數(shù)據(jù)返回null。

注意:
只要不關(guān)閉瀏覽器,并且session 不失效的情況下,同一個(gè)用戶的任意請求在項(xiàng)目的任意Servlet 中獲取到的都是同一個(gè)session對象。

作用域:
一次會(huì)話(瀏覽器關(guān)閉就失效)

案例:

登錄練習(xí)使用,詳見源碼

SessionServlet.java

package com.bjsxt.servlet;import java.io.IOException;import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; /*** session技術(shù)學(xué)習(xí):* 問題:* 一個(gè)用戶的不同請求處理的數(shù)據(jù)共享怎么辦?* 解決:* 使用session技術(shù)* 原理:* 用戶第一次訪問服務(wù)器,服務(wù)器會(huì)創(chuàng)建一個(gè)session對象給此用戶,并將* 該session對象的JSESSIONID使用Cookie技術(shù)存儲(chǔ)到瀏覽器中,保證* 用戶的其他請求能夠獲取到同一個(gè)session對象,也保證了不同請求能夠獲取到* 共享的數(shù)據(jù)。* 特點(diǎn):* 存儲(chǔ)在服務(wù)器端* 服務(wù)器進(jìn)行創(chuàng)建* 依賴Cookie技術(shù)* 一次會(huì)話* 默認(rèn)存儲(chǔ)時(shí)間是30分鐘* 作用:* 解決了一個(gè)用戶不同請求處理的數(shù)據(jù)共享問題* 使用:* 創(chuàng)建session對象/獲取session對象HttpSession hs=req.getSession();如果請求中擁有session的標(biāo)識(shí)符也就是JSESSIONID,則返回其對應(yīng)的session隊(duì)形如果請求中沒有session的標(biāo)識(shí)符也就是JSESSIONID,則創(chuàng)建新的session對象,并將其JSESSIONID作為從cookie數(shù)據(jù)存儲(chǔ)到瀏覽器內(nèi)存中* 如果session對象是失效了,也會(huì)重新創(chuàng)建一個(gè)session對象,并將其JSESSIONID存儲(chǔ)在瀏覽器內(nèi)存中。* 設(shè)置session存儲(chǔ)時(shí)間* hs.setMaxInactiveInterval(int seconds);* 注意:* 在指定的時(shí)間內(nèi)session對象沒有被使用則銷毀,如果使用了則重新計(jì)時(shí)。* 設(shè)置session強(qiáng)制失效* hs.invalidate();* 存儲(chǔ)和獲取數(shù)據(jù)* 存儲(chǔ):hs.setAttribute(String name,Object value);* 獲取:hs.getAttribute(String name) 返回的數(shù)據(jù)類型為Object* 注意:* 存儲(chǔ)的動(dòng)作和取出的動(dòng)作發(fā)生在不同的請求中,但是存儲(chǔ)要先于取出執(zhí)行。* 使用時(shí)機(jī):* 一般用戶在登陸web項(xiàng)目時(shí)會(huì)將用戶的個(gè)人信息存儲(chǔ)到Sesion中,供該用戶的其他請求使用。* 總結(jié):* session解決了一個(gè)用戶的不同請求的數(shù)據(jù)共享問題,只要在JSESSIONID不失效和session對象不失效的情況下。* 用戶的任意請求在處理時(shí)都能獲取到同一個(gè)session對象。* 作用域:* 一次會(huì)話* 在JSESSIONID和SESSION對象不失效的情況下為整個(gè)項(xiàng)目內(nèi)。* session失效處理:* 將用戶請求中的JSESSIONID和后臺(tái)獲取到的SESSION對象的JSESSIONID進(jìn)行比對,如果一致* 則session沒有失效,如果不一致則證明session失效了。重定向到登錄頁面,讓用戶重新登錄。* 注意:* JSESSIONID存儲(chǔ)在了Cookie的臨時(shí)存儲(chǔ)空間中,瀏覽器關(guān)閉即失效。* * @author MyPC**/ public class SessionServlet extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {//設(shè)置請求編碼格式req.setCharacterEncoding("utf-8");//設(shè)置響應(yīng)編碼格式resp.setContentType("text/html;charset=utf-8");//獲取請求信息String name="張三";//處理請求信息//創(chuàng)建session對象HttpSession hs=req.getSession();//設(shè)置session的存儲(chǔ)時(shí)間//hs.setMaxInactiveInterval(5);System.out.println(hs.getId());//設(shè)置session強(qiáng)制失效//hs.invalidate();//存儲(chǔ)數(shù)據(jù)hs.setAttribute("name",name);//響應(yīng)處理結(jié)果//直接響應(yīng)resp.getWriter().write("session學(xué)習(xí)");//請求轉(zhuǎn)發(fā)//重定向} }

top.jsp

<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@ page import="cn.hanquan.orm.po.*" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>無標(biāo)題文檔</title> <link href="/09-Manager/css/style.css" rel="stylesheet" type="text/css" /> <script language="JavaScript" src="/09-Manager/js/jquery.js"></script> <script type="text/javascript">$(function() {//退出功能$("#out").click(function() {var flag = window.confirm("你真的要退出嗎?");if (flag) {window.top.location.href = "/09-Manager/UserServlet?oper=out";}})}) </script></head><body style="background:url(/09-Manager/images/topbg.gif) repeat-x;"><div class="topleft"><a href="/09-Manager/main/main.jsp" target="_parent"><img src="/09-Manager/images/logo.png" title="系統(tǒng)首頁" /></a></div><div class="topright"><!-- 退出 --> <ul><li><a href="javascript:void(0)" id="out">退出</a></li></ul><!-- 用戶名 --><div class="user"><span><%=((User)session.getAttribute("user")).getUname()%></span></div> </div></body> </html>

總結(jié)

以上是生活随笔為你收集整理的【Servlet】Session的特点和使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。