欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Servlet實(shí)現(xiàn)共享數(shù)據(jù)JavaWeb組件的幾種方法

 更新時(shí)間:2021年07月07日 10:10:56   作者:JF Coder  
本文將結(jié)合實(shí)例代碼,介紹Servlet實(shí)現(xiàn)共享數(shù)據(jù)JavaWeb組件的幾種方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

Servlet JavaWeb三大組件包括,Servlet組件(接受請(qǐng)求,響應(yīng)數(shù)據(jù)),F(xiàn)ilter組件(過(guò)濾,攔截請(qǐng)求),Listener組件(監(jiān)聽器),這三大組件構(gòu)成了javaWeb核心內(nèi)容,也是作為后端來(lái)說(shuō),JavaWeb最重要的內(nèi)容。

一、Servlet簡(jiǎn)介

  Servlet是sun公司提供的一門用于開發(fā)動(dòng)態(tài)web資源的技術(shù)。
  Sun公司在其API中提供了一個(gè)servlet接口,用戶若想用發(fā)一個(gè)動(dòng)態(tài)web資源(即開發(fā)一個(gè)Java程序向?yàn)g覽器輸出數(shù)據(jù)),需要完成以下2個(gè)步驟:
 1、編寫一個(gè)Java類,實(shí)現(xiàn)servlet接口。  
 2、把開發(fā)好的Java類部署到web服務(wù)器中。
  按照一種約定俗成的稱呼習(xí)慣,通常我們也把實(shí)現(xiàn)了servlet接口的java程序,稱之為Servlet

二、Servlet的運(yùn)行過(guò)程

Servlet程序是由WEB服務(wù)器調(diào)用,web服務(wù)器收到客戶端的Servlet訪問(wèn)請(qǐng)求后:
 ?、賅eb服務(wù)器首先檢查是否已經(jīng)裝載并創(chuàng)建了該Servlet的實(shí)例對(duì)象。如果是,則直接執(zhí)行第④步,否則,執(zhí)行第②步。
  ②裝載并創(chuàng)建該Servlet的一個(gè)實(shí)例對(duì)象。
 ?、壅{(diào)用Servlet實(shí)例對(duì)象的init()方法。
  ④創(chuàng)建一個(gè)用于封裝HTTP請(qǐng)求消息的HttpServletRequest對(duì)象和一個(gè)代表HTTP響應(yīng)消息的HttpServletResponse對(duì)象,然后調(diào)用Servlet的service()方法并將請(qǐng)求和響應(yīng)對(duì)象作為參數(shù)傳遞進(jìn)去。
  ⑤WEB應(yīng)用程序被停止或重新啟動(dòng)之前,Servlet引擎將卸載Servlet,并在卸載之前調(diào)用Servlet的destroy()方法。

Servlet組件:

什么是Servlet組件:處理請(qǐng)求和發(fā)送響應(yīng)的過(guò)程是由一種叫做Servlet的程序來(lái)完成的,并且Servlet是為了解決實(shí)現(xiàn)動(dòng)態(tài)頁(yè)面而衍生的東西。
整個(gè)過(guò)程為:

客戶端發(fā)送請(qǐng)求至服務(wù)器端;服務(wù)器將請(qǐng)求信息發(fā)送至 Servlet;Servlet 生成響應(yīng)內(nèi)容并將其傳給服務(wù)器。響應(yīng)內(nèi)容動(dòng)態(tài)生成,通常取決于客戶端的請(qǐng)求;服務(wù)器將響應(yīng)返回給客戶端。

多個(gè)Servlet之間共享數(shù)據(jù)實(shí)現(xiàn)方案

Servlet規(guī)范中提供四種數(shù)據(jù)共享方案:

  • ServletContext接口
  • HttpServletRequest接口
  • HttpSession接口
  • Cookie類

Request和Response
requestresponse對(duì)象的原理:
==都由服務(wù)器創(chuàng)建,我們來(lái)使用它們;
==request對(duì)象是來(lái)獲取請(qǐng)求消息,response對(duì)象是來(lái)設(shè)置響應(yīng)消息;
==request對(duì)象繼承體系結(jié)構(gòu):
ServletRequest 接口
<<繼承>>
HttpServletRequest 接口
<<實(shí)現(xiàn)>>
(tomcat類)org.apache.catalina.connector.RequestFacade

在這里插入圖片描述

轉(zhuǎn)發(fā)與重定向

第一種 request.getRequestDispatcher().forward(request,response)
1、屬于轉(zhuǎn)發(fā),也是服務(wù)器跳轉(zhuǎn),相當(dāng)于方法調(diào)用,在執(zhí)行當(dāng)前文件的過(guò)程中轉(zhuǎn)向執(zhí)行目標(biāo)文件,兩個(gè)文件(當(dāng)前文件和目標(biāo)文件)屬于同一次請(qǐng)求,前后頁(yè)共用一個(gè)request,可以通過(guò)此來(lái)傳遞一些數(shù)據(jù)或者session信息,request.setAttribute()request.getAttribute()。
2、在前后兩次執(zhí)行后,地址欄不變,仍是當(dāng)前文件的地址。
3、不能轉(zhuǎn)向到本web應(yīng)用之外的頁(yè)面和網(wǎng)站,所以轉(zhuǎn)向的速度要快。
4、URL中所包含的“/”表示應(yīng)用程序(項(xiàng)目)的路徑。

第二種 response.sendRedirect()
1、屬于重定向,也是客戶端跳轉(zhuǎn),相當(dāng)于客戶端向服務(wù)端發(fā)送請(qǐng)求之后,服務(wù)器返回一個(gè)響應(yīng),客戶端接收到響應(yīng)之后又向服務(wù)端發(fā)送一次請(qǐng)求,一共是2次請(qǐng)求,前后頁(yè)不共用一個(gè)request,不能讀取轉(zhuǎn)向前通過(guò)request.setAttribute()設(shè)置的屬性值。
2、在前后兩次執(zhí)行后,地址欄發(fā)生改變,是目標(biāo)文件的地址。
3、可以轉(zhuǎn)向到本web應(yīng)用之外的頁(yè)面和網(wǎng)站,所以轉(zhuǎn)向的速度相對(duì)要慢。
4、URL種所包含的"/"表示根目錄的路徑。

特殊的應(yīng)用:對(duì)數(shù)據(jù)進(jìn)行修改、刪除、添加操作的時(shí)候,應(yīng)該用response.sendRedirect()。如果是采用了request.getRequestDispatcher().forward(request,response),那么操作前后的地址欄都不會(huì)發(fā)生改變,仍然是修改的控制器,如果此時(shí)再對(duì)當(dāng)前頁(yè)面刷新的話,就會(huì)重新發(fā)送一次請(qǐng)求對(duì)數(shù)據(jù)進(jìn)行修改,這也就是有的人在刷新一次頁(yè)面就增加一條數(shù)據(jù)的原因。

如何采用第二種方式傳遞數(shù)據(jù):
1、可以選擇session,但要在第二個(gè)文件中刪除;
2、可以在請(qǐng)求的url中帶上參數(shù),如"add.htm?id=122"
典型的應(yīng)用場(chǎng)景:

  • forward: 訪問(wèn) Servlet 處理業(yè)務(wù)邏輯,然后 forward 到 jsp 顯示處理結(jié)果,瀏覽器里 URL 不變
  • redirect: 提交表單,處理成功后 redirect 到另一個(gè) jsp,防止表單重復(fù)提交,瀏覽器里 URL 變了

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

全局作用域?qū)ο?br />

6. 開發(fā)人員習(xí)慣將ServletContext對(duì)象稱為【全局作用域?qū)ο蟆?br /> 7. 工作原理:每個(gè)網(wǎng)站都存在一個(gè)全局作用域?qū)ο蟆鞠喈?dāng)于】一個(gè)Map;
將數(shù)據(jù)存入全局作業(yè)域?qū)ο螅?dāng)前其他servlet此時(shí)都可以從全局作用域?qū)ο蟮玫竭@個(gè)數(shù)據(jù)并進(jìn)行使用;
8. 生命周期:Http服務(wù)器啟動(dòng)過(guò)程中,自動(dòng)在內(nèi)存中創(chuàng)建一個(gè)全局作用域?qū)ο?,在運(yùn)行期間,全局作用域?qū)ο缶鸵粋€(gè),并且一直存活,當(dāng)Http服務(wù)器關(guān)閉時(shí),進(jìn)行銷毀;
全局作用域?qū)ο笊芷谪灤┚W(wǎng)站整個(gè)運(yùn)行周期

在這里插入圖片描述

ServletContext全局作用域?qū)ο?,所有的Servlet共享這個(gè)對(duì)象

  • 是一個(gè)域?qū)ο?/li>
  • 可以讀取全局配置參數(shù)
  • 可以搜索當(dāng)前工程目錄下面的資源文件
  • 可以獲取當(dāng)前工程名字(了解)

凡是域?qū)ο蠖加腥缦?個(gè)方法:

  • setAttribute(name,value);name是String類型,value是Object類型;往域?qū)ο罄锩嫣砑訑?shù)據(jù),添加時(shí)以key-value形式添加
  • getAttribute(name);根據(jù)指定的key讀取域?qū)ο罄锩娴臄?shù)據(jù)
  • removeAttribute(name);根據(jù)指定的key從域?qū)ο罄锩鎰h除數(shù)據(jù)

HttpServletRequest對(duì)象代表客戶端的請(qǐng)求,當(dāng)客戶端通過(guò)HTTP協(xié)議訪問(wèn)服務(wù)器時(shí),HTTP請(qǐng)求頭中的所有信息都封裝在這個(gè)對(duì)象中,通過(guò)這個(gè)對(duì)象提供的方法,可以獲得客戶端請(qǐng)求的所有信息。

HttpSession 服務(wù)端的技術(shù)
服務(wù)器會(huì)為每一個(gè)用戶 創(chuàng)建一個(gè)獨(dú)立的HttpSession

HttpSession原理
當(dāng)用戶第一次訪問(wèn)Servlet時(shí),服務(wù)器端會(huì)給用戶創(chuàng)建一個(gè)獨(dú)立的Session
并且生成一個(gè)SessionID,這個(gè)SessionID在響應(yīng)瀏覽器的時(shí)候會(huì)被裝進(jìn)cookie中,從而被保存到瀏覽器中,當(dāng)用戶再一次訪問(wèn)Servlet時(shí),請(qǐng)求中會(huì)攜帶著cookie中的SessionID去訪問(wèn),服務(wù)器會(huì)根據(jù)這個(gè)SessionID去查看是否有對(duì)應(yīng)的Session對(duì)象
有就拿出來(lái)使用;沒有就創(chuàng)建一個(gè)Session(相當(dāng)于用戶第一次訪問(wèn));

域的范圍:

Context域 > Session域 > Request域
Session域 只要會(huì)話不結(jié)束就會(huì)存在 但是Session有默認(rèn)的存活時(shí)間(30分鐘)

Cookie
客戶端會(huì)話技術(shù),將數(shù)據(jù)保存到客戶端

  • 使用快速入門:
  • 創(chuàng)建Cookie對(duì)象,綁定數(shù)據(jù)
new Cooike(String name,String value)

3.發(fā)送Cookie對(duì)象

response.addCookie(Cookie cookie)

4.獲取Cookie,拿到數(shù)據(jù)

Cookie[] request.getCookie()

Cookie銷毀時(shí)機(jī)
1.默認(rèn)情況隨瀏覽器關(guān)閉被銷毀
2.手動(dòng)設(shè)置情況下,設(shè)置Cookie存活時(shí)間,關(guān)閉瀏覽器不會(huì)導(dǎo)致Cookie被刪除;

 cookie.setMaxAge(60);//設(shè)置cookie在硬盤存活1分鐘

Session
服務(wù)器端會(huì)話技術(shù)
對(duì)于Servlet而言:
  若Servlet是客戶端訪問(wèn)的第一個(gè)WEB應(yīng)用的資源,則只有調(diào)用了request.getSession()或request.getSession(true) 才會(huì)創(chuàng)建HttpSession對(duì)象

1). 在Servlet中如何獲取HttpSession對(duì)象?
  request.getSession(boolean create):create為false,若沒有和當(dāng)前JSP頁(yè)面關(guān)聯(lián)的HttpSession對(duì)象,則返回null;
  若有返回true create為true一定返回一個(gè)HTTPSession對(duì)象。若沒有和昂前JSP頁(yè)面關(guān)聯(lián)的HttpSession對(duì)象,則服務(wù)器創(chuàng)建一個(gè)新的HttpSession對(duì)象返回,若有,則直接返回關(guān)聯(lián)。
  request.getSession()等同于request.getSession(true)
2. 什么時(shí)候銷毀HttpSession對(duì)象:
1).直接調(diào)用HttpSession的invalidate()方法:使HttpSession失效
2).服務(wù)器卸載了當(dāng)前Web應(yīng)用。
3).超出HttpSession的過(guò)期時(shí)間。

設(shè)置HttpSession的過(guò)期時(shí)間:?jiǎn)挝粸镾

session.setMaxInactiveInterval(5);
out.print(session.getMaxInactiveInterval());
<!--在web.xml文件中設(shè)置HttpSession過(guò)期時(shí)間。 -->
    <session-config>
        <session-timeout>30</session-timeout>
    </session-config>
<!--系統(tǒng)默認(rèn)30分鐘 -->

這個(gè)時(shí)間就是Session的超時(shí)時(shí)間。如果超過(guò)了超時(shí)時(shí)間沒訪問(wèn)過(guò)服務(wù)器,Session就自動(dòng)失效了。

Session具有以下特點(diǎn):

(1)Session中的數(shù)據(jù)保存在服務(wù)器端;
(2)Session中可以保存任意類型的數(shù)據(jù);
(3)Session默認(rèn)的生命周期是30分鐘,可以手動(dòng)設(shè)置更長(zhǎng)或更短的時(shí)間。

到此這篇關(guān)于Servlet實(shí)現(xiàn)共享數(shù)據(jù)JavaWeb組件的幾種方法的文章就介紹到這了,更多相關(guān)Servlet 共享數(shù)據(jù) 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 一文詳解Java Netty中的Constant類

    一文詳解Java Netty中的Constant類

    這篇文章主要介紹了Constants類即常量類是將一些常用的變量集合到一個(gè)地方的類,文中有詳細(xì)的代碼示例,感興趣的同學(xué)可以參考一下
    2023-05-05
  • Java加解密技術(shù)系列之RSA詳解

    Java加解密技術(shù)系列之RSA詳解

    出于安全考慮,網(wǎng)絡(luò)的傳輸中經(jīng)常對(duì)傳輸數(shù)據(jù)做加密和編碼處理,本篇文章主要介紹Java加解密技術(shù)系列之RSA詳解,非常具有實(shí)用價(jià)值,需要的朋友可以參考下。
    2016-10-10
  • SpringCloud Feign如何在遠(yuǎn)程調(diào)用中傳輸文件

    SpringCloud Feign如何在遠(yuǎn)程調(diào)用中傳輸文件

    這篇文章主要介紹了SpringCloud Feign如何在遠(yuǎn)程調(diào)用中傳輸文件,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • Spring Security實(shí)現(xiàn)自定義訪問(wèn)策略

    Spring Security實(shí)現(xiàn)自定義訪問(wèn)策略

    本文介紹Spring Security實(shí)現(xiàn)自定義訪問(wèn)策略,當(dāng)根據(jù)誰(shuí)訪問(wèn)哪個(gè)域?qū)ο笞龀霭踩珱Q策時(shí),您可能需要一個(gè)自定義的訪問(wèn)決策投票者,幸運(yùn)的是,Spring Security有很多這樣的選項(xiàng)來(lái)實(shí)現(xiàn)訪問(wèn)控制列表(ACL)約束,下面就來(lái)學(xué)習(xí)Spring Security自定義訪問(wèn)策略,需要的朋友可以參考下
    2022-02-02
  • Java中的Optional處理方法

    Java中的Optional處理方法

    在我們?nèi)粘5拈_發(fā)中,我們經(jīng)常會(huì)遇到?NullPointerException,如何才能優(yōu)雅的處理NPE?這里告訴大家一個(gè)較為流行的方法,這篇文章主要介紹了Java中的Optional處理方法,需要的朋友可以參考下
    2022-09-09
  • spring?項(xiàng)目實(shí)現(xiàn)限流方法示例

    spring?項(xiàng)目實(shí)現(xiàn)限流方法示例

    這篇文章主要為大家介紹了spring項(xiàng)目實(shí)現(xiàn)限流的方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • Java代碼的三根頂梁柱:循環(huán)結(jié)構(gòu)

    Java代碼的三根頂梁柱:循環(huán)結(jié)構(gòu)

    這篇文章主要介紹了JAVA 循環(huán)結(jié)構(gòu)的相關(guān)資料,文中講解的非常細(xì)致,示例代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2021-08-08
  • SpringBoot中Jackson日期格式化技巧分享

    SpringBoot中Jackson日期格式化技巧分享

    一般在SpringBoot項(xiàng)目中,spring默認(rèn)使用jackson轉(zhuǎn)換日期,下面這篇文章主要給大家介紹了關(guān)于SpringBoot中Jackson日期格式化技巧的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-04-04
  • Java微信公眾平臺(tái)開發(fā)(14) 微信web開發(fā)者工具使用

    Java微信公眾平臺(tái)開發(fā)(14) 微信web開發(fā)者工具使用

    這篇文章主要為大家詳細(xì)介紹了Java微信公眾平臺(tái)開發(fā)第十四步,微信web開發(fā)者工具的使用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • Java 條件控制與循環(huán)控制實(shí)例

    Java 條件控制與循環(huán)控制實(shí)例

    下面小編就為大家?guī)?lái)一篇Java 條件控制與循環(huán)控制實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-05-05

最新評(píng)論