2019-06-18 cookie、application、session、添加

一、后臺application的獲?。⊿ervlet)

? ? servletContext? app = this.getServletContext();

? ? 賦值:app.setAttribute(名,值);? ? ? ?

? ? 移出:app.removeAttribute();? ?

? ? ?修改:app.repalceAttribute();

二、cookie

? ? 后臺創(chuàng)建coolie:cookie? cook? = new? cookie(名,值);

? ? 傳遞:response.addCookie(cook);? 發(fā)送到瀏覽器,此瀏覽器都可以得到這個(gè)cookie

? ? 后臺獲取cookie.getCoolies();

三、設(shè)置cookie的有效時(shí)間(不刷新設(shè)置時(shí)間,時(shí)間到自動(dòng)關(guān)掉)

? ? ? ? setMaxAge()? ? 秒為單位

四、設(shè)置session的有效時(shí)間(session只要活動(dòng),就重新刷新設(shè)置時(shí)間)

? ? ? ? setMaxInactiveInterval()? ? 秒為單位

? ? ? ? 也可以配置web.xml文件中

? ? ? ? 在<web-app>和</web-app>之間添加如下代碼:

? ? ? ? ? ? ? ?<session-config><session-timeout>10</session-timeout></session-config>

? ? ? ? ? ? ? ? <session-timeout>里設(shè)置的數(shù)值以分為單位

注:session和coolie沒有設(shè)定最大有效時(shí)間,是一樣的,關(guān)閉瀏覽器,session和cookie消失

? ? ? ? 所以有cookie時(shí),要設(shè)定最大有效時(shí)間








總結(jié)

vaweb開發(fā)中Servlet三大域?qū)ο蟮膽?yīng)用(request、session、application(ServletContext))。

1. request

request是表示一個(gè)請求,只要發(fā)出一個(gè)請求就會創(chuàng)建一個(gè)request,它的作用域:僅在當(dāng)前請求中有效。

用處:常用于服務(wù)器間同一請求不同頁面之間的參數(shù)傳遞,常應(yīng)用于表單的控件值傳遞。

方法:request.setAttribute(); request.getAttribute(); request.removeAttribute(); request.getParameter().

2. session

服務(wù)器會為每個(gè)會話創(chuàng)建一個(gè)session對象,所以session中的數(shù)據(jù)可供當(dāng)前會話中所有servlet共享。

會話:用戶打開瀏覽器會話開始,直到關(guān)閉瀏覽器會話才會結(jié)束。一次會話期間只會創(chuàng)建一個(gè)session對象。? ?

用處:常用于web開發(fā)中的登陸驗(yàn)證界面(當(dāng)用戶登錄成功后瀏覽器分配其一個(gè)session鍵值對)。

方法:session.setAttribute(); session.getAttribute(); session.removeAttribute();

獲得session對象方法:

在Servlet中:HttpSession session = request.getSession();

由于session屬于jsp九大內(nèi)置對象之一,當(dāng)然可以直接使用。例如:<%session.serAttribute("name","admin")%>。?

session被銷毀

? ? ? ? ? 1)session超時(shí);

? ? ? ? ? 2)客戶端關(guān)閉后,再也訪問不到和該客戶端對應(yīng)的session了,它會在超時(shí)之后被銷毀;

? ? ? ? ? 3)調(diào)用session. invalidate();

備注: session是服務(wù)器端對象,保存在服務(wù)器端。并且服務(wù)器可以將創(chuàng)建session后產(chǎn)生的sessionid通過一個(gè)cookie返回給客戶端,以便下次驗(yàn)證。(session底層依賴于cookie)

3. Application(ServletContext)

作用范圍:所有的用戶都可以取得此信息,此信息在整個(gè)服務(wù)器上被保留。Application屬性范圍值,只要設(shè)置一次,則所有的網(wǎng)頁窗口都可以取得數(shù)據(jù)。ServletContext在服務(wù)器啟動(dòng)時(shí)創(chuàng)建,在服務(wù)器關(guān)閉時(shí)銷毀,一個(gè)JavaWeb應(yīng)用只創(chuàng)建一個(gè)ServletContext對象,所有的客戶端在訪問服務(wù)器時(shí)都共享同一個(gè)ServletContext對象;ServletContext對象一般用于在多個(gè)客戶端間共享數(shù)據(jù)時(shí)使用;

獲取Application對象方法(Servlet中):?

? ? ? ? ? ? ? ? ? ServletContext app01 = this.getServletContext();

? ? ? ? ? ? ? ? ? app01.setAttribute("name", "kaixuan");? ? //設(shè)置一個(gè)值進(jìn)去


? ? ? ? ? ? ? ? ? ? ServletContext app02 = this.getServletContext();

? ? ? ? ? ? ? ? ? ? app02.getAttribute("name");? ? //獲取鍵值對?

ServletContext同屬于JSP九大內(nèi)置對象之一,故可以直接使用

備注:服務(wù)器只會創(chuàng)建一個(gè)ServletContext 對象,所以app01就是app02,通過app01設(shè)置的值當(dāng)然可以通過app02獲取。

總結(jié):

1.作用域: request session application

*? ? 使用作用域傳遞數(shù)據(jù)和存儲數(shù)據(jù)

*? ? 使用作用域傳遞數(shù)據(jù)時(shí),必須掌握作用域?qū)?yīng)的生命周期和作用范圍

*

2. * 生命周期

* (1)? request:只限于一次請求

* (2)? session:一次會話(多次請求)

*? ? 開始

*? ? ? 用戶向服務(wù)器發(fā)送請求的時(shí)候

*? ? ? 結(jié)束

*? ? ? ? 客戶端

*? ? ? ? 丟失JsessionId值的時(shí)候(關(guān)閉瀏覽器)

*? ? ? ? 服務(wù)器端

*? ? ? ? ? ? 關(guān)閉服務(wù)器

*? ? ? ? ? ? 超過會話的不活動(dòng)周期時(shí)間

*? (3) application:項(xiàng)目的加載到卸載

*3.作用范圍

* (1) requset:所有被請求轉(zhuǎn)發(fā)的Servlet

* (2) session:所有的Servlet

*? (3)application:所有的Servlet(換一個(gè)瀏覽器演示,跟session作用域區(qū)分)

*?

4.*如何正確的選擇作用域

*(1)? request:跟當(dāng)前操作功能相關(guān)

* (2) session: 跟用戶信息相關(guān)

* (3) application:跟項(xiàng)目全局信息相關(guān)----》京東配送地址

*?

* 5.如何正確的選擇作用域不正確,會出現(xiàn)什么情況

*? 內(nèi)存浪費(fèi)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容