简洁明了阐述jsp是大作用域在实际开发中很有用
JSP有4个作用域,分别是
pageContext 当前页面存储数据使用准备setContext.jsp和getContext.jsp,分别表示 向作用域设置数据 ,和 从作用域获取数据 。
requestContext 一次请求 ,转发到某个页面使用
sessionContext 当前会话 所关联的当前页面applicationContext 全局,所有用户共享
pageContext表示 当前页面作用域
通过pageContext.setAttribute(key,value)的数据,只能在当前页面访问,在其他页面就不能访问了。
使用:
<%
pageContext.setAttribute("name","gareen");
%>
接收:
<%=pageContext.getAttribute("name")%>
requestContext 表示一次请求。随着本次请求结束,其中的数据也就被回收。
requestContext指的是一次请求使用:
<%
request.setAttribute("name","gareen");
%>
接收:
<%=request.getAttribute("name")%>
如果发生了服务端跳转,从setContext.jsp跳转到getContext.jsp,这其实,还是一次请求。 所以在getContext.jsp中,可以取到在requestContext中设置的值
这也是一种页面间传递数据的方式
使用
<%
request.setAttribute("name","gareen");
%>
跳转:
<
jsp:forward
page
=
"getContext.jsp"
/>
接收:
<%=request.getAttribute("name");
所以页面间 客户端跳转 的情况下,是 无法通过request传递数据 的。
使用:
<%
request.setAttribute("name","gareen");
response.sendRedirect("getContext.jsp");
%>
接收:
<%=request.getAttribute("name")%>
sessionContext 指的是会话,从一个用户打开网站的那一刻起,无论访问了多少网页,链接都属于同一个会话,直到浏览器关闭。
所以页面间传递数据,也是可以通过session传递的。
但是,不同用户对应的session是不一样的,所以session无法在不同的用户之间共享数据。与requestContext类似的,也可以用如下方式来做
使用:
<%
session.setAttribute("name","gareen");
response.sendRedirect("getContext.jsp");
%>
接收:
<%=session.getAttribute("name")%>
applicationContext 指的是全局,所有用户共享同一个数据
在JSP中使用application对象, application对象是ServletContext接口的实例
也可以通过 request.getServletContext()来获取。
所以 application == request.getServletContext() 会返回true
application映射的就是web应用本身。
与requestContext类似的,也可以用如下方式来做
使用:
<%
application.setAttribute("name","gareen");
System.out.println(application == request.getServletContext());
response.sendRedirect("getContext.jsp");
%>
接收:
<%=application.getAttribute("name")%>