JAVA 四大域對象總結

來源:互聯網
上載者:User

標籤:

   

一、ServletContext 

    1、生命週期:當Web應用被載入進容器時建立代表整個web應用的ServletContext對象,當伺服器關閉或Web應用被移除時,ServletContext對象跟著銷毀。 

    2、作用範圍:整個Web應用。

    3、作用:  

      a)在不同Servlet 之間轉寄   

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

        方法執行結束,service就會返回到伺服器,再有伺服器去調用目標servlet,其中request會重新建立,並將之前的request的資料拷貝進去。     

      b)讀取資源檔。

          1、由於相對路徑預設相對的是java虛擬機器啟動的目錄,所以我們直接寫相對路徑將會是相對於tomcat/bin目錄,所以是拿不到資源的。

                           如果寫成絕對路徑,當項目發布到其他環境時,絕對路徑就錯了。   

        2、為瞭解決這個問題ServletContext提供了:

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

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

        3、當在非servlet下擷取資源檔時,就沒有ServletContext對象用了,此時只能用類載入器    

            classLoader.getResourceAsStream("../../1.properties"),此方法利用類載入器直接將資源載入到記憶體中,有更新延遲的問題,

                                   以及如果檔案太大,佔用記憶體過大。    

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

 

二、Request 域 

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

    2、作用範圍:整個請求鏈(請求轉寄也存在)。 

    3、作用:  在整個請求鏈中共用資料。最常用到:在Servlet 中處理好的資料交給Jsp顯示,此時參數就可以放置在Request域中帶過去。

 

三、Session 域 

    HttpSession 在伺服器中,為瀏覽器建立獨一無二的記憶體空間,在其中儲存會話相關的資訊。      

           1、生命週期:在第一次調用 request.getSession() 方法時,伺服器會檢查是否已經有對應的session,如果沒有就在記憶體  中建立一個session並返回。  

            當一段時間內session沒有被使用(預設為30分鐘),則伺服器會銷毀該session。  

            如果伺服器非正常關閉(強行關閉),沒有到期的session也會跟著銷毀。  

            如果調用session提供的invalidate() ,可以立即銷毀session。  

      注意:伺服器正常關閉,再啟動,Session對象會進行鈍化和活化操作。同時如果伺服器鈍化的時間在session 預設銷毀時間之內,

                         則活化後session還是存在的。否則Session不存在。  如果JavaBean 資料在session鈍化時,沒有實現Serializable 則當Session活化時,會消失。

    2、作用範圍:一次會話。 

 

 

四、PageContext 域

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

    2、作用範圍:整個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方法,簡化重新導向和轉寄的操作

JAVA 四大域對象總結

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.