学科分类
目录
Java Web

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对象具有存储数据的功能。

点击此处
隐藏目录