溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

jsp的作用域有什么

發(fā)布時(shí)間:2022-03-10 11:20:13 來(lái)源:億速云 閱讀:150 作者:小新 欄目:web開(kāi)發(fā)

這篇文章將為大家詳細(xì)講解有關(guān)jsp的作用域有什么,小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

jsp的作用域有什么

application:在所有應(yīng)用程序中有效,即只要這個(gè)網(wǎng)站運(yùn)行著,這個(gè)作用域就有效,這個(gè)指的程序的運(yùn)行過(guò)程。

session:在當(dāng)前會(huì)話中有效,即從瀏覽器訪問(wèn)服務(wù)器開(kāi)始,這個(gè)指的是用戶的一個(gè)訪問(wèn)過(guò)程,即這次會(huì)話的開(kāi)始到結(jié)束

request:在當(dāng)前請(qǐng)求中有效,負(fù)責(zé)多個(gè)servlet之間的信息共享,即將信息放入到request中,在整個(gè)請(qǐng)求階段都是有效的,即用戶訪問(wèn)的這個(gè)階段都可以獲取到這個(gè)數(shù)據(jù)

page:在當(dāng)前頁(yè)面有效,即在一個(gè)jsp頁(yè)面上是有效的。

首先要聲明一點(diǎn),所謂"作用域"就是"信息共享的范圍",也就是說(shuō)一個(gè)信息能夠在多大的范圍內(nèi)有效。

Web交互的最基本單位為HTTP請(qǐng)求。每個(gè)用戶從進(jìn)入網(wǎng)站到離開(kāi)網(wǎng)站這段過(guò)程稱為一個(gè)HTTP會(huì)話,一個(gè)服務(wù)器的運(yùn)行過(guò)程中會(huì)有多個(gè)用戶訪問(wèn),就是多個(gè)HTTP會(huì)話。作用域解釋如下。

application:服務(wù)器啟動(dòng)到停止這段時(shí)間。

session:HTTP會(huì)話開(kāi)始到結(jié)束這段時(shí)間。

request:HTTP請(qǐng)求開(kāi)始到結(jié)束這段時(shí)間。

page:當(dāng)前頁(yè)面從打開(kāi)到關(guān)閉這段時(shí)間。

1. application 作用域

application作用域就是服務(wù)器啟動(dòng)到關(guān)閉的整段時(shí)間,在這個(gè)作用域內(nèi)設(shè)置的信息可以被所有應(yīng)用程序使用。application作用域上的信息傳遞是通過(guò)ServletContext實(shí)現(xiàn)的,它提供的主要方法如下所示:

Object getAttribute(String name):從application中獲取信息。

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

2. session作用域

session作用域比較容易理解,同一瀏覽器對(duì)服務(wù)器進(jìn)行多次訪問(wèn),在這多次訪問(wèn)之間傳遞信息,就是session作用域的體現(xiàn)。session是通過(guò)HttpSession接口實(shí)現(xiàn)的,它提供的主要方法如下所示。

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

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

HttpSession HttpServletRequest.getSession():獲取當(dāng)前請(qǐng)求所在的session的對(duì)象。

session的開(kāi)始時(shí)刻比較容易判斷,它從瀏覽器發(fā)出第一個(gè)HTTP請(qǐng)求即可認(rèn)為會(huì)話開(kāi)始。但結(jié)束時(shí)刻就不好判斷了,因?yàn)闉g覽器關(guān)閉時(shí)并不會(huì)通知服務(wù)器,所以只能通過(guò)如下這種方法判斷:如果一定的時(shí)間內(nèi)客戶端沒(méi)有反應(yīng),則認(rèn)為會(huì)話結(jié)束。Tomcat的默認(rèn)值為120分鐘,但這個(gè)值也可以通過(guò)HttpSession的setMaxInactiveInterval(int interval)方法來(lái)設(shè)置,如果想主動(dòng)讓會(huì)話結(jié)束,例如用戶單擊"注銷(xiāo)"按鈕的時(shí)候,可以使用 HttpSession 的 invalidate()方法,用于強(qiáng)制結(jié)束當(dāng)前session。

3. request作用域

一個(gè)HTTP請(qǐng)求的處理可能需要多個(gè)Servlet合作,而這幾個(gè)Servlet之間可以通過(guò)某種方式傳遞信息,但這個(gè)信息在請(qǐng)求結(jié)束后就無(wú)效了。

Servlet之間的信息共享是通過(guò)HttpServletRequest接口的兩個(gè)方法來(lái)實(shí)現(xiàn)的。

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

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

JSP中的doGet()、doPost()方法的第一個(gè)參數(shù)就是HttpServletRequest對(duì)象,使用這個(gè)對(duì)象的 setAttribute()方法即可傳遞信息。

那么在設(shè)置好信息之后,要通過(guò)何種方式將信息傳給其他的Servlet呢?這就要用到RequestDispatcher接口的forward()方法,通過(guò)它將請(qǐng)求轉(zhuǎn)發(fā)給其他Servlet。

RequestDispatcher ServletContext.getRequestDispatcher(String path):取得Dispatcher以便轉(zhuǎn)發(fā)。path為轉(zhuǎn)發(fā)的目的Servlet。

void RequestDispatcher.forward(ServletRequest request, ServletResponse response):將request和response轉(zhuǎn)發(fā)。

因此,只需要在當(dāng)前Servlet中先通過(guò)setAttribute()方法設(shè)置相應(yīng)的屬性,然后使用forward()方法進(jìn)行跳轉(zhuǎn),最后在跳轉(zhuǎn)到的Servlet中通過(guò)使用getAttribute()方法即可實(shí)現(xiàn)信息傳遞。

PHP的程序員可能不太好理解這一段,因?yàn)镻HP中沒(méi)有轉(zhuǎn)發(fā)的概念,一個(gè)請(qǐng)求只能由一個(gè)PHP文件來(lái)處理,所以PHP中根本沒(méi)有request作用域的概念。而Servlet則不同,請(qǐng)求可以在應(yīng)用程序中任意轉(zhuǎn)發(fā),所以用request作用域在不同Servlet之間傳遞信息。

注意兩點(diǎn):

轉(zhuǎn)發(fā)不是重定向,轉(zhuǎn)發(fā)是在Web應(yīng)用內(nèi)部進(jìn)行的。PHP支持重定向但沒(méi)有轉(zhuǎn)發(fā)。

轉(zhuǎn)發(fā)對(duì)瀏覽器是透明的,也就是說(shuō),無(wú)論在服務(wù)器上如何轉(zhuǎn)發(fā),瀏覽器地址欄中顯示的仍然是最初那個(gè)Servlet的地址。重定向的瀏覽器地址是變化的。

4. page作用域

page對(duì)象的作用范圍僅限于用戶請(qǐng)求的當(dāng)前頁(yè)面,對(duì)于page對(duì)象的引用將在響應(yīng)返回給客戶端之后被釋放,或者在請(qǐng)求被轉(zhuǎn)發(fā)到其他地方后被釋放。對(duì)page對(duì)象的引用通常存儲(chǔ)在pageContext對(duì)象中。

以上介紹的作用范圍越來(lái)越小,request和page的生命周期都是短暫的,它們之間的區(qū)別:一個(gè)request可以包含多個(gè)page頁(yè)(include,forward及filter)。

關(guān)于“jsp的作用域有什么”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

jsp
AI