【问题标题】:Overriding Request Parameter in JSP在 JSP 中覆盖请求参数
【发布时间】:2012-07-18 22:46:34
【问题描述】:

我有一个 JSP 页面,它将 HttpServletRequest 和 HttpServletResponse 传递给 Java 类,该 Java 类根据名为“action”的参数将请求和响应分派给 action 类。动作类执行一些动作,有时会转发到另一个重复相同过程的 JSP。如果您认为我应该使用 servlet,那是您的权利,但这是一个很长的故事,基本上我也没有权限。

在我的一个操作类中,我验证数据,如果有效,则使用 RequestDispatcher 将请求转发到另一个 JSP。我还尝试设置“action”属性,以便我可以告诉其他 JSP 执行什么操作,但是我了解到属性不会随请求一起转发。事实上,我的代码开始无限循环是因为action参数没有变化,导致我在执行相同的动作,导致action和jsp之间的请求循环。

我发现我可以通过在新页面的 url 中传递参数来覆盖操作参数。像这样:

RequestDispatcher dispatcher = request.getRequestDispatcher("someUrl.jsp?action=SOME_OTHER_ACTION");
dispatcher.forward(request, response");

这个解决方案对我来说很腥。谁能提供任何关于这是否是个好主意的见解?

【问题讨论】:

    标签: java jsp


    【解决方案1】:

    我认为这是传递参数的有效方式之一。

    其他方式可能是,您可以访问请求对象,您可以将其设置为请求属性。 forward 在服务器上,您应该能够在另一端访问相同的请求属性。

    【讨论】:

    • 当你说我应该能够看到请求参数时,你的意思是属性吗?
    • 请求有参数和属性。所以,不管你用什么。
    • 相信只能设置属性,没有request.setParameter()方法。
    • 您的权利。我试了一下,它奏效了。我正在尝试,但我使用 ENUM 来保持动作名称一致。设置属性时,我必须将枚举发送到字符串。
    【解决方案2】:

    正如您所发现的,请求属性只是过滤器或其他请求处理程序将对象添加到请求对象的方便位置。它们与来自 HTTP 请求本身的参数完全不同。属性不会传递给 HTTP 客户端,并且在发送响应后就消失了。

    你的方法没有任何可疑之处。另一种(可能更糟)的方法是使用会话来维护状态。

    【讨论】:

    • 我尽可能远离使用 session,我已经看到了一些真正的噩梦以及滥用它。我可能没有正确描述我的情况,setAttribute 确实有效,我永远不会回到客户那里。我不确定到底出了什么问题我相信这是因为我试图将 ENUM 放入属性中。
    【解决方案3】:

    是的,这是在转发时发送请求参数的唯一方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-28
      • 1970-01-01
      相关资源
      最近更新 更多