Servlet中重要對象詳解(ServletContext,HttpSession等)


ServletContext

什么是Servlet上下文?

  Servlet上下文又叫做:ServletContext。容器啟動之后,容器會為每個web應用創建一個實現了ServletContext接口要求的對象,該對象就稱之為servlet上下文。

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

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

 

ServletContext特點:

  1、ServletContext生命周期:在WEB服務器啟動時創建,服務器關閉時銷毀。

  2、唯一性,一個web應用對應一個servlet上下文

  3、一直存在,只要容器沒有關閉,應用沒有被卸載,servlet上下文就會一直存在。

 

如何獲取Servlet上下文?

  GenericServlet,ServletConfig,HttpSession,FilterConfig都提供了一個方法getServletContext()來獲得Servlet上下文。

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

 

ServletContext上下文作用:

  1、綁定數據

    setAttribute,removeAttribute,getAttribute在滿足使用條件情況下,優先使用生命周期短的(request<session<ServletContext)

  2、讀取全局的初始化參數

    首先在web.xml中這么配置

    <!-- 配置全局的初始化參數 -->
    <context-param>
      <param-name>company</param-name>
      <param-value>網易雷火游戲</param-value>
    </context-param>
 
 
HttpSession(私有區域) 與 ServletContext(公共區域) 的區別是什么?
1、作用范圍不同:HttpSession是針對每一個客戶端瀏覽器單獨有一個。
         ServletContext是針對每一個WEB應用程序有一個
2、存活時間不同:HttpSession第一次訪問服務器,服務器端調用request.getSession()時創建,訪問間隔時間超過30分鍾就銷毀。
         ServletContext服務器啟動時創建,服務器停止時銷毀。
 
 
 
 
HttpSession  
什么是HttpSession?
  服務器端為保存狀態而創建的一個特殊的對象。
 
HttpSession的原理:
  瀏覽器訪問服務器時,服務器會創建一個session對象(該對象有一個唯一的ID,一般稱之為sessionId),服務器會將這個sessionId發送給瀏覽器(默認以cookie方式發送),瀏覽器會將sessionId保存下來(在內存中);當瀏覽器再次訪問服務器時,會將sessionId發送給服務器,服務器依據sessionId找到對應的session對象。
 
如何獲取HttpSession?
  HttpSession s=request.getSession(boolean flag)
    flag為true時,先查看請求當中有沒有sessionId,若沒有,則創建session對象;若有,則依據該sessionId去查找對應的session對象(找到就返回,找不到就創建一個新的session對象)
    flag為false時,先查看請求當中有沒有sessionId,若沒有,不創建session對象;若有,則依據該sessionId去查找對應的session對象(找到就返回,找不到就返回null)
    flag為空時,HttpSession s=request.getSession()等價於上面參數為true時

 

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

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

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

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


免責聲明!

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



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