jsp四大作用域是哪幾個?這個問題可能是我們?nèi)粘9ぷ鹘?jīng)常見到的。通過這個問題,希望你能收獲更多。下面是解決這個問題的步驟內(nèi)容

創(chuàng)新互聯(lián)科技有限公司專業(yè)互聯(lián)網(wǎng)基礎(chǔ)服務(wù)商,為您提供成都天府聯(lián)通服務(wù)器托管,高防主機(jī),成都IDC機(jī)房托管,成都主機(jī)托管等互聯(lián)網(wǎng)服務(wù)。
JSP內(nèi)置對象作用域
application:在所有應(yīng)用程序中有效,即只要這個網(wǎng)站運行著,這個作用域就有效,這個指的程序的運行過程。
session:在當(dāng)前會話中有效,即從瀏覽器訪問服務(wù)器開始,這個指的是用戶的一個訪問過程,即這次會話的開始到結(jié)束
request:在當(dāng)前請求中有效,負(fù)責(zé)多個servlet之間的信息共享,即將信息放入到request中,在整個請求階段都是有效的,即用戶訪問的這個階段都可以獲取到這個數(shù)據(jù)
page:在當(dāng)前頁面有效,即在一個jsp頁面上是有效的。
首先要聲明一點,所謂"作用域"就是"信息共享的范圍",也就是說一個信息能夠在多大的范圍內(nèi)有效。
Web交互的最基本單位為HTTP請求。每個用戶從進(jìn)入網(wǎng)站到離開網(wǎng)站這段過程稱為一個HTTP會話,一個服務(wù)器的運行過程中會有多個用戶訪問,就是多個HTTP會話。作用域解釋如下。
application:服務(wù)器啟動到停止這段時間。
session:HTTP會話開始到結(jié)束這段時間。
request:HTTP請求開始到結(jié)束這段時間。
page:當(dāng)前頁面從打開到關(guān)閉這段時間。
1. application 作用域
application作用域就是服務(wù)器啟動到關(guān)閉的整段時間,在這個作用域內(nèi)設(shè)置的信息可以被所有應(yīng)用程序使用。application作用域上的信息傳遞是通過ServletContext實現(xiàn)的,它提供的主要方法如下所示:
Object getAttribute(String name):從application中獲取信息。
void setAttribute(String name, Object value):向application作用域中設(shè)置信息。
2. session作用域
session作用域比較容易理解,同一瀏覽器對服務(wù)器進(jìn)行多次訪問,在這多次訪問之間傳遞信息,就是session作用域的體現(xiàn)。session是通過HttpSession接口實現(xiàn)的,它提供的主要方法如下所示。
Object HttpSession.getAttribute(String name):從session中獲取信息。
void HttpSession.setAttribute(String name, Object value):向session中保存信息。
HttpSession HttpServletRequest.getSession():獲取當(dāng)前請求所在的session的對象。
session的開始時刻比較容易判斷,它從瀏覽器發(fā)出第一個HTTP請求即可認(rèn)為會話開始。但結(jié)束時刻就不好判斷了,因為瀏覽器關(guān)閉時并不會通知服務(wù)器,所以只能通過如下這種方法判斷:如果一定的時間內(nèi)客戶端沒有反應(yīng),則認(rèn)為會話結(jié)束。Tomcat的默認(rèn)值為120分鐘,但這個值也可以通過HttpSession的setMaxInactiveInterval(int interval)方法來設(shè)置,如果想主動讓會話結(jié)束,例如用戶單擊"注銷"按鈕的時候,可以使用 HttpSession 的 invalidate()方法,用于強(qiáng)制結(jié)束當(dāng)前session。
3. request作用域
一個HTTP請求的處理可能需要多個Servlet合作,而這幾個Servlet之間可以通過某種方式傳遞信息,但這個信息在請求結(jié)束后就無效了。
Servlet之間的信息共享是通過HttpServletRequest接口的兩個方法來實現(xiàn)的。
void setAttribute(String name, Object value):將對象value以name為名稱保存到request作用域中。
Object getAttribute(String name):從request作用域中取得指定名字的信息。
JSP中的doGet()、doPost()方法的第一個參數(shù)就是HttpServletRequest對象,使用這個對象的 setAttribute()方法即可傳遞信息。
那么在設(shè)置好信息之后,要通過何種方式將信息傳給其他的Servlet呢?這就要用到RequestDispatcher接口的forward()方法,通過它將請求轉(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中先通過setAttribute()方法設(shè)置相應(yīng)的屬性,然后使用forward()方法進(jìn)行跳轉(zhuǎn),最后在跳轉(zhuǎn)到的Servlet中通過使用getAttribute()方法即可實現(xiàn)信息傳遞。
PHP的程序員可能不太好理解這一段,因為PHP中沒有轉(zhuǎn)發(fā)的概念,一個請求只能由一個PHP文件來處理,所以PHP中根本沒有request作用域的概念。而Servlet則不同,請求可以在應(yīng)用程序中任意轉(zhuǎn)發(fā),所以用request作用域在不同Servlet之間傳遞信息。
注意兩點:
轉(zhuǎn)發(fā)不是重定向,轉(zhuǎn)發(fā)是在Web應(yīng)用內(nèi)部進(jìn)行的。PHP支持重定向但沒有轉(zhuǎn)發(fā)。
轉(zhuǎn)發(fā)對瀏覽器是透明的,也就是說,無論在服務(wù)器上如何轉(zhuǎn)發(fā),瀏覽器地址欄中顯示的仍然是最初那個Servlet的地址。重定向的瀏覽器地址是變化的。
4. page作用域
page對象的作用范圍僅限于用戶請求的當(dāng)前頁面,對于page對象的引用將在響應(yīng)返回給客戶端之后被釋放,或者在請求被轉(zhuǎn)發(fā)到其他地方后被釋放。對page對象的引用通常存儲在pageContext對象中。
以上介紹的作用范圍越來越小,request和page的生命周期都是短暫的,它們之間的區(qū)別:一個request可以包含多個page頁(include,forward及filter)。
看完上訴內(nèi)容,你們對jsp四大作用域大概了解了嗎?如果想了解更多相關(guān)文章內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!
分享標(biāo)題:jsp四大作用域是哪幾個?
標(biāo)題URL:http://chinadenli.net/article40/jpscho.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、網(wǎng)站內(nèi)鏈、網(wǎng)站策劃、響應(yīng)式網(wǎng)站、、Google
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)