jsp的四個作用域1

pplication 作用域

     如果把變量放到application裏,就說明它的作用域是application,它的有效範圍是整個應用。 整個應用是指從應用啓動,到應用結束。我們沒有說“從服務器啓動,到服務器關閉”,是因爲一個服務器可能部署多個應用,當然你關閉了服務器,就會把上面所有的應用都關閉了。 application作用域裏的變量,它們的存活時間是最長的,如果不進行手工刪除,它們就一直可以使用。

application作用域上的信息傳遞是通過ServletContext實現的,它提供的主要方法如下所示:

Object getAttribute(String name)  //從application中獲取信息;

void setAttribute(String name, Object value)  //向application作用域中設置信息。

session作用域

       session作用域比較容易理解,同一瀏覽器對服務器進行多次訪問,在這多次訪問之間傳遞信息,就是session作用域的體現。如果把變量放到session裏,就說明它的作用域是session,它的有效範圍是當前會話。所謂當前會話,就是指從用戶打開瀏覽器開始,到用戶關閉瀏覽器這中間的過程。這個過程可能包含多個請求響應。也就是說,只要用戶不關瀏覽器,服務器就有辦法知道這些請求是一個人發起的,整個過程被稱爲一個會話(session),而放到會話中的變量,就可以在當前會話的所有請求裏使用。 
 session是通過HttpSession接口實現的,它提供的主要方法如下所示:

Object HttpSession.getAttribute(String name) //從session中獲取信息。

void HttpSession.setAttribute(String name, Object value)//向session中保存信息。

HttpSession HttpServletRequest.getSessio() //獲取當前請求所在的session的對象。

 session的開始時刻比較容易判斷,它從瀏覽器發出第一個HTTP請求即可認爲會話開始。但結束時刻就不好判斷了,因爲瀏覽器關閉時並不會通知服務器,所以只能通過如下這種方法判斷:如果一定的時間內客戶端沒有反應,則認爲會話結束。Tomcat的默認值爲120分鐘,但這個值也可以通過HttpSession的setMaxInactiveInterval()方法來設置:

void setMaxInactiveInterval(int interval)

 

如果想主動讓會話結束,例如用戶單擊“註銷”按鈕的時候,可以使用 HttpSession 的 invalidate()方法,用於強制結束當前session:void invalidate()

 

request作用域

     一個HTTP請求的處理可能需要多個Servlet合作,而這幾個Servlet之間可以通過某種方式傳遞信息,但這個信息在請求結束後就無效了。request裏的變量可以跨越forward前後的兩頁。但是隻要刷新頁面,它們就重新計算了。如果把變量放到request裏,就說明它的作用域是request,它的有效範圍是當前請求週期。 所謂請求週期,就是指從http請求發起,到服務器處理結束,返回響應的整個過程。在這個過程中可能使用forward的方式跳轉了多個jsp頁面,在這些頁面裏你都可以使用這個變量。

Servlet之間的信息共享是通過HttpServletRequest接口的兩個方法來實現的:

void setAttribute(String name, Object value) //將對象value以name爲名稱保存到request作用域中。

Object getAttribute(String name)//從request作用域中取得指定名字的信息。

     JSP中的doGet()、doPost()方法的第一個參數就是HttpServletRequest對象,使用這個對象的 setAttribute()方法即可傳遞信息。那麼在設置好信息之後,要通過何種方式將信息傳給其他的Servlet呢?這就要用到RequestDispatcher接口的forward()方法,通過它將請求轉發給其他Servlet。

 RequestDispatcher ServletContext.getRequestDispatcher(String path) //取得Dispatcher以便轉發,path爲轉發的目的Servlet。

 void RequestDispatcher.forward(ServletRequest request, ServletResponse response)//將request和response轉發

     因此,只需要在當前Servlet中先通過setAttribute()方法設置相應的屬性,然後使用forward()方法進行跳轉,最後在跳轉到的Servlet中通過使用getAttribute()方法即可實現信息傳遞。

  需要注意兩點:

1、轉發不是重定向,轉發是在Web應用內部進行的。

2、轉發對瀏覽器是透明的,也就是說,無論在服務器上如何轉發,瀏覽器地址欄中顯示的仍然是最初那個Servlet的地址。

page作用域

page對象的作用範圍僅限於用戶請求的當前頁面,對於page對象的引用將在響應返回給客戶端之後被釋放,或者在請求被轉發到其他地方後被釋放。page裏的變量只要頁面跳轉了,它們就不見了。如果把變量放到pageContext裏,就說明它的作用域是page,它的有效範圍只在當前jsp頁面裏。從把變量放到pageContext開始,到jsp頁面結束,你都可以使用這個變量。

以上介紹的作用範圍越來越小,request和page的生命週期都是短暫的,它們之間的區別:一個request可以包含多個page頁(include,forward及filter)。

發佈了184 篇原創文章 · 獲贊 62 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章