做用域:page<request<session<applicationweb
做用域是當前信息共享的範圍,也就是信息可以在多大範圍內有效,Web交互的最基本單位爲HTTP請求。每一個用戶從進入網站到離開網站這段過程稱爲一個HTTP會話,一個服務器的運行過程當中會有多個用戶訪問,就是多個HTTP會話。做用域解釋以下。瀏覽器
1:page 當前頁面打開到關閉時間
tomcat
page對象的做用域僅限於當前用戶請求的頁面,對於page對象的引用將在相應返回客戶端後釋放,或者是轉發到其餘地方後釋放,對於page對象的引用常常存在pageContext對象中。
服務器
2:request http請求開始到結束的時間
session
一個http請求的處理可能須要多個servlet的配合,多個servlet能夠經過某種方式進行共享信息,但這個信息在請求結束後消失。
app
servlet之間的信息共享經過HttpServletReqeust這個接口實現。jsp
void setAttribute(String name, Object value):將對象value以name爲名稱保存到request做用域中。網站
Object getAttribute(String name):從request做用域中取得指定名字的信息。url
jsp中的doGet()和doPost()方法第一個傳遞的參數就是HttpServletRequest對象,使用這個對象的setAttribute()方法就能傳遞參數。
spa
設置好信息後,如何在servlet之間傳輸,這就要用到RequestDispatcher的forward方法,經過他將請求轉發給其餘servlet。
RequestDispatcher ServletContext.getRequestDispatcher(String path):取得Dispatcher對象用於轉發,path的目的地是其餘servlet,
void RequestDispatcher.forward(ServletRequest request, ServletResponse response):將request對象和response對象進行轉發,
所以只須要在當前Servlet之中利用setAttribute()設置參數,而後利用forwar()方法進行轉發,在其餘servlet中利用getAttribute()方法獲取參數。
須要注意兩點:
轉發不是重定向,轉發在web應用內部進行的,相對於web容器是透明的,因此說瀏覽器現實的地址仍是最初的servlet的地址。
注:轉發和重定向
轉發:jsp容器將使用一個內部方法調用目標頁面,目標頁面會繼續處理請求,可是對瀏覽器來講頁面url地址仍是最初的那個servlet地址,該request對象中的變量不會失效,就像把兩個頁面合在一塊兒同樣;
重定向:頁面經過瀏覽器發送一個新的請求,request對象是失效,瀏覽器的地址也會變成新的url地址。
一般轉發更快,並且request對象也不會失效。
3:session http回話開始到結束時間
session做用域比較好理解,同一個瀏覽器對服務器屢次訪問,在屢次訪問之間共享信息,就是session做用域的體現。session是經過實現HttpSession接口,他提供了一下方法:
Object HttpSesseion.getAttribute(String name) 從session中獲取信息
void HttpSession.setAttribute(String name, Object value)往session中設置信息
HttpSession HttpServletRequest.getSession();獲取當前請求的session信息,
session的開始時刻比較好判斷,他從瀏覽器發起第一個http請求就認爲回話開始,可是他的結束時間比較很差判斷,由於瀏覽器關閉並不會通知服務器,因此只能經過如下方法,第一個是等到回話結束,就認識session失效,tomcat默認的失效時間是120分鐘,但這個值也能夠經過HttpSession.setMaxInterval(int interval)來手動設置,第二個就是用戶在退出之間手動調用HttpSession的invalidate()方法,手動讓session失效。強制讓session失效。
4:application 服務器從開始到結束的時間
applicaton是從服務器開啓到關閉的時間,期間進行信息共享,application之間的信息共享經過servletContext進行實現,他主要提供一下接口
void setAttribute(String name, Object value);設置內容
Object getAttribute(String name);獲取對象內容