摘要:會(huì)話技術(shù)是幫助服務(wù)器記住客戶端狀態(tài)區(qū)分客戶端會(huì)話技術(shù)從打開一個(gè)瀏覽器訪問某個(gè)站點(diǎn),到關(guān)閉這個(gè)瀏覽器的整個(gè)過程,成為一次會(huì)話。會(huì)話技術(shù)就是記錄這次會(huì)話中客戶端的狀態(tài)與數(shù)據(jù)的。
一、會(huì)話技術(shù)簡介
1.存儲(chǔ)客戶端的狀態(tài)
由一個(gè)問題引出今天的內(nèi)容,例如網(wǎng)站的購物系統(tǒng),用戶將購買的商品信息存儲(chǔ)到哪 里?因?yàn)镠ttp協(xié)議是無狀態(tài)的,也就是說每個(gè)客戶訪問服務(wù)器端資源時(shí),服務(wù)器并 不知道該客戶端是誰,所以需要會(huì)話技術(shù)識(shí)別客戶端的狀態(tài)。會(huì)話技術(shù)是幫助服務(wù)器 記住客戶端狀態(tài)(區(qū)分客戶端)
2.會(huì)話技術(shù)
從打開一個(gè)瀏覽器訪問某個(gè)站點(diǎn),到關(guān)閉這個(gè)瀏覽器的整個(gè)過程,成為一次會(huì)話。會(huì) 話技術(shù)就是記錄這次會(huì)話中客戶端的狀態(tài)與數(shù)據(jù)的。
會(huì)話技術(shù)分為Cookie和Session:
Cookie:數(shù)據(jù)存儲(chǔ)在客戶端本地,減少服務(wù)器端的存儲(chǔ)的壓力,安全性不好,客戶端 可以清除cookie
Session:將數(shù)據(jù)存儲(chǔ)到服務(wù)器端,安全性相對(duì)好,增加服務(wù)器的壓力
二、Cookie技術(shù)
Cookie技術(shù)是將用戶的數(shù)據(jù)存儲(chǔ)到客戶端的技術(shù),我們分為兩方面學(xué)習(xí):
第一,服務(wù)器端怎樣將一個(gè)Cookie發(fā)送到客戶端
第二,服務(wù)器端怎樣接受客戶端攜帶的Cookie
1.服務(wù)器端向客戶端發(fā)送一個(gè)Cookie
1)創(chuàng)建Cookie:
Cookie cookie = new Cookie(String cookieName,String cookieValue);
示例:
Cookie cookie = new Cookie("username","zhangsan");
那么該cookie會(huì)以響應(yīng)頭的形式發(fā)送給客戶端:
注意:Cookie中不能存儲(chǔ)中文
2)設(shè)置Cookie在客戶端的持久化時(shí)間:
cookie.setMaxAge(int seconds); ---時(shí)間秒
注意:如果不設(shè)置持久化時(shí)間,cookie會(huì)存儲(chǔ)在瀏覽器的內(nèi)存中,瀏覽器關(guān)閉 cookie信息銷毀(會(huì)話級(jí)別的cookie),如果設(shè)置持久化時(shí)間,cookie信息會(huì) 被持久化到瀏覽器的磁盤文件里
示例:
cookie.setMaxAge(10*60);
設(shè)置cookie信息在瀏覽器的磁盤文件中存儲(chǔ)的時(shí)間是10分鐘,過期瀏覽器 自動(dòng)刪除該cookie信息
3)設(shè)置Cookie的攜帶路徑:
cookie.setPath(String path);
注意:如果不設(shè)置攜帶路徑,那么該cookie信息會(huì)在訪問產(chǎn)生該cookie的 web資源所在的路徑都攜帶cookie信息
示例:
cookie.setPath("/WEB16");
代表訪問WEB16應(yīng)用中的任何資源都攜帶cookie
cookie.setPath("/WEB16/cookieServlet");
代表訪問WEB16中的cookieServlet時(shí)才攜帶cookie信息
4)向客戶端發(fā)送cookie:
response.addCookie(Cookie cookie);
5)刪除客戶端的cookie:
如果想刪除客戶端的已經(jīng)存儲(chǔ)的cookie信息,那么就使用同名同路徑的持久化時(shí) 間為0的cookie進(jìn)行覆蓋即可
2.服務(wù)器端怎么接受客戶端攜帶的Cookie
cookie信息是以請(qǐng)求頭的方式發(fā)送到服務(wù)器端的:
1)通過request獲得所有的Cookie:
Cookie[] cookies = request.getCookies();
2)遍歷Cookie數(shù)組,通過Cookie的名稱獲得我們想要的Cookie
for(Cookie cookie : cookies){
if(cookie.getName().equal(cookieName)){
String cookieValue = cookie.getValue();
}
}
三、Session技術(shù)
Session技術(shù)是將數(shù)據(jù)存儲(chǔ)在服務(wù)器端的技術(shù),會(huì)為每個(gè)客戶端都創(chuàng)建一塊內(nèi)存空間 存儲(chǔ)客戶的數(shù)據(jù),但客戶端需要每次都攜帶一個(gè)標(biāo)識(shí)ID去服務(wù)器中尋找屬于自己的內(nèi) 存空間。所以說Session的實(shí)現(xiàn)是基于Cookie,Session需要借助于Cookie存儲(chǔ)客 戶的唯一性標(biāo)識(shí)JSESSIONID
在Session這我們需要學(xué)習(xí)如下三個(gè)問題:
怎樣獲得屬于本客戶端的session對(duì)象(內(nèi)存區(qū)域)?
怎樣向session中存取數(shù)據(jù)(session也是一個(gè)域?qū)ο螅?br>session對(duì)象的生命周期?
1.獲得Session對(duì)象
HttpSession session = request.getSession();
此方法會(huì)獲得專屬于當(dāng)前會(huì)話的Session對(duì)象,如果服務(wù)器端沒有該會(huì)話的Session 對(duì)象會(huì)創(chuàng)建一個(gè)新的Session返回,如果已經(jīng)有了屬于該會(huì)話的Session直接將已有 的Session返回(實(shí)質(zhì)就是根據(jù)JSESSIONID判斷該客戶端是否在服務(wù)器上已經(jīng)存在 session了)
2.怎樣向session中存取數(shù)據(jù)(session也是一個(gè)域?qū)ο螅?br>Session也是存儲(chǔ)數(shù)據(jù)的區(qū)域?qū)ο螅詓ession對(duì)象也具有如下三個(gè)方法:
session.setAttribute(String name,Object obj);
session.getAttribute(String name);
session.removeAttribute(String name);
3.Session對(duì)象的生命周期(面試題/筆試題)
創(chuàng)建:第一次執(zhí)行request.getSession()時(shí)創(chuàng)建
銷毀:
1)服務(wù)器(非正常)關(guān)閉時(shí)
2)session過期/失效(默認(rèn)30分鐘)
問題:時(shí)間的起算點(diǎn) 從何時(shí)開始計(jì)算30分鐘?
從不操作服務(wù)器端的資源開始計(jì)時(shí)
可以在工程的web.xml中進(jìn)行配置
</>復(fù)制代碼
30
3)手動(dòng)銷毀session
session.invalidate();
作用范圍:
默認(rèn)在一次會(huì)話中,也就是說在,一次會(huì)話中任何資源公用一個(gè)session對(duì)象
面試題:瀏覽器關(guān)閉,session就銷毀了? 不對(duì)
總結(jié):
重點(diǎn):圖
會(huì)話技術(shù):
Cookie技術(shù):存到客戶端
發(fā)送cookie
Cookie cookie = new Cookie(name,value)
cookie.setMaxAge(秒)
cookie.setPath()
response.addCookie(cookie)
獲得cookie
Cookie[] cookies = request.getCookies();
cookie.getName();
cookie.getValue();
Session技術(shù):存到服務(wù)器端 借助cookie存儲(chǔ)JSESSIONID
HttpSession session = request.getSession();
setAttribute(name,value);
getAttribute(name);
session生命周期
創(chuàng)建:第一次指定request.getSession();
銷毀:服務(wù)器關(guān)閉、session失效/過期、手動(dòng)session.invalidate();
session作用范圍:默認(rèn)一會(huì)話中
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/72064.html
摘要:創(chuàng)建與銷毀對(duì)象是發(fā)送請(qǐng)求服務(wù)器就會(huì)創(chuàng)建它,當(dāng)響應(yīng)產(chǎn)生時(shí),對(duì)象就會(huì)銷毀。是容器為開發(fā)人員提供的對(duì)象,它提供了對(duì)某一資源的已過濾請(qǐng)求調(diào)用鏈的視圖。 一、Listener監(jiān)聽器 Javaweb開發(fā)中的監(jiān)聽器,是用于監(jiān)聽web常見對(duì)象 HttpServletRequest HttpSession ServletContext 監(jiān)聽它們的創(chuàng)建與銷毀 屬性變化 session綁...
摘要:我的學(xué)習(xí)筆記匯總標(biāo)簽筆記分為兩大部分和筆記內(nèi)容主要是對(duì)一些基礎(chǔ)特性和編程細(xì)節(jié)進(jìn)行總結(jié)整理,適合了解基礎(chǔ)語法,想進(jìn)一步深入學(xué)習(xí)的人如果覺得不錯(cuò),請(qǐng)給,這也是對(duì)我的鼓勵(lì),有什么意見歡迎留言反饋目錄基礎(chǔ)鞏固筆記反射基礎(chǔ)鞏固筆記泛型基礎(chǔ)鞏 我的java&javaweb學(xué)習(xí)筆記(匯總) 標(biāo)簽: java [TOC] 筆記分為兩大部分:javase和javaweb javase javawe...
摘要:的作用域只能夠傳到當(dāng)前目錄以及以下的目錄,不可以傳到上一目錄。總結(jié)當(dāng)客戶端訪問第一個(gè)資源并且當(dāng)前或者沒有禁用當(dāng)前頁面的默認(rèn)創(chuàng)建的對(duì)象或者沒有調(diào)用方法的時(shí)候就會(huì)返回一個(gè)對(duì)象。 cookie的作用域 cookie只能夠傳到當(dāng)前目錄以及以下的目錄,不可以傳到上一目錄。 HttpSession的創(chuàng)建 HttpSession的生命周期: 1).什么時(shí)候創(chuàng)建HttpSession對(duì)象①.對(duì)于JSP...
摘要:系列文章請(qǐng)查看超詳細(xì)的面試題總結(jié)一之基礎(chǔ)知識(shí)篇超詳細(xì)的面試題總結(jié)二之基礎(chǔ)知識(shí)篇超詳細(xì)的面試題總結(jié)三之集合篇常見問題下面的都是自己之前在學(xué)習(xí)的時(shí)候總結(jié)的,對(duì)于鞏固的基礎(chǔ)知識(shí)應(yīng)該有很大幫助。注意多線程的并發(fā)的讀寫類屬性會(huì)導(dǎo)致數(shù)據(jù)不同步。 系列文章請(qǐng)查看: 超詳細(xì)的Java面試題總結(jié)(一)之Java基礎(chǔ)知識(shí)篇 超詳細(xì)的Java面試題總結(jié)(二)之Java基礎(chǔ)知識(shí)篇 超詳細(xì)的Java面試題總結(jié)(...
摘要:方法的參數(shù)不但可以使相對(duì)于上下文根的路徑,而且可以是相對(duì)于當(dāng)前的路徑。如和都是合法的路徑。 轉(zhuǎn)發(fā)與重定向區(qū)別是什么 在調(diào)用方法上 轉(zhuǎn)發(fā) 調(diào)用 HttpServletRequest 對(duì)象的方法 request.getRequestDispatcher(test.jsp).forward(req, resp); 重定向 調(diào)用 HttpServletResponse 對(duì)象的方法 res...
閱讀 2218·2021-11-22 13:54
閱讀 3382·2019-08-29 12:25
閱讀 3445·2019-08-28 18:29
閱讀 3590·2019-08-26 13:40
閱讀 3279·2019-08-26 13:32
閱讀 963·2019-08-26 11:44
閱讀 2236·2019-08-23 17:04
閱讀 2976·2019-08-23 17:02