1. 程式人生 > >javaweb中四大域物件的生命週期與常用方法

javaweb中四大域物件的生命週期與常用方法

一、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提供了:

 獲取web上下路徑:( web上下文路徑就是專案在tomcat伺服器中執行的路徑。注意不是開發目錄的專案名稱。)
response.sendRedirect(context.getContextPath()+"/hello.html");;

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

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

3、當在非servlet下獲取資原始檔時,就沒有ServletContext物件用了,此時只能用類載入器

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

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

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

二、Request 域(轉發時request中的資料還在,重定向則不在,因為已經是一個新的請求了)


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

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

3、作用:在整個請求鏈中共享資料。最常用到:在Servlet 中處理好的資料交給Jsp顯示,此時引數就可以放置在Request域中帶過去。
主要方法:
reuqest.getParameter("name")  獲取一個值的引數
request.getParameterValue("name")  獲取多個值的引數
request.getParameterNames() 獲取所有引數名稱
request.getParameterMap()   獲取所有引數物件

三、Session 域


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

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

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

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

如果呼叫session提供的invalidate() ,可以立即銷燬session。

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

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

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

3、作用:
(瀏覽器中建立一個session物件時,會給予其一個標識JSESSIONID,這個標識放在cookie上,session的預設存在時間是30分鐘)
1)建立HttpSession物件,用於儲存會話資料
session = request.getSession();   建立或獲取session物件
getSession(true):建立一個HttpSession物件;
getSession(false):找出是否存在HttpSession物件;
2)修改HttpSession物件
void setMaxInactiveInterval(int interval)  設定session物件的有效時間
void invalidate()   手動銷燬session物件
3)儲存會話資料(作為域物件)
session.setAttribute("name",Object);  儲存資料
session.getAttribute("name")   獲取資料
session.removeAttribute("name") 刪除資料
4)直接手動銷燬sessino物件
invalidate();

四、PageContext 域


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

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