Java 四大做用域總結

1、ServletContext  html

    一、生命週期:當Web應用被加載進容器時建立表明整個web應用的ServletContext對象,當服務器關閉或Web應用被移除時,ServletContext對象跟着銷燬。  java

    二、做用範圍:整個Web應用。web

    三、做用:   瀏覽器

      a)在不一樣Servlet 之間轉發    tomcat

        this.getServletContext().getRequestDispatcher("/servlet/Demo10Servlet").forward(request, response);   服務器

        方法執行結束,service就會返回到服務器,再有服務器去調用目標servlet,其中request會從新建立,並將以前的request的數據拷貝進去。      session

      b)讀取資源文件。app

          一、因爲相對路徑默認相對的是java虛擬機啓動的目錄,因此咱們直接寫相對路徑將會是相對於tomcat/bin目錄,因此是拿不到資源的。若是寫成絕對路徑,當項目發佈到其餘環境時,絕對路徑就錯了。    this

        二、爲了解決這個問題ServletContext提供了:spa

            this.getServletContext().getRealPath("/1.properties"),給進一個資源的虛擬路徑,將會返回該資源在當前環境下的真實路徑。        

            this.getServletContext().getResourceAsStream("/1.properties"),給一個資源的虛擬路徑返回到該資源真實路徑的流。    

        三、當在非servlet下獲取資源文件時,就沒有ServletContext對象用了,此時只能用類加載器     

            classLoader.getResourceAsStream("../../1.properties"),此方法利用類加載器直接將資源加載到內存中,有更新延遲的問題,以及若是文件太大,佔用內存過大。     

            classLoader.getResource("../1.properties").getPath(),直接返回資源的真實路徑,沒有更新延遲的問題。

 

2、Request 域  

    一、生命週期:在service 方法調用前由服務器建立,傳入service方法。整個請求結束,request生命結束。  

    二、做用範圍:整個請求鏈(請求轉發也存在)。  

    三、做用:  在整個請求鏈中共享數據。最經常使用到:在Servlet 中處理好的數據交給Jsp顯示,此時參數就能夠放置在Request域中帶過去。

 

3、Session 域  

    HttpSession 在服務器中,爲瀏覽器建立獨一無二的內存空間,在其中保存會話相關的信息。  
    一、生命週期:在第一次調用 request.getSession() 方法時,服務器會檢查是否已經有對應的session,若是沒有就在內存  中建立一個session並返回。   

            當一段時間內session沒有被使用(默認爲30分鐘),則服務器會銷燬該session。   

            若是服務器非正常關閉(強行關閉),沒有到期的session也會跟着銷燬。   

            若是調用session提供的invalidate() ,能夠當即銷燬session。   

      注意:服務器正常關閉,再啓動,Session對象會進行鈍化和活化操做。同時若是服務器鈍化的時間在session 默認銷燬時間以內,則活化後session仍是存在的。不然Session不存在。  若是JavaBean 數據在session鈍化時,沒有實現Serializable 則當Session活化時,會消失。

    二、做用範圍:一次會話。  

 

 

4、PageContext 域

    一、生命週期:當對JSP的請求時開始,當響應結束時銷燬。  

    二、做用範圍:整個JSP頁面,是四大做用域中最小的一個。  

    做用:   

        (1)獲取其它八大隱式對象,能夠認爲是一個入口對象。   

        (2)獲取其全部域中的數據      

            pageContext  操做全部域中屬性的方法      

              public java.lang.Object getAttribute(java.lang.String name,int scope)      
              public void setAttribute(java.lang.String name, java.lang.Object value,int scope)      

              public void removeAttribute(java.lang.String name,int scope)            

              pageContext 中表明域的常量      

                PageContext.APPLICATION_SCOPE      

                PageContext.SESSION_SCOPE      

                PageContext.REQUEST_SCOPE      

                PageContext.PAGE_SCOPE            

              findAttribute方法,在四大域中搜尋屬性,搜尋的順序是page域、request域、session域、application域,從小域到大域開始搜索,若是搜索到就直接獲取該值,若是全部域中都找不到,返回一個null(與el表達式不一樣,此處返回null,對網頁是不友好的)         

        (3)跳轉到其餘資源      其身上提供了forward和include方法,簡化重定向和轉發的操做

 

引用原文:http://www.cnblogs.com/stanljj/p/4119672.html

 

寫博客是爲了記住本身容易忘記的東西,另外也是對本身工做的總結,文章能夠轉載,無需版權。但願盡本身的努力,作到更好,你們一塊兒努力進步!

若是有什麼問題,歡迎你們一塊兒探討,代碼若有問題,歡迎各位大神指正!

相關文章
相關標籤/搜索