Struts2中 JSP使用request.setAttribute()后,在Action中为什么取不到值?

本文通过实验对比了JSP页面与Action中Request对象的区别,揭示了每次HTTP请求都会创建新的Request对象这一事实,并解释了为何设置的属性无法在不同请求间共享。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

因为页面上的request 和使用form提交的request 请求 不是一个对象。测试如下:
首先在jsp页面中打印出来request对象
<%
	request.setAttribute("test","test");
	System.out.println("request="+request+"返回页面对象");//这里打印出页面request对象
%>
部分action代码如下:
	HttpServletRequest request = ServletActionContext.getRequest();
	System.out.println("request="+request+"action里的request对象");
	String  test = (String) request.getAttribute("test");
	System.out.println("test="+test);
经过测试 输出结果如下:
	request=org.apache.struts2.dispatcher.StrutsRequestWrapper@199f0e5返回页面对象
	request=org.apache.struts2.dispatcher.StrutsRequestWrapper@19665e1action里的request对象
	test=null
	request=org.apache.struts2.dispatcher.StrutsRequestWrapper@19665e1返回页面对象
说明:
输出结果第一行 是第一次加载请求页面时,调用当前页面的request对象(其实我们打开请求页面时产生的请求对象)
第二行 是我用form 提交然后在action里获取的request对象,可以看到两个request对象的类型是一样的 但是值却不一样,这正好说明了 我们每次请求 都会重新产生一个request对象。
到这里,第三行就毫无疑问了,既然重新生成了request对象 那当然不会有我们之前set的属性咯。
第四行很关键,我们看到了那个action里的request对象 返回到了页面上,他们是同一个类型,同一个对象。这正好说明了 当我们的响应模式为dispatcher时 request参数也会返回到页面,因为request对象没有变。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值