Web应用顺序运行期间,说明保管在applic对象中的属性具有applic范围。都可以访问这个范围内的对象。
JSP技术使用Java编程语言编写类XMLtag和scriptlet来封装发生动态网页的处置逻辑。网页还能通过tag和scriptlet访问存在于服务端的资源的应用逻辑。
包括用户创立的对象(例如,JSP页面中的对象。JavaBean对象)和JSP隐含对象,都有一个范围属性。范围定义了什么时间内,哪一个JSP页面中可以访问这些对象。例如,session对象在会话期间内,可以在多个页面中被访问。applic对象在整个Web应用顺序的生命周期中都可以被访问。JSP中,有4种范围,如下所示。
一、page范围
只能在创建对象的页面中访问。可以调用pageContext这个隐含对象的getA ttribut方法来访问具有这种范围类型的对象(pageContext对象还提供了访问其他范围对象的getA ttribut方法)pageContext对象自身也属于page范围。具有page范围的对象被绑定到javax.servlet.jsp.PageContext对象中。这个范围内的对象。
属于page范围的对象的引用将被丢弃。page范围内的对象,当Servlet类的_jspServic方法执行完毕。客户端每次请求JSP页面时创建,页面向客户端发送回响应或请求被转发(forward其他资源后被删除。
二、request范围
可以调用request这个隐含对象的getA ttribut方法来访问具有这种范围类型的对象。调用forward方法转向的页面或者调用includ方法包括的页面中,具有request范围的对象被绑定到javax.servlet.ServletRequest对象中。都可以访问这个范围内的对象。要注意的因为请求对象对于每一个客户请求都是不同的所以对于每一个新的请求,都要重新创建和删除这个范围内的对象。
三、session范围
可以调用session这个隐含对象的getA ttribut方法来访问具有这种范围类型的对象。JSP容器为每一次会话,具有session范围的对象被绑定到javax.servlet.http.HttpSess对象中。创建一个HttpSession对象,会话期间,可以访问session范围内的对象。
四、applic范围
可以调用applic这个隐含对象的getA ttribut方法来访问具有这种范围类型的对象。Web应用顺序运行期间,具有applic范围的对象被绑定到javax.servlet.ServletContext中。所有的页面都可以访问在这个范围内的对象。
来看一下这4种范围对象的应用。下面我通过几个简单的例子。
1.测试page范围
test1.jsp
<%
"zhangsan"; pageContext.setA ttribut"name".
out.println"test1.jsp:";
out.printlnpageContext.getA ttribut"name";
out.println"<p>";
pageContext.includ"test2.jsp";
%>
test2.jsp
<%
out.println"test2.jsp:";
out.printlnpageContext.getA ttribut"name";
%>
访问test1.jsp将看到如下的输出:
test1.jsp:zhangsan
test2.jsp:null
只能在同一个页面中被访问。说明保管在pageContext对象中的属性具有page范围。
2.测试request范围
修改test1.jsp和test2.jsp如下所示。
test1.jsp
<%
"zhangsan"; request.setA ttribut"name".
out.println"test1.jsp:";
out.printlnrequest.getA ttribut"name";
out.println"<p>";
pageContext.includ"test2.jsp";
%>
test2.jsp
<%
out.println"test2.jsp:";
out.printlnrequest.getA ttribut"name";
%>
访问test1.jsp将看到如下的输出:
test1.jsp:zhangsan
test2.jsp:zhangsan
请求对象存活期间,说明保管在request对象中的属性具有request范围。可以访问这个范围内的对象。将
pageContext.includ"test2.jsp";
先访问test1.jsp再访问test2.jsp可以看到如下输出:这一句注释起来。
test2.jsp:null
这是因为客户端开始了一个新的请求。
3.测试session范围
修改test1.jsp和test2.jsp如下所示。
test1.jsp
<%
"zhangsan"; session.setA ttribut"name".
%>
test2.jsp
<%
out.println"test2.jsp:";
out.printlnsession.getA ttribut"name";
%>
先访问test1.jsp然后在同一个浏览器窗口中访问test2.jsp可以看到如下输出:
test2.jsp:zhangsan
会话期间,说明保管在session对象中的属性具有session范围。可以访问这个范围内的对象。
关闭浏览器,如果我访问完test1.jsp后。重新打开浏览器窗口,访问test2.jsp将看到如下输出:
test2.jsp:null
这是因为客户端与服务器开始了一次新的会话。
4.测试applic范围
修改test1.jsp和test2.jsp如下所示。
test1.jsp
<%
"zhangsan"; application.setA ttribut"name".
%>
test2.jsp
<%
out.println"test2.jsp:";
out.printlnapplication.getA ttribut"name";
%>
再打开浏览器窗口,先访问test1.jsp然后关闭浏览器。访问test2.jsp可以看到如下输出:
test2.jsp:zhangsan