JSP中的四大域对象
request、session、application、pageContext是JSP页面中的四大域对象,也是JSP页面中的隐式对象。
setAttribute()
getAttribute()
-
request作用域:一次请求跨越的前后两个组件(servlet jsp),一次请求指的是从一个组件开始,到另一个组件结束。
-
session作用域:有效范围是当前会话,所谓当前会话,是指从用户打开浏览器开始,到用户关闭浏览器结束。
-
application作用域:有效范围是整个web应用,整个应用是指从应用启动到应用结束。
-
pageContext作用域:作用范围仅限于用户请求的当前页面
什么时候用什么作用域?
如果数据只在当前jsp页面中使用,用pageContext域;
如果数据需要在转发时资源共享,用request域;
如果数据我现在需要用,过一会我还需要用,用session域;
如果数据我现在需要用,过一会别人也需要用,用application域
<%@page pageEncoding="utf-8"%>
<html>
<head>
<title>使用pageContext隐式对象、四大域对象</title>
</head>
<body>
<%
//往pageContext域对象中存数据
pageContext.setAttribute("a",1);
//依次往request session和application域对象中存数据
request.setAttribute("b",2);
session.setAttribute("c",3);
application.setAttribute("d",4);
//转发技术,由当前09转发到10.jsp页面
//request.getRequestDispatcher("MyJsp10.jsp").forward(request,response);
%>
<!-- 在当前页面获取域对象中的数据 -->
a的值为:<%=pageContext.getAttribute("a") %>
b的值为:<%=request.getAttribute("b") %>
c的值为:<%=session.getAttribute("c") %>
d的值为:<%=application.getAttribute("d") %>
<%
//从pageContext中获取数据
out.println("a="+pageContext.getAttribute("a"));
//从request、session和application中依次取出数据
out.println("b="+request.getAttribute("b"));
out.println("c="+session.getAttribute("c"));
out.println("d="+application.getAttribute("d"));
%>
<!-- 测试
1、只访问MyJsp09.jsp
a=1 b=2 c=3 d=4
2、先访问MyJsp09.jsp,在访问MyJsp10.jsp --没有转发的情况
a=null b=null c=3 d=4
3、转发,访问MyJsp09.jsp,由MyJsp09.jsp转发到MyJsp10.jsp --由转发的情况
a=null b=2 c=3 d=4
4、不转发,先访问MyJsp09.jsp,在访问MyJsp10.jsp
a=null b=null c=3 d=4
然后关闭浏览器(结束会话),重新打开浏览器访问MyJsp10.jsp
a=null b=null c=null d=4
5、不转发,先访问MyJsp09.jsp,在访问MyJsp10.jsp
a=null b=null c=3 d=4
然后重新打开一个新的浏览器(别人)直接访问MyJsp10.jsp
a=null b=null c=null d=4
-->
</body>
</html>