pageContext的作用域只在当前页面:
重点:
pageContext可以操作其他三大域对象
pageContext.setAttribute("p","request",PageContext.REQUEST_SCOPE);
等同于req.setAttribute("p","request");
其他session application 类似
pageContext.jsp
<body>
<%
pageContext.setAttribute("p","pp");
request.getRequestDispatcher("/pageContext1.jsp").forward(request,response);
//pageContext可以操作其他三大域对象
//pageContext.setAttribute("p","request",PageContext.REQUEST_SCOPE);
//等同于 req.setAttribute 其他session application 类似
%>
</body>
pageContext1.jsp
<body>
<%=pageContext.getAttribute("p")%>
</body>
pageContext.jsp转发到pageContext.jsp的结果为:
1.看看转发过后,四个作用域是否能取到值:
pageContext.jsp
<%
pageContext.setAttribute("p","pp");
request.setAttribute("p","request");
session.setAttribute("p","session");
application.setAttribute("p","application");
request.getRequestDispatcher("/pageContext1.jsp").forward(request,response);
//pageContext可以操作其他三大域对象
//pageContext.setAttribute("p","request",PageContext.REQUEST_SCOPE);
//等同于 req.setAttribute 其他session application 类似
%>
pageContext1.jsp
<body>
<%=pageContext.getAttribute("p")%>
<%=request.getAttribute("p")%>
<%=session.getAttribute("p")%>
<%=application.getAttribute("p")%>
</body>
结果如下所示:
2.重定向后看看四个作用域的取值情况
3.不转发也不重定向,先访问pageContext.jsp,再访问pageContext1.jsp
session能取到值的原因:
当浏览器去访问第一个jsp时,服务器端已经创建了一个session,并将sessionId回了浏览器端的cookie,当浏览器访问此应用下的第二个页面时,浏览器端带着sessionId,那么服务器端就知道是同一个session了。
4.pageContext的重要方法
findAttribute(String name);
自动从page request session application依次查找,找到了就取值,结束查找。
四大域对象:实际开发
PageContext : pageConext 存放的数据在当前页面有效。开发时使用较少。
ServletRequest: request 存放的数据在一次请求(转发)内有效。使用非常多。
HttpSession: session 存放的数据在一次会话中有效。使用的比较多。如:存放用户的登录信息,购物车功能。
ServletContext: application 存放的数据在整个应用范围内都有效。因为范围太大,应尽量少用。