pageContext对象

本文介绍如何利用PageContext对象在JSP中管理不同作用域的变量,包括page、request、session及application范围,并通过示例代码展示了如何设置与获取这些变量。

 

使用pageContext可以访问page、request、session、application范围的变量。
pageContext是PageContext类的实例,它提供了如下两个方法来访问page、request、session、application范围的变量。
	getAttribute(String name):取得page范围内的name属性。
	getAttribute(String name,int scope):取得指定范围内的name属性,其中scope可以是如下4个值:
	PageContext.PAGE_SCOPE:对应于page范围。
	PageContext.REQUEST_SCOPE:对应于request范围。
	PageContext.SESSION_SCOPE:对应于session范围。
	PageContext.APPLICATION_SCOPE:对应于application范围。
与getAttribute()方法相对应,PageContext也提供了2个对应的setAttribute()方法,用于将指定变量放入page、request、session、application范围内。
下面的JSP页面示范了使用pageContext来操作page、request、session、application范围内的变量。
程序清单:codes\02\2.9\jspObject\pageContextTest.jsp
<%@ page contentType="text/html; charset=gb2312" language="java" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE>pageContext测试</TITLE>
</HEAD>
<BODY>
<%
//使用pageContext设置属性,该属性默认在page范围内
pageContext.setAttribute("page","hello");
//使用request设置属性,该属性默认在request范围内
request.setAttribute("request","hello");
//使用pageContext将属性设置在request范围中
pageContext.setAttribute("request2","hello" 
, pageContext.REQUEST_SCOPE);
//使用session将属性设置在session范围中
session.setAttribute("session","hello");
//使用pageContext将属性设置在session范围中
pageContext.setAttribute("session2","hello" 
, pageContext.SESSION_SCOPE);
//使用application将属性设置在application范围中
application.setAttribute("app","hello");
//使用pageContext将属性设置在application范围中
pageContext.setAttribute("app2","hello" 
, pageContext.APPLICATION_SCOPE);
//下面获取各属性所在的范围:
out.println("page变量所在范围:" + 
pageContext.getAttributesScope("page") + "<br>");
out.println("request变量所在范围:" +
pageContext.getAttributesScope("request") + "<br>");
out.println("request2变量所在范围:"+
pageContext.getAttributesScope("request2") + "<br>");
out.println("session变量所在范围:" +
pageContext.getAttributesScope("session") + "<br>");
out.println("session2变量所在范围:" +
pageContext.getAttributesScope("session2") + "<br>");
out.println("app变量所在范围:" +
pageContext.getAttributesScope("app") + "<br>");
out.println("app2变量所在范围:" + 
pageContext.getAttributesScope("app2") + "<br>");
%>
</BODY>
</HTML>
上面页面的粗体字代码使用pageContext将各变量分别放入page、request、session、application范围内,程序的斜体字代码还使用pageContext获取各变量所在的范围。
 

 

### PageContext对象JSP中的作用和功能 PageContext对象是`javax.servlet.jsp.PageContext`类的实例对象,代表整个JSP页面[^1]。它作为页面上下文,主要用于访问和管理JSP页面中不同范围内的共享数据,例如`page`、`request`、`session`和`application`范围的变量[^2]。 以下是PageContext对象的主要作用和功能: #### 1. 管理范围变量 PageContext对象可以用于设置、获取和删除不同范围(`page`、`request`、`session`、`application`)内的属性。通过`setAttribute`方法可以设置属性,通过`getAttribute`方法可以获取属性,而`removeAttribute`方法则可以删除属性[^3]。 ```java // 设置一个request范围的属性 pageContext.setAttribute("name", "John", PageContext.REQUEST_SCOPE); // 获取一个request范围的属性 String name = (String) pageContext.getAttribute("name", PageContext.REQUEST_SCOPE); // 删除一个request范围的属性 pageContext.removeAttribute("name", PageContext.REQUEST_SCOPE); ``` #### 2. 提供对其他隐式对象的访问 PageContext对象提供了一种统一的方式来访问其他8个JSP隐式对象(如`out`、`request`、`response`等)。通过调用`getPage()`、`getRequest()`、`getResponse()`等方法,可以直接获取这些对象的引用[^4]。 ```java // 获取request对象 HttpServletRequest request = (HttpServletRequest) pageContext.getRequest(); // 获取response对象 HttpServletResponse response = (HttpServletResponse) pageContext.getResponse(); ``` #### 3. 管理输出流 PageContext对象可以通过`getOut()`方法获取`JspWriter`对象,从而实现向客户端输出内容。 ```java // 使用PageContext对象获取JspWriter并输出内容 JspWriter out = pageContext.getOut(); out.println("Hello, World!"); ``` #### 4. 处理异常 在错误页面中,PageContext对象可以用来处理异常信息。通过`getPage()`方法可以获取当前页面的实例,结合`exception`对象可以捕获并处理异常。 ```java <%@ page isErrorPage="true" %> <% Throwable exception = pageContext.getException(); out.println("Error: " + exception.getMessage()); %> ``` #### 5. 访问Servlet配置和上下文 PageContext对象提供了访问`ServletConfig`和`ServletContext`的方法,分别通过`getServletConfig()`和`getServletContext()`方法实现[^4]。 ```java // 获取ServletConfig对象 ServletConfig config = pageContext.getServletConfig(); // 获取ServletContext对象 ServletContext application = pageContext.getServletContext(); ``` ### 总结 PageContext对象JSP页面的核心组件之一,提供了对页面上下文的全面控制能力。它不仅能够管理不同范围的属性,还可以方便地访问其他隐式对象,简化了Web应用程序的开发过程[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值