JSP 四种作用域以及Demo

JSP有4个作用域,分别是
pageContext 当前页面
requestContext 一次请求
sessionContext 当前会话

applicationContext 全局,所有用户共享

pageContext

准备setContext.jsp和getContext.jsp,分别表示 向作用域设置数据,和 从作用域获取数据

pageContext表示当前页面作用域

可以近似于理解为javathis对象,离开当前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")%>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值