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

全國咨詢/投訴熱線:400-618-4000

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

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

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

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

2.pageContext對象

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

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

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

本文版權(quán)歸傳智播客Java培訓(xùn)學院所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請注明作者出處。謝謝!
作者:傳智播客Java培訓(xùn)學院
首發(fā):http://metathetuscanyresort.com/javaee
0 分享到:
和我們在線交談!