教育行業(yè)A股IPO第一股(股票代碼 003032)

全國(guó)咨詢(xún)/投訴熱線(xiàn):400-618-4000

JAVA培訓(xùn)之pageContext對(duì)象

更新時(shí)間:2016年09月21日18時(shí)02分 來(lái)源:傳智播客JAVA培訓(xùn)學(xué)院 瀏覽次數(shù):

1.JSP九大內(nèi)置對(duì)象

jsp的九大內(nèi)置對(duì)象如下所示:
  • out:該內(nèi)置對(duì)象的類(lèi)型是JspWriter,等同與response.getWriter(),用來(lái)向客戶(hù)端發(fā)送文本數(shù)據(jù);
  • config:該內(nèi)置對(duì)象的類(lèi)型是ServletConfig,對(duì)應(yīng)jsp翻譯成的java文件中的ServletConfig對(duì)象;
  • page:該內(nèi)置對(duì)象的類(lèi)型是Object,在jsp對(duì)應(yīng)的java文件中有這樣一句代碼:Object page=this,即表示該內(nèi)置對(duì)象代表當(dāng)前對(duì)象;
  • pageContext:該內(nèi)置對(duì)象的類(lèi)型是PageContext,是頁(yè)面上下文對(duì)象,它是最后一個(gè)沒(méi)講的域?qū)ο?后面我們會(huì)詳細(xì)講解;
  • exception:該內(nèi)置對(duì)象的類(lèi)型是Throwable,只有在錯(cuò)誤頁(yè)面中可以使用這個(gè)對(duì)象;
  • request:該內(nèi)置對(duì)象的類(lèi)型是HttpServletRequest,代表請(qǐng)求對(duì)象,并且是一個(gè)域?qū)ο螅?/li>
  • response:該內(nèi)置對(duì)象的類(lèi)型是HttpServletResponse,代表響應(yīng)對(duì)象;
  • application:該內(nèi)置對(duì)象的類(lèi)型是ServletContext,一個(gè)應(yīng)用只有一個(gè)application,也是一個(gè)域?qū)ο?,域范圍是整個(gè)應(yīng)用;
  • session:該內(nèi)置對(duì)象的類(lèi)型是HttpSession,也是一個(gè)域?qū)ο螅遣皇敲總€(gè)JSP頁(yè)面中都可以使用,如果在某個(gè)JSP頁(yè)面中設(shè)置<%@page session=”false”%>,說(shuō)明這個(gè)頁(yè)面不能使用session。
這九個(gè)內(nèi)置對(duì)象中config、page以及exception很少使用,我們知道jsp本身也是一個(gè)Servlet,config對(duì)象中包含的是servlet的配置信息,而我們并沒(méi)有在web.xml中對(duì)jsp進(jìn)行配置,所以config對(duì)象就沒(méi)有什么用處。其他的內(nèi)置對(duì)象在之前的課程中都已經(jīng)講過(guò)了,大家可以參考以前的文檔。

2.pageContext對(duì)象

pageContext對(duì)象是頁(yè)面上下文對(duì)象,一個(gè)頁(yè)面就對(duì)應(yīng)一個(gè)pageContext對(duì)象。我們知道Servlet有三大域?qū)ο螅鴍sp有四個(gè)域?qū)ο?,分別是:
  • ServletContext:域范圍是整個(gè)應(yīng)用;
  • session:域范圍是整個(gè)會(huì)話(huà),注意一個(gè)會(huì)話(huà)中只有一個(gè)用戶(hù),如果要統(tǒng)計(jì)站點(diǎn)的訪(fǎng)問(wèn)次數(shù),使用的域是ServletContext,因?yàn)檫@個(gè)時(shí)候統(tǒng)計(jì)的是多個(gè)用戶(hù),而非一個(gè)用戶(hù);
  • request:域范圍是整個(gè)請(qǐng)求鏈;
  • pageContext:域范圍是一個(gè)jsp頁(yè)面,在一個(gè)頁(yè)面中存數(shù)據(jù)再取數(shù)據(jù)沒(méi)有任何意義,所以這里所說(shuō)的域指的是在當(dāng)前jsp頁(yè)面和當(dāng)前jsp頁(yè)面中使用的標(biāo)簽之間共享數(shù)據(jù)。
2.1pageContext對(duì)象的功能
pageContext對(duì)象有如下四個(gè)功能:
  • 域?qū)ο蠊δ?/li>
  • 代理其他域功能
  • 全域查找功能
  • 獲取其他8個(gè)內(nèi)置對(duì)象功能
(1)我們首先來(lái)了解pageContext對(duì)象的域功能:
  • void setAttribute(String name,Object value)
  • Object getAttribute(String name);
  • Void removeAttribute(String name);
(2)代理其他域,所謂代理其他域是指,可以利用pageContext對(duì)象向request、session、application域中存取數(shù)據(jù)。現(xiàn)在我們查看API文檔,看一看pageContext對(duì)象是如何代理其他域?qū)ο螅鐖D1-1所示:

圖1-1 pageContext
由圖1-1可知,PageContext類(lèi)繼承了JspContext類(lèi),在其父類(lèi)中定義了一些與域功能相關(guān)的方法,可以發(fā)現(xiàn),除了在域功能中介紹的那三個(gè)方法,還有另外三個(gè)方法,如下所示:
  • Object getAttribute(String name, int scope):
該方法的第一個(gè)參數(shù)是域?qū)傩缘拿Q(chēng),第二個(gè)參數(shù)指定是從那個(gè)域中取出域?qū)傩?;在PageContext中已經(jīng)定義了如下幾個(gè)靜態(tài)常量作為scope的可選值:
  • int APPLICATION_SCOPE:當(dāng)參數(shù)為這個(gè)常量時(shí),表示從application域中獲取數(shù)據(jù);
  • int PAGE_SCOPE:當(dāng)參數(shù)是這個(gè)常量時(shí),表示從page域中獲取數(shù)據(jù);
  • int REQUEST_SCOPE:當(dāng)參數(shù)是這個(gè)常量時(shí),表示從request域中獲取數(shù)據(jù);
  • int SESSION-SCOPE:當(dāng)參數(shù)是這個(gè)常量時(shí),表示從session域中獲取數(shù)據(jù)。
  • void setAttribute(String name,Object value,int scope):
該方法的第一個(gè)參數(shù)指的是域?qū)傩缘拿Q(chēng),第二參數(shù)指的是域?qū)傩缘闹担谌齻€(gè)參數(shù)指定域?qū)傩员4娴挠?,scope的取值同上;
  • void removeAttribute(String name,int scope):
該方法的第一個(gè)參數(shù)指的是域?qū)傩缘拿Q(chēng),第二個(gè)參數(shù)指的是將指定域?qū)傩詮哪膫€(gè)域中移出,scope的取值同上;
有了以上三個(gè)方法,pageContext對(duì)象就可以代理其他三個(gè)域?qū)ο罅?,例如?br /> pageContext.setAttribute(“name”,”zhangsan”,PageContext.SESSION_SCOPE).
(3)獲取其他8個(gè)內(nèi)置對(duì)象,也就是說(shuō)可以通過(guò)pageContext對(duì)象獲取jsp中其他的內(nèi)置對(duì)象。pageContext是如何獲取的呢?我們來(lái)看一下幫助文檔,如圖1-2所示:

圖1-2 幫助文檔
圖1-2中,PageContext類(lèi)中定義了如下八個(gè)方法:
getPage()、getRequest()、getResponse()、getServletConfig()、getServletContext()、getException()、getSession()等方法,其中g(shù)etOut()放是在其父類(lèi)中定義的,有了這些方法,pageContext對(duì)象自然能夠獲取其他八個(gè)內(nèi)置對(duì)象了。
(4)全域查找功能,在PageContext類(lèi)的父類(lèi)中定義了如下方法:
  • Object findAttribute(String name):該方法是從jsp的四個(gè)域page、request、session、application依次查找指定名稱(chēng)的域?qū)傩?,如果找到就停止,這說(shuō)明如果這四個(gè)域中存在同名的屬性,那么返回的數(shù)據(jù)是從page范圍中獲取的。即表示誰(shuí)的域范圍越小,誰(shuí)的優(yōu)先級(jí)越高。
注意:這里說(shuō)的page范圍和九大內(nèi)置對(duì)象中的page對(duì)象不是一個(gè)意思,page范圍可以理解為是pageContext對(duì)象的域范圍,即一個(gè)jsp頁(yè)面。

本文版權(quán)歸傳智播客Java培訓(xùn)學(xué)院所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)注明作者出處。謝謝!
作者:傳智播客Java培訓(xùn)學(xué)院
首發(fā):http://fskzgqt.cn/javaee
0 分享到:
和我們?cè)诰€(xiàn)交談!