JSP学习笔记之二
——对象和范围
在JSP页面中的对象,包括用户创建的对象(例如,JavaBean对象)和JSP的隐含对象,都有一个范围属性。范围定义在什么时间内,在哪一个JSP页面中可以访问这些对象。例如,session对象在会话期间,可以在多个页面中被访问。application对象在整个Web应用程序的生命中都可以被访问。在JSP中,有4种范围,如下所示:
page范围
具有page范围的对象被绑定到javax.servlet.jsp.PageContext对象中,在这个范围内的对象,只能在创建对象的页面中访问。可以调用pageContext这个隐含对象的getAttribute()方法来访问具有这种范围类型的对象。
eg:
test1.jsp
<%
pageContext.setAttribute("name","zhangsan");
out.println(pageContext.getAttribute("name"));
out.println("<br>");
pageContext.include("test2.jsp");
%>
test2.jsp
<%
out.println(pageContext.getAttribute("name"));
%>
访问test1.jsp :
张三
null
request范围
具有request范围的对象被绑定到javax.servlet.ServletRequest对象中,可以调用request这个隐含对象的getAttribute()方法来访问具有这种范围类型的对象。在调用forward()方法转向的页面或者调用include()方法包含的页面中,都可以访问这个范围的对象。
eg:test1.jsp
<%
request.setAttribute("name","zhangsan");
out.println(request.getAttribute("name"));
out.println("<br>");
pageContext.include("test2.jsp");
%>
test2.jsp
<%
out.println(request.getAttribute("name"));
%>
访问test1.jsp:
zhangsan
zhangsan
session范围
具有session范围的对象被绑定到javax.servlet.http.HttpSession对象中,可以调用session这个隐含对象中getAttribute()方法来访问具有这种范围类型的对象。JSP容器为每一次会话,创建一个HttpSession对象,在会话期间可以访问session范围内的对象。
eg:test1.jsp
<%
session.setAttribute("name","zhangsan");
%>
test2.jsp
<%
out.println(session.getAttribute("name"));
%>
访问test1.jsp,然后在同一浏览器中访问test2.jsp:
zhangsan
说明保存在session对象中的属性具有session范围,在会话期间,可以访问这个范围内的对象。
application范围
具有application范围的对象被绑定到javax.servlet.ServletContext中,可以调用application这个隐含对象的getAttribute()方法来访问具有这种范围类型的对象。在web应用程序运行期间,所有的页面都可以访问在这个范围内的对象。
eg:test1.jsp
<%
application.setAttribute("name","zhangsan");
%>
test2.jsp
<%
out.println(application.getAttribute("name"));
%>
先访问1,关闭浏览器在访问2,都不为空了。说明保存在application对象中的属性具有application范围,在整个web应用程序运行期间,都可以访问这个范围内的对象。