2.6.5 pageContext对象

2.6.5 pageContext对象

这个对象代表页面上下文,该对象主要用于访问JSP之间的共享数据。使用pageContext可以访问agerequestsessionapplication范围的变量。

getAttribute setAttribute方法

pageContextPageContext类的实例,它提供了如下两个方法来访问pagerequestsessionapplication范围的变量。

  • 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也提供了两个对应的setAttribute()方法,用于将指定变量放入pagerequestsessionapplication范围内。

pageContextTest.jsp

下面的JSP页面示范了使用pageContext来操作pagerequestsessionapplication范围内的变量。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<%@ page contentType="text/html; charset=UTF-8" language="java" errorPage="" %>
<!DOCTYPE html>
<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将各变量分别放入pagerequestsessionapplication范围内,然后使用pageContext获取各变量所在的范围。

测试

浏览以上页面,可以看到如图2.23所示的效果。

page变量所在范围:1
request变量所在范围:2
request2变量所在范围:2
session变量所在范围:3
session2变量所在范围:3
app变量所在范围:4
app2变量所在范围:4

getAttributesScope方法

图2.23中显示了使用pageContext获取各属性所在的范围,其中这些范围获取的都是整型变量,这些整型变量分别对应如下4个生存范围。

整形变量值 对应生存范围
1 对应page生存范围
2 对应request生存范围。
3 对应session生存范围。
4 对应application生存范围。

pageContext对象获取其他内置对象的方法

不仅如此,pageContext还可用于获取其他内置对象,pageContext对象包含如下方法。

pageContext对象获取其他内置对象的方法 描述
ServletRequest getRequest() 获取request对象。
ServletResponse getResponse() 获取response对象。
ServletConfig getServletConfig() 获取config对象。
ServletContext getServletContext() 获取application对象。
HttpSession getSession() 获取session对象