JSP 四個作用域

2021-09-02 10:07:42 字數 2427 閱讀 2364

下圖為jsp內建物件作用域表

名稱 作用域

session 在當前會話中有效

request 在當前請求中有效

page 在當前頁面有效

首先要宣告一點,所謂"作用域"就是"資訊共享的範圍",也就是說乙個資訊能夠在多大的範圍內有效。

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

session:http會話開始到結束這段時間。

request:http請求開始到結束這段時間。

page:當前頁面從開啟到關閉這段時間。

[size=medium][b] session作用域[/b][/size]

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

[b][size=medium] request作用域[/size][/b]

乙個http請求的處理可能需要多個servlet合作,而這幾個servlet之間可以通過某種方式傳遞資訊,但這個資訊在請求結束後就無效了。

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()方法即可實現資訊傳遞。

php的程式設計師可能不太好理解這一段,因為php中沒有**的概念,乙個請求只能由乙個php檔案來處理,所以php中根本沒有request作用域的概念。而servlet則不同,請求可以在應用程式中任意**,所以用request作用域在不同servlet之間傳遞資訊。

需要注意兩點:

**不是重定向,**是在web應用內部進行的。php支援重定向但沒有**。

**對瀏覽器是透明的,也就是說,無論在伺服器上如何**,瀏覽器位址列中顯示的仍然是最初那個servlet的位址。

[size=medium][b] page作用域[/b][/size]

page物件的作用範圍僅限於使用者請求的當前頁面,對於page物件的引用將在響應返回給客戶端之後被釋放,或者在請求被**到其他地方後被釋放。對page物件的引用通常儲存在pagecontext物件中。

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

jsp中四個作用域

jsp中的四個作用域 jsp內建物件作用域表 名稱作用域 在所有應用程式中有效 session 在當前會話中有效 request 在當前請求中有效 page 在當前頁面有效 首先要宣告一點,所謂 作用域 就是 資訊共享的範圍 也就是說乙個資訊能夠在多大的範圍內有效。web互動的最基本單位為http請...

jsp的四個作用域

名稱作用域 在所有應用程式中有效 session 在當前會話中有效 request 在當前請求中有效 page 在當前頁面有效 web互動的最基本單位為http請求。每個使用者從進入 到離開 這段過程稱為乙個http會話,乙個伺服器的執行過程中會有多個使用者訪問,就是多個http會話。作用域解釋如下...

Jsp的四個作用域

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