Servlet上下文


一、Servlet上下文的基本概念

Servlet上下文又叫做:ServletContext。

當WEB服務器啟動時,會為每一個WEB應用程序(webapps下的每個目錄就是一個應用程序)創建一塊共享的存儲區域。

ServletContext也叫做“公共區域”,也就是同一個WEB應用程序中,所有的Servlet和JSP都可以共享同一個區域。

ServletContext在WEB服務器啟動時創建,服務器關閉時銷毀。

 

//通過當前Servlet類的對象,得到與它關聯的ServletContext對象,也就是上下文
ServletContext application = this.getServletContext();

//HttpSession(私有區域) 與 ServletContext(公共區域) 的區別是什么?
1、作用范圍不同:HttpSession是針對每一個客戶端瀏覽器單獨有一個。
         ServletContext是針對每一個WEB應用程序有一個
2、存活時間不同:HttpSession第一次訪問服務器,服務器端調用request.getSession()時創建,訪問間隔時間超過30分鍾就銷毀。
         ServletContext服務器啟動時創建,服務器停止時銷毀。

 

 二、Servlet會話

 1、理解會話的作用

會話——瀏覽器請求一次服務器,服務器接收請求,處理之后,給出響應,這就是一次會話。

因為HTTP協議是一種“無狀態”協議(斷開連接式協議),也就是服務器給客戶端瀏覽器響應之后,就會斷開網絡連接。下次客戶端瀏覽器請求服務器時會再建立網絡連接。實際上HTTP協議是為了保證服務器的性能。而這種情況下,默認服務器是不會記錄客戶端瀏覽器的信息的。

會話跟蹤——在多次瀏覽器跟服務器的會話過程中,服務器必須要記錄客戶端瀏覽器的一些信息,這個叫會話跟蹤。

 2、會話跟蹤原理

試想一下儲戶和銀行的交互過程:

瀏覽器跟服務器交互的過程與其類似

三、HttpSession的使用

對於HttpSession來說,每個獨立的瀏覽器窗口就是一個不同的客戶端,會為它們分配不同的會話ID。

/*
得到會話對象
request.getSession() 方法有兩重含義
1、如果瀏覽器是第一次請求服務器,則請求中沒有會話ID,此時會分配ID,創建空間
2、如果瀏覽器不是第一次請求服務器,則請求中存在會話ID,此時會返回原來的HttpSession對象
*/
HttpSession session = request.getSession();

 

 HttpSession何時被創建,何時被銷毀呢?

創建:第一次請求服務器,服務器端的Servlet調用了 request.getSession()方法時被創建。

銷毀:如果瀏覽器間隔時間超過30分鍾沒有訪問服務器,則服務器會銷毀對應的HttpSession對象。(默認30分鍾是可以配置的。)

<session-config>
<session-timeout>30</session-timeout>
</session-config>

 

void setAttribute(String key, Object value);    存入鍵值對
Object getAttribute(String key);                根據鍵取出對應的值
HttpSession又被稱為“私有作用域”,或者也叫做“私有區域“

 

使用HttpSession實現保存用戶信息及登錄驗證!

URL重寫

我們前面如果要給Servlet傳遞數據,都是通過表單提交。

除了這種方式之外,還有一種常見的形式,就是:URL重寫

URL重寫的辦法就是在URL地址之后傳遞請求參數:

格式:URL?參數名1=值1&參數名2=值2……

四、總結

1、 HttpServlet是所有我們自己編寫的Servlet的父類。我們要通常要重寫它的 doGet() 或 doPostt()方法。

Servlet的生命周期是怎樣的?

首次訪問:實例化——>初始化 init() ——> 服務 service() 根據請求是GET還是POST——> 調用 doGet() 或 doPost()

后續訪問:服務 service() 根據請求是GET還是POST ——> 調用 doGet() 或doPost()

              在服務器上,Servlet始終只有一個對象!

              服務器關閉時:銷毀 destroy()

2、  HttpServletRequest是請求對象,服務器會在有客戶端請求的時候創建這個對象來保存請求的數據。

常用方法:

        void setCharacterEncoding(編碼方式)        設置請求內容的編碼方式

        String getParameter(參數名稱)             得到請求參數(表單提交,URL重寫)的值

       HttpSession getSession()                    得到一個私有區域。

                                                                   首次調用:請求中沒有SessionID,會創建一個新對象

                                                                   后續調用:請求中有SessionID,  會得到原來的對象

3、  HttpServletResponse是響應對象,Servlet處理之后的結果會放到里面,由服務器發送給客戶端瀏覽器。

常用方法:

        void setCharacterEncoding(編碼方式)         設置響應內容的編碼方式

        PrintWriter getWritter()                             得到一個用來向客戶端瀏覽器發送HTML內容的輸出流對象

        void sendRedirect(URL地址)                     發送重定向(外部跳轉)

 

       

4、  HttpSession 私有區域。

何時創建?

               客戶端瀏覽器第一次請求服務器,服務器端的Servlet調用了request.getSession()時創建。

何時銷毀?

                 訪問間隔時間超過30分鍾(可以配置)就銷毀。

             

                 SessionID是存儲在客戶端瀏覽器的內存中,而HttpSession對象存儲在服務器端。每次客戶端瀏覽器請求服務器時,會自動將SessionID發送給服務器。

常用方法:

                     void setAttribute(鍵,值)

                     Object getAttribute(鍵)

                     boolean isNew()

5、  ServletContext 公共區域

何時創建?

        服務器啟動時會為每一個WEB應用程序創建一個ServletContext。

何時銷毀?

        服務器停止時銷毀。

常用方法:

         void setAttribute(鍵,值)

        Object getAttribute(鍵)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM