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

问题描述 投票:0回答:3

我正在使用 Struts/JSP 作为 Web 应用程序。我有一个页面 A,我在其中收集用户定义的参数(因为请求参数不能使它们成为会话参数),然后我转到页面 B 向用户询问是/否类型的问题。如果是,我需要返回页面 A 并继续常规处理。但显然A页面的请求对象没有了。

有没有办法将页面 A 的请求对象设置为页面 B 中的参数,以便当我返回页面 A 时,我拥有与我第一次在那里(在页面 A 上)时相同的请求对象。

我需要如下所示的东西:

页面 A --(req1)------> 页面 B (set req.setAttr('prevReq', req1)) ------> 页面 A (req = req.getAttr('prevReq') )

如有任何帮助,我们将不胜感激。

java jsp struts-1
3个回答
2
投票

不,你不能做你想做的事。您了解 HTTP 请求-响应周期是如何工作的吗?

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

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

您可以做的是将数据存储在会话对象中。您可以调用

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


0
投票

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


0
投票

使用隐藏的输入元素(

input type="hidden"
),其中您保留表单提交的请求参数。不要将其复制/存储为请求属性。回复完成后他们就迷路了。

由于我不使用 struts,这里有一个 basic 示例,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>

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>
© www.soinside.com 2019 - 2024. All rights reserved.