JSP有4个作用域,分别是
pageContext 当前页面
requestContext 一次请求
sessionContext 当前会话
所以页面间传递数据,也是可以通过session传递的。
pageContext 当前页面
requestContext 一次请求
sessionContext 当前会话
applicationContext 全局,所有用户共享
pageContext
准备setContext.jsp和getContext.jsp,分别表示 向作用域设置数据,和 从作用域获取数据。pageContext表示当前页面作用域
可以近似于理解为java的this对象,离开当前JSP页面(无论是redirect还是forward),则pageContext中的所有属性值就会丢失。
setContext.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
pageContext.setAttribute("name","gareen");
%>
<%=pageContext.getAttribute("name")%>
getContext.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%=pageContext.getAttribute("name")%>
requestContext
requestContext 表示一次请求。随着本次请求结束,其中的数据也就被回收。
在页面跳转时,如果通过forward方式跳转,则forward目标页面仍然可以拿到request中的属性值。如果通过redirect方式进行页面跳转,由于redirect相当于重新发出的请求,此种场景下,request中的属性值会丢失。
setContext.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
request.setAttribute("name","gareen");
%>
<%=request.getAttribute("name")%>
getContext.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%=request.getAttribute("name")%>
sessionContext
sessionContext 指的是会话,从 一个用户打开网站的那一刻起,无论访问了多少网页,链接都属于同一个会话,直到浏览器关闭。所以页面间传递数据,也是可以通过session传递的。
但是,不同用户对应的session是不一样的,所以session无法在不同的用户之间共享数据。
setContext.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
session.setAttribute("name","gareen");
response.sendRedirect("getContext.jsp");
%>
getContext.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%=session.getAttribute("name")%>
applicationContext
applicationContext 指的是全局,只要服务器不停止,所有用户共享同一个数据
setContext.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
application.setAttribute("name","gareen");
System.out.println(application == request.getServletContext());
response.sendRedirect("getContext.jsp");
%>
getContext.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%=application.getAttribute("name")%>