在JSP中有一种方法可以将HttpServletRequest对象作为属性传递给另一个HttpServletRequest对象

时间:2010-07-03 06:01:31

标签: java jsp struts

我正在使用Struts / JSP作为webapp。我有一个页面A,我正在收集用户定义的参数(因为请求参数不能使它们成为会话参数)然后我转到页面B向用户询问是/否的问题。如果是,我需要回到页面A并继续定期处理。但很明显,页面A的请求对象已经消失。

有没有办法将页面A的请求对象设置为页面B中的参数,这样当我回到页面A时,我有了相同的请求对象,当我第一次在那里时(第A页)。

我需要以下内容:

第A页 - (req1)------>第B页(设置req.setAttr('prevReq',req1))------>第A页(req = req.getAttr('prevReq'))

感谢任何帮助。

3 个答案:

答案 0 :(得分:2)

不,你不能做你想到的。您是否了解HTTP请求 - 响应周期的工作原理?

  • 用户使用浏览器向服务器发送HTTP请求。
  • 服务器处理请求(调用您的servlet或JSP)。
  • 您的servlet或JSP会生成一个通常由HTML页面组成的响应。
  • 服务器将响应发送回浏览器。

您无法保存页面A的请求,然后在页面B中响应该请求以使浏览器返回到页面A.这不是请求 - 响应循环的工作方式。

您可以做的是将数据存储在会话对象中。您可以调用request.getSession()来获取HttpSession对象,您可以在该对象中存储该用户会话期间的数据。在页面A中,您可以再次从会话对象中获取数据。

答案 1 :(得分:0)

在多页面处理中,您需要将所有间歇收集的数据存储到会话中。请参阅HttpServletRequest.getSession()HttpSession.setAttribute(String, Object)

答案 2 :(得分:0)

使用隐藏的输入元素(input type="hidden"),其中保留表单提交的请求参数。不要将其复制/存储为请求属性。他们在回复完成后迷路了。

由于我没有struts,这里是一个基本示例,JSP应该是什么样的(留下输入标签和XSS等明显的安全问题,Struts应该足够智能自己处理它) )。

第A页:

<form>
    <input type="text" name="input1" value="${param.input1}">
    <input type="text" name="input2" value="${param.input2}">
    <input type="text" name="input3" value="${param.input3}">
    <input type="hidden" name="yesorno" value="${param.yesorno}">
    <input type="submit" value="go to page B">
    <input type="submit" value="submit">
</form>

Page B

<form>
    <input type="checkbox" name="yesorno" value="yes" ${!empty param.yesorno ? 'checked' : ''}>
    <input type="hidden" name="input1" value="${param.input1}">
    <input type="hidden" name="input2" value="${param.input2}">
    <input type="hidden" name="input3" value="${param.input3}">
    <input type="submit">
</form>