pageContext对象
在JSP页面中,要想获取JSP的八个隐式对象,可以使用pageContext对象。pageContext对象是javax.servlet.jsp.PageContext类的实例对象,它代表当前JSP页面的运行环境,并提供了一系列用于获取其他隐式对象的方法。pageContext对象获取隐式对象的方法如表1所示。
表1 pageContext获取隐式对象的方法
方法名 | 功能描述 |
---|---|
JspWriter getOut() | 用于获取out隐式对象 |
Object getPage() | 用于获取page隐式对象 |
ServletRequest getRequest() | 用于获取request隐式对象 |
ServletResponse getResponse() | 用于获取response隐式对象 |
HttpSession getSession() | 用于获取session隐式对象 |
Exception getException() | 用于获取exception隐式对象 |
ServletConfig getServletConfig() | 用于获取config隐式对象 |
ServletContext getServletContext() | 用于获取application隐式对象 |
表1中列举了pageContext获取其它隐式对象的方法,这样,当我们传递一个pageContext对象后,就可以通过这些方法轻松地获取到其它八个隐式对象了。
接下来,通过一个案例来演示如何使用pageContext获取request对象,如例1所示。
例1 pageContext.jsp
1 <%@ page language="java" contentType="text/html; charset=UTF-8"%>
2 <html>
3 <head>
4 <title>Insert title here</title>
5 </head>
6 <body>
7 <%
8 HttpServletRequest req=(HttpServletRequest)pageContext.getRequest();
9 String ip = request.getRemoteAddr();
10 out.println("本机的IP地址为:"+ip);
11 %>
12 </body>
13 </html>
启动Tomcat服务器,在浏览器的地址栏中输入URL地址http:/``/localhost:8080/chapter07/pageContext.jsp访问pageContext.jsp页面,浏览器显示的结果如图1所示。
图1 运行结果
从图1中可以看出,浏览器显示出了当前请求的IP地址。说明通过pageContext对象可以获取到request对象。需要注意的是,虽然在JSP页面中可以直接使用隐式对象,但是通过pageContext对象获取其他隐式对象的功能也是必不可少的。例如,在后面标签的学习中,需要将Java代码从JSP页面移除,这时,JSP隐式对象也需要传递给Java类中定义的方法。通常情况下,为了方便,我们只传递一个pageContext对象,然后通过调用表7-3所示的方法来获取其他隐式对象。
pageContext对象不仅提供了获取隐式对象的方法,还提供了存储数据的功能。pageContext对象存储数据是通过操作属性来实现的,表1列举了pageContext操作属性的一系列方法,具体如下:
表1 pageContext操作属性的相关方法
方法名称 | 功能描述 |
---|---|
void setAttribute(String name,Object value,int scope) | 用于设置pageContext对象的属性 |
Object getAttribute(String name,int scope) | 用于获取pageContext对象的属性 |
void removeAttribute(String name,int scope) | 删除指定范围内名称为name的属性 |
void removeAttribute(String name) | 删除所有范围内名称为name的属性 |
Object findAttribute(String name) | 从四个域对象中查找名称为name的属性 |
表1列举了pageContext对象操作属性的相关方法,其中,参数name指定的是属性名称,参数scope指定的是属性的作用范围。pageContext对象的作用范围有四个值,具体如下:
● pageContext.PAGE_SCOPE:表示页面范围
● pageContext.REQUEST_SCOPE:表示请求范围
● pageContext.SESSION_SCOPE:表示会话范围
● pageContext.APPLICATION_SCOPE:表示Web应用程序范围
需要注意的是,当使用findAttribute()方法查找名称为name的属性时,会按照page、request、session和application的顺序依次进行查找,如果找到,则返回属性的名称,否则返回null。
接下来,通过一个案例来学习如何使用pageContext存储数据,如例2所示。
例2 pageContextDemo.jsp
1 <%@ page language="java" contentType="text/html; charset=UTF-8"%>
2 <html>
3 <head>
4 <title>Insert title here</title>
5 </head>
6 <body>
7 <%
8 pageContext.setAttribute("company", "北京传智播客教育有限公司",
9 pageContext.PAGE_SCOPE);
10 Object name = pageContext.getAttribute("company",pageContext.PAGE_SCOPE);
11 out.println("公司名称为:" + name);
12 %>
13 </body>
14 </html>
启动Tomcat服务器,在浏览器中输入URL地址http://localhost:8080/chapter07/pageContextDemo.jsp
访问pageContextDemo.jsp,浏览器显示的结果如图2所示。
图2 运行结果
从图2中可以看出,浏览器显示出了公司的名称。由此说明,pageContext对象具有存储数据的功能。