pageContext对象
为了获取JSP页面的隐式对象,可以使用EL表达式中的pageContext隐式对象。pageContext隐式对象的示例代码如下:
${pageContext.response.characterEncoding}
在上述示例中,pageContext对象用于获取response对象中的characterEncoding属性。接下来,通过一个案例来演示pageContext隐式对象的具体用法,如例1所示。
例1 pageContext.jsp
1 <%@ page language="java" contentType="text/html; charset=utf-8"
2 pageEncoding="utf-8"%>
3 <html>
4 <head></head>
5 <body>
6 请求URI为:${pageContext.request.requestURI} <br>
7 Content-Type响应头:${pageContext.response.contentType} <br>
8 服务器信息为:${pageContext.servletContext.serverInfo} <br>
9 Servlet注册名为:${pageContext.servletConfig.servletName} <br>
10 </body>
11 </html>
启动Tomcat服务器,在地址栏中输入http://localhost:8080/chapter07/pageContext.jsp
访问pageContext.jsp页面,此时,浏览器窗口中显示的结果如图1所示。
图1 pageContext.jsp
从图1可以看出,使用EL表达式中的pageContext对象成功的获取到了request、response、servletContext和servletConfig对象中的属性。需要注意的是,不要将EL表达式中的隐式对象与JSP中的隐式对象混淆,只有pageContext对象是它们所共有的,其它隐式对象则毫不相关。
脚下留心:
如果某个对象存储的属性名与EL隐式对象的名称相同,那么,通过EL表达式获取对象的属性是无法实现的。接下来通过一个案例来验证这种情况,首先在chapter07工程中的WebContent根目录中编写一个implicit.jsp文件,在该文件的session域对象中存储一个名的pageContext属性,如例2所示。
例2 implicit.jsp
1 <%@ page language="java" contentType="text/html; charset=utf-8"
2 pageEncoding="utf-8"%>
3 <html>
4 <head></head>
5 <body>
6 <% session.setAttribute("pageContext", "itcast"); %>
7 输出表达式\${pageContext}的值:<br>
8 ${pageContext}
9 </body>
10 </html>
打开IE浏览器,在地址栏中输入http://localhost:8080/chapter07/implicit.jsp
访问implicit.jsp页面,此时,浏览器窗口中显示的结果如图2所示。
图2 implicit.jsp
从图2可以看出,浏览器窗口中输出表达式${pageContext}的值并不是itcast,而是一个对象,这个对象就是EL中的pageContext隐式对象。因此,可以说明如果域对象中定义的属性名称与EL隐式对象相同时,使用EL表达式不能获取域对象中的属性,只能获取到一个隐式对象。