- JSP應(yīng)用與開發(fā)技術(shù)(第3版)
- 馬建紅 李學(xué)相 韓穎 王瑞娟 張晗
- 1478字
- 2020-06-30 17:13:26
4.7 其他JSP內(nèi)置對(duì)象
除了以上介紹的5種常見的內(nèi)置對(duì)象外,也經(jīng)常使用其他內(nèi)置對(duì)象,本節(jié)分別介紹它們的方法和應(yīng)用。
4.7.1 pageContext對(duì)象
pageContext對(duì)象衍生于javax.servlet.jsp.PageContext類,該對(duì)象可以得到當(dāng)前頁面中所有其他的JSP隱含對(duì)象,如getRequest()、getResponse()、getOut()和getSesison()等,并提供了處理JSP各個(gè)對(duì)象與屬性的方法。
pageContext對(duì)象用于訪問頁面有效屬性的方法及對(duì)應(yīng)的說明,如表4-8所示。
表4-8 pageContext對(duì)象訪問頁面內(nèi)有效屬性的方法

pageContext對(duì)象訪問所有范圍的屬性操作與上面的方法類似,只是多了一個(gè)輸入?yún)?shù),例如設(shè)置變量值可以用setAttribute(String name, Object obj, int scope),其中,scope取值可以為PAGE_SCOPE、REQUEST_SCOPE、SESSION_SCOPE和APPLICATION_SCOPE,分別代表頁內(nèi)有效、請(qǐng)求有效、會(huì)話有效和應(yīng)用有效。pageContext對(duì)象還可以實(shí)現(xiàn)頁面重定向和包含頁面等功能。
【例4-18】創(chuàng)建pagecontext1.jsp和pagecontex2.jsp頁面,驗(yàn)證屬性的作用域。
pagecontext1.jsp的代碼如下:

在瀏覽器中輸入http://localhost:8080/ch04//other/pagecontext1.jsp?name=test向pagecontext1.jsp傳遞參數(shù),運(yùn)行結(jié)果如圖4-36所示。

圖4-36 pagecontext1.jsp的運(yùn)行結(jié)果
pagecontex2.jsp的代碼如下:

通過超級(jí)鏈接跳轉(zhuǎn)到pagecontext2.jsp查看顯示結(jié)果,如圖4-37所示。

圖4-37 跳轉(zhuǎn)到pagecontext2.jsp的運(yùn)行結(jié)果
通過比較圖4-36和圖4-37,可以看出各屬性的作用域。關(guān)閉瀏覽器,直接打開pagecontext2.jsp,結(jié)果會(huì)看到如圖4-38所示。

圖4-38 直接運(yùn)行pagecontext2.jsp的結(jié)果
由此得出如下結(jié)論:
pageContext.setAtrribute("useName",name)設(shè)置的屬性在當(dāng)前頁面有效。
pageContext.getSession().setAtrribute("session Value",name)設(shè)置的屬性在session中有效。
pageContext.getServletContext().setAttribute("sharevalue",name)設(shè)置的屬性是對(duì)所有頁面共享的。
4.7.2 config對(duì)象
config對(duì)象是類javax.servlet.ServletConfig的一個(gè)對(duì)象,它標(biāo)識(shí)Servlet的配置。config對(duì)象主要用來取得服務(wù)器的配置信息,在JSP頁面通過JSP Container進(jìn)行初始化時(shí)被傳遞。使用config對(duì)象,在修改需要在Web服務(wù)器中處理的變量時(shí),不需要逐一修改JSP文件,而只需修改相應(yīng)屬性文件的內(nèi)容,這樣就大大簡化了網(wǎng)絡(luò)維護(hù)工作,而且能夠避免由于忘記修改一些文件而造成的錯(cuò)誤。config對(duì)象的常用方法及對(duì)應(yīng)的說明如表4-9所示。
表4-9 config對(duì)象的常用方法及說明

【例4-19】創(chuàng)建config.jsp頁面,利用config對(duì)象的方法,使用Servlet配置的初始值。
前面【例4-16】所示的計(jì)數(shù)器有一個(gè)缺陷,就是每當(dāng)應(yīng)用服務(wù)器關(guān)閉后再啟動(dòng)時(shí),計(jì)數(shù)器就會(huì)從0開始重新計(jì)數(shù)。解決這個(gè)問題的辦法就是在應(yīng)用服務(wù)器死機(jī)后設(shè)置計(jì)數(shù)的初始值。
config.jsp的代碼如下:

在config.jsp中利用config.getInitParameter("counter")方法獲取Web服務(wù)器上初始參數(shù)counter的值。通過web.xml文件設(shè)置初始參數(shù)。
web.xml的代碼如下:

從上面的配置可以看出,counter的初始值是1000,并且為config.jsp做了一個(gè)映射。運(yùn)行這個(gè)JSP頁面,在瀏覽器中輸入http://localhost:8080/ch04/other/config_counter,結(jié)果如圖4-39所示。

圖4-39 config.jsp運(yùn)行及刷新后的結(jié)果
注意
這里必須輸入http://localhost:8080/ch04/other/config_counter。如果在瀏覽器里使用http://localhost:8080/ch04/other/config.jsp來訪問,那么不能得到counter的參數(shù)。原因是當(dāng)通過前一種方式訪問config.jsp時(shí),它是作為一個(gè)Servlet組件來運(yùn)行的,而后者不一樣。有關(guān)Servlet的內(nèi)容請(qǐng)參考第10章。
【例4-20】利用config對(duì)象的方法,使用Servlet配置的多個(gè)初始值。
homepage.jsp的代碼如下:

通過web.xml文件設(shè)置初始參數(shù),增加如下代碼:

從上面的配置可以看出,email、phone、qq的初始值是分別是service@zzu.edu.cn、0371-63888069、12345,并且為homepage.jsp做了一個(gè)映射。運(yùn)行這個(gè)JSP頁面,在瀏覽器中輸入http://localhost:8080/ch04/homepage.jsp,結(jié)果如圖4-40所示。

圖4-40 homepage.jsp運(yùn)行的結(jié)果
4.7.3 page對(duì)象
page對(duì)象代表了正在運(yùn)行的由JSP文件產(chǎn)生的類對(duì)象,此對(duì)象在JSP中并不常用,用戶只需了解其意義即可。
page對(duì)象是指向當(dāng)前JSP程序本身的對(duì)象,有點(diǎn)像類中的this。page對(duì)象其實(shí)是java.lang.Object類的實(shí)例對(duì)象,它可以使用Object類的方法,如hashCode()、toString()等方法。page對(duì)象在JSP程序中的應(yīng)用不是很廣泛,但是java.lang.Object類還是十分重要的,因?yàn)镴SP內(nèi)置對(duì)象的很多方法的返回類型是Object,需要用到Object類的方法,讀者可以參考相關(guān)的文檔,這里就不詳細(xì)介紹。
4.7.4 exception對(duì)象
exception對(duì)象是類java.lang.Throwable的一個(gè)對(duì)象,是為JSP提供用于處理程序運(yùn)行錯(cuò)誤的異常對(duì)象,可以配合page指令一起使用。參考【例3-10】,通過指定某一個(gè)頁面為錯(cuò)誤處理頁面,把所有的錯(cuò)誤都集中到那個(gè)頁面進(jìn)行處理,可以使整個(gè)系統(tǒng)的健壯性得到加強(qiáng),也可以使程序的流程更加簡單明晰。exception對(duì)象的常用方法及對(duì)應(yīng)的說明如表4-10所示。
表4-10 exception對(duì)象的常用方法及說明

注意
必須在isErrorPage="true"的情況下才可以使用exception對(duì)象。
- Java逍遙游記
- FreeSWITCH 1.8
- Mastering Python Scripting for System Administrators
- SQL Server從入門到精通(第3版)
- 青少年信息學(xué)競(jìng)賽
- Tableau 10 Bootcamp
- Android移動(dòng)開發(fā)案例教程:基于Android Studio開發(fā)環(huán)境
- Vue.js光速入門及企業(yè)項(xiàng)目開發(fā)實(shí)戰(zhàn)
- C語言程序設(shè)計(jì)
- 分布式數(shù)據(jù)庫HBase案例教程
- Go Systems Programming
- Learn Linux Quickly
- Spring Boot 3:入門與應(yīng)用實(shí)戰(zhàn)
- 讀故事學(xué)編程:Python王國歷險(xiǎn)記
- Splunk Developer's Guide(Second Edition)