jsp的四個作用域

2021-08-08 05:10:53 字數 2477 閱讀 7171

名稱作用域

在所有應用程式中有效

session

在當前會話中有效

request

在當前請求中有效

page

在當前頁面有效

web互動的最基本單位為http請求。每個使用者從進入**到離開**這段過程稱為乙個http會話,乙個伺服器的執行過程中會有多個使用者訪問,就是多個http會話。作用域解釋如下。

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()

乙個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裡的變數只要頁面跳轉了,它們就不見了。如果把變數放到pagecontext裡,就說明它的作用域是page,它的有效範圍只在當前jsp頁面裡。從把變數放到pagecontext開始,到jsp頁面結束,你都可以使用這個變數。

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

JSP 四個作用域

下圖為jsp內建物件作用域表 名稱 作用域 session 在當前會話中有效 request 在當前請求中有效 page 在當前頁面有效 首先要宣告一點,所謂 作用域 就是 資訊共享的範圍 也就是說乙個資訊能夠在多大的範圍內有效。web互動的最基本單位為http請求。每個使用者從進入 到離開 這段過...

Jsp的四個作用域

pagecontext常量名 描述 作用域名稱 域物件型別 pagescope 當前頁面中有效 pagecontext pagecontext requestscope 一次請求範圍 request httpservletrequest sessionscope 一次會話範圍 session htt...

JSP的四個作用域

1.簡單說 page指當前頁面。在乙個jsp頁面裡有效 2.request指從http請求到伺服器處理結束,返回響應的整個過程。3.session 有效範圍當前會話,從瀏覽器開啟到瀏覽器關閉這個過程。此處我舉個例子說明 乙個 mywebsite,其包含7個jsp頁面,分別為master.jsp to...