序號 |
對象 |
類型 |
1 |
pageContext |
javax.servlet.jsp.PageContext |
2 |
request |
javax.servlet.http.HttpServletRequest |
3 |
response |
javax.servlet.http.HttpServletResponse |
4 |
session |
javax.servlet.http.HttpSession |
5 |
application |
javax.servlet.ServletContext |
6 |
config |
javax.servlet.ServletConfig |
7 |
out |
javax.servlet.jsp.jspWriter |
8 |
page |
Java.lang.Object |
9 |
exception |
java.lang.Throwable |
四種范圍介紹:在jsp頁面中的對象,包括用戶創(chuàng)建的對象(例如,javaBean對象)和JSP的隱含對象,都有一個范圍屬性。范圍定義了在什么時間內(nèi),在哪一個JSP頁面中可以訪問這些對象。例如,session對象在會話期間內(nèi),可以在多個頁面中被訪問。application對象在整個Web應(yīng)用程序的生命周期中都可以被訪問。
1,page范圍
具有page范圍的對象被綁定到j(luò)avax.servlet.jsp.PageContext對象中。在這個范圍內(nèi)的對象,只能在創(chuàng)建對象的頁面中訪問。 可以調(diào)用pageContext這個隱含對象的getAttribute()方法來訪問具有這種范圍類型的對象(pageContext對象還提供了訪問 其他范圍對象的getAttribute方法),pageContext對象本身也屬于page范圍。當(dāng)Servlet類的_jspService()方 法執(zhí)行完畢,屬于page范圍的對象的引用將被丟棄。page范圍內(nèi)的對象,在客戶端每次請求JSP頁面時創(chuàng)建,在頁面向客戶端發(fā)送回響應(yīng)或請求被轉(zhuǎn)發(fā) (forward)到其他的資源后被刪除。
例如:
body> %pageContext.setAttribute("page", "這是pageContext測試"); %> %=pageContext.getAttribute("page") %> jsp:forward page="two.jsp">/jsp:forward> /body>
在two.jsp接收頁面的代碼是:
%=pageContext.getAttribute("page") %>
運行之后,結(jié)果顯示null,這證明了page的范圍只局限于當(dāng)前頁面,無論從服務(wù)端還是客戶端跳轉(zhuǎn),都不會傳遞數(shù)據(jù)到另一個界面。
2,request范圍
具有request范圍的對象被綁定到j(luò)avax.servlet.ServletRequest對象中,可以調(diào)用request這個隱含對象的 getAttribute()方法來訪問具有這種范圍類型的對象。在調(diào)用forward()方法轉(zhuǎn)向的頁面或者調(diào)用include()方法包含的頁面中, 都可以訪問這個范圍內(nèi)的對象。要注意的是,因為請求對象對于每一個客戶請求都是不同的,所以對于每一個新的請求,都要重新創(chuàng)建和刪除這個范圍內(nèi)的對象。 即request在經(jīng)過服務(wù)器的跳轉(zhuǎn)后,甚至服務(wù)器的多次跳轉(zhuǎn),我們都可以獲取他設(shè)置的屬性值,但是客戶端跳轉(zhuǎn)就不可以獲取他的值了,舉例說明:
% request.setAttribute("name", "明明"); %> jsp:forward page="two.jsp">/jsp:forward>
在two.jsp接收頁面的代碼是:
%=request.getAttribute("name") %>
運行代碼之后,在two.jsp頁面獲取到了明明,這是服務(wù)端的跳轉(zhuǎn),那客戶端的跳轉(zhuǎn)呢?
將jsp:forward page="two.jsp">/jsp:forward>
去掉加入a href="two.jsp" rel="external nofollow" rel="external nofollow" rel="external nofollow" >跳轉(zhuǎn)/a> 代碼,點擊跳轉(zhuǎn)后,獲取內(nèi)容為null。
3,session范圍
具有session范圍的對象被綁定到j(luò)avax.servlet.http.HttpSession對象中,可以調(diào)用session這個隱含對象的 getAttribute()方法來訪問具有這種范圍類型的對象。JSP容器為每一次會話,創(chuàng)建一個HttpSession對象,在會話期間,可以訪問 session范圍內(nèi)的對象。 即無論客戶端還是服務(wù)端跳轉(zhuǎn),都可以獲取他的數(shù)據(jù),只要瀏覽器不重啟,這也是我們實際開發(fā)中用到最多的。
舉例:
%session.setAttribute("name", "這是session測試"); %> a href="two.jsp" rel="external nofollow" rel="external nofollow" rel="external nofollow" >跳轉(zhuǎn)/a> %session.setAttribute("name", "這是session測試"); %> jsp:forward page="two.jsp">/jsp:forward>
在two.jsp接收頁面的代碼是:
%=session.getAttribute("name") %>
我們可以發(fā)現(xiàn),無論客戶端還是服務(wù)端跳轉(zhuǎn),設(shè)置的數(shù)據(jù)都可以在其他頁面接收。
4,application范圍
具有application范圍的對象被綁定到j(luò)avax.servlet.ServletContext中,可以調(diào)用application這個隱含對 象的getAttribute()方法來訪問具有這種范圍類型的對象。在Web應(yīng)用程序運行期間,所有的頁面都可以訪問在這個范圍內(nèi)的對象。這個也就是說,只要設(shè)置了屬性,即使重新啟動瀏覽器,都還可以獲取屬性值,除非重啟服務(wù)器。這一范圍不做舉例。
對上述四中屬性范圍,實際開發(fā)中遇到最多的是request和session。一般來說,只對于同一個功能的屬性的傳遞,使用request范圍屬性。那么對于session范圍來說,主要還是用于登陸上面。
上面四種屬性范圍,實際上四種屬性范圍都是通過pageContext設(shè)置的。在pageContext中,setAttribute()方式實際上被重載過:
1,public abstract void setAttribute(java.lang.String name, java.lang.Object value), 2,public abstract void setAttribute(java.lang.String name,java.lang.Object value,int scope)
第二種方法相比第一個方法多了一個參數(shù)(int scope),實際上這個參數(shù)就是指定屬性范圍的參數(shù)。
1,APPLICATION_SCOPE,2,PAGE_SCOPE,3,SESSION_SCOPE,4,REQUEST_SCOPE
也就是說,通過這個方法,我們可以設(shè)置四種屬性范圍,這也就是說,我們可以使用pageContext來完成上面四種屬性的范圍設(shè)定。
例如,我們用session時可以這樣寫:
%@page contentType="text/html; charset=utf-8"%> % pageContext.setAttribute("name","熊九天",PageContext.SESSION_SCOPE); %> a href="two.jsp" rel="external nofollow" rel="external nofollow" rel="external nofollow" >跳轉(zhuǎn)/a>
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
標(biāo)簽:貸款邀約 廣州 內(nèi)江 黃石 樂山 大連 南京 銅川
巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《JSP中九大內(nèi)置對象和四種屬性范圍詳解》,本文關(guān)鍵詞 JSP,中,九大,內(nèi)置,對象,和,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。