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

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

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

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

一、Servlet簡介

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

二、Servlet的運行過程

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

Servlet組件:

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

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

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

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

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

Request和Response
requestresponse對象的原理:
==都由服務器創(chuàng)建,我們來使用它們;
==request對象是來獲取請求消息,response對象是來設置響應消息;
==request對象繼承體系結構:
ServletRequest 接口
<<繼承>>
HttpServletRequest 接口
<<實現(xiàn)>>
(tomcat類)org.apache.catalina.connector.RequestFacade

在這里插入圖片描述

轉發(fā)與重定向

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

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

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

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

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

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

全局作用域對象

6. 開發(fā)人員習慣將ServletContext對象稱為【全局作用域對象】
7. 工作原理:每個網(wǎng)站都存在一個全局作用域對象【相當于】一個Map;
將數(shù)據(jù)存入全局作業(yè)域對象,當前其他servlet此時都可以從全局作用域對象得到這個數(shù)據(jù)并進行使用;
8. 生命周期:Http服務器啟動過程中,自動在內(nèi)存中創(chuàng)建一個全局作用域對象,在運行期間,全局作用域對象就一個,并且一直存活,當Http服務器關閉時,進行銷毀;
全局作用域對象生命周期貫穿網(wǎng)站整個運行周期

在這里插入圖片描述

ServletContext全局作用域對象,所有的Servlet共享這個對象

  • 是一個域對象
  • 可以讀取全局配置參數(shù)
  • 可以搜索當前工程目錄下面的資源文件
  • 可以獲取當前工程名字(了解)

凡是域對象都有如下3個方法:

  • setAttribute(name,value);name是String類型,value是Object類型;往域對象里面添加數(shù)據(jù),添加時以key-value形式添加
  • getAttribute(name);根據(jù)指定的key讀取域對象里面的數(shù)據(jù)
  • removeAttribute(name);根據(jù)指定的key從域對象里面刪除數(shù)據(jù)

HttpServletRequest對象代表客戶端的請求,當客戶端通過HTTP協(xié)議訪問服務器時,HTTP請求頭中的所有信息都封裝在這個對象中,通過這個對象提供的方法,可以獲得客戶端請求的所有信息。

HttpSession 服務端的技術
服務器會為每一個用戶 創(chuàng)建一個獨立的HttpSession

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

域的范圍:

Context域 > Session域 > Request域
Session域 只要會話不結束就會存在 但是Session有默認的存活時間(30分鐘)

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

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

3.發(fā)送Cookie對象

response.addCookie(Cookie cookie)

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

Cookie[] request.getCookie()

Cookie銷毀時機
1.默認情況隨瀏覽器關閉被銷毀
2.手動設置情況下,設置Cookie存活時間,關閉瀏覽器不會導致Cookie被刪除;

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

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

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

設置HttpSession的過期時間:單位為S

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

這個時間就是Session的超時時間。如果超過了超時時間沒訪問過服務器,Session就自動失效了。

Session具有以下特點:

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

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

相關文章

  • 一文詳解Java Netty中的Constant類

    一文詳解Java Netty中的Constant類

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

    Java加解密技術系列之RSA詳解

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

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

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

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

    本文介紹Spring Security實現(xiàn)自定義訪問策略,當根據(jù)誰訪問哪個域對象做出安全決策時,您可能需要一個自定義的訪問決策投票者,幸運的是,Spring Security有很多這樣的選項來實現(xiàn)訪問控制列表(ACL)約束,下面就來學習Spring Security自定義訪問策略,需要的朋友可以參考下
    2022-02-02
  • Java中的Optional處理方法

    Java中的Optional處理方法

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

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

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

    Java代碼的三根頂梁柱:循環(huán)結構

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

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

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

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

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

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

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

最新評論