JSP中request.setAttribute()出现取不到值的情况

本文通过一个实例分析了在jsp中request.setAttribute()在不同页面间无法传递的问题,揭示了request请求作用域的生命周期。解释了session和application作用域的区别,并给出了相应解决方案。讨论了如何利用session和application来跨页面传递数据,以及它们各自的生命周期特点。

jsp1的代码:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
    <meta http-equiv="Cache-Control"content="text/html";charset="utf-8">
</head>
<body>
<a href="jsp2.jsp">处理页</a>
<% request.setAttribute("pwd","111111");%>
</body>
</html>

 jsp2的代码:

<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="utf-8" %>
<%
    String pwd = (String) request.getAttribute("pwd");
%>
<html>
<head>
    <title>Title</title>
  <meta http-equiv="content-type"content="text/html";charet="utf-8">
</head>
<body>
pwd参数的值为:<%=pwd%><br>
</body>
</html>

 运行结果:

 jsp2取不到jsp1中request.setAttribute()的值,为什么会出现这个问题? 

 那么我们就可以从request的生命周期来思考了:

request

请求作用域,就是客户端的一次请求。比如访问某个页面,就是一次请求。页面访问结束,该页面的request就结束了

既然如此,那么我们在jsp1的时候已经完成了一次请求,这时request的生命周期结束,当进入jsp2的时候,request.setAttribute()已经成为null,(两次请求生成了两个不同的request对象)

 如何解决这个问题?

我们先研究一下web中传值的时候三个容器,还有一个request,前面已经讲过

application


全局作用范围,整个应用程序共享,就是在部署文件中的同一个webApp共享,生命周期为:应用程序启动到停止。

session


会话作用域,当用户首次访问时,产生一个新的会话,以后服务器就可以记住这个会话状态。生命周期:会话超时,或者服务器端强制使会话失效。

打开一个浏览器请求一个网站的页面后,Session开始,当session超过时间限制(一般是20分种)后,session注销而失效或是人为使用session.invalidate();使用session失效。

用浏览器打开一个web程序,一个浏览器窗口就会有一个session,且是唯一的,过了session的生存周期就没了,或者是你关了窗口也就没了。

不同浏览器的session在计算机中并不是同一个。

既然如此,我们将request改为session

问题解决了,为什么?因为session的生命周期是你打开浏览器窗口到你关闭浏览器窗口。

我们再改为application试试

和session的结果一样。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值