在JSP页面中的对象
包括用户创建的对象(例如
JavaBean对象)和JSP的隐含对象
都有一个范围属性
范围定义了在什么时间内
在哪一个JSP页面中可以访问这些对象
例如
session对象在会话期间内
可以在多个页面中被访问
application对象在整个Web应用程序的生命周期中都可以被访问
在JSP中
有
种范围
如下所示
·page范围
具有page范围的对象被绑定到javaxServletjspPageContext对象中在这个范围内的对象只能在创建对象的页面中访问可以调用pageContext这个隐含对象的getAttribute()方法来访问具有这种范围类型的对象(pageContext对象还提供了访问其他范围对象的getAttribute方法)pageContext对象本身也属于page范围当Servlet类的_jspService()方法执行完毕属于page范围的对象的引用将被丢弃page范围内的对象在客户端每次请求JSP页面时创建在页面向客户端发送回响应或请求被转发(forward)到其他的资源后被删除
·request范围
具有request范围的对象被绑定到javaxservletServletRequest对象中可以调用request这个隐含对象的getAttribute()方法来访问具有这种范围类型的对象在调用forward()方法转向的页面或者调用include()方法包含的页面中都可以访问这个范围内的对象要注意的是因为请求对象对于每一个客户请求都是不同的所以对于每一个新的请求都要重新创建和删除这个范围内的对象
·session范围
具有session范围的对象被绑定到javaxservlethttpHttpSession对象中可以调用session这个隐含对象的getAttribute()方法来访问具有这种范围类型的对象JSP容器为每一次会话创建一个HttpSession对象在会话期间可以访问session范围内的对象
·application范围
具有application范围的对象被绑定到javaxservletServletContext中可以调用application这个隐含对象的getAttribute()方法来访问具有这种范围类型的对象在Web应用程序运行期间所有的页面都可以访问在这个范围内的对象
下面我们通过几个简单的例子来看一下这种范围对象的应用
.测试page范围
testjsp
<%
pageContextsetAttribute(namezhangsan);
outprintln(testjsp: );
outprintln(pageContextgetAttribute(name));
outprintln(<p>);
pageContextinclude(testjsp);
%>
testjsp
<%
outprintln(testjsp: );
outprintln(pageContextgetAttribute(name));
%>
访问testjsp将看到如下的输出
testjsp: zhangsan
testjsp: null
说明保存在pageContext对象中的属性具有page范围只能在同一个页面中被访问
.测试request范围
修改testjsp和testjsp如下所示
testjsp
<%
requestsetAttribute(namezhangsan);
outprintln(testjsp: );
outprintln(requestgetAttribute(name));
outprintln(<p>);
pageContextinclude(testjsp);
%>
testjsp
<%
outprintln(testjsp: );
outprintln(requestgetAttribute(name));
%>
访问testjsp将看到如下的输出
testjsp: zhangsan
testjsp: zhangsan
说明保存在request对象中的属性具有request范围在请求对象存活期间可以访问这个范围内的对象将
pageContext
include(
test
jsp
);
这一句注释起来先访问testjsp再访问testjsp可以看到如下输出
testjsp: null
这是因为客户端开始了一个新的请求
.测试session范围
修改testjsp和testjsp如下所示
testjsp
<%
sessionsetAttribute(namezhangsan);
%>
testjsp
<%
outprintln(testjsp: );
outprintln(sessiongetAttribute(name));
%>
先访问testjsp然后在同一个浏览器窗口中访问testjsp可以看到如下输出
testjsp: zhangsan
说明保存在session对象中的属性具有session范围在会话期间可以访问这个范围内的对象
如果我们在访问完testjsp后关闭浏览器重新打开浏览器窗口访问testjsp将看到如下输出
testjsp: null
这是因为客户端与服务器开始了一次新的会话
.测试application范围
修改testjsp和testjsp如下所示
testjsp
<%
applicationsetAttribute(namezhangsan);
%>
testjsp
<%
outprintln(testjsp: );
outprintln(applicationgetAttribute(name));
%>
先访问testjsp然后关闭浏览器再打开浏览器窗口访问testjsp可以看到如下输出
testjsp: zhangsan
说明保存在application对象中的属性具有application范围在Web应用程序运行期间都可以访问这个范围内的对象