我有一个JSP页面,它将HttpServletRequest和HttpServletResponse传递给Java类,该类根据名为“action”的参数将请求和响应分派给一个动作类。 action类执行一些操作,有时会转发到另一个重复相同过程的JSP。如果你认为我应该使用servlet,你的权利,但这是一个很长的故事,基本上我也没有权限。
在我的一个操作类中,我验证数据,如果有效,请使用RequestDispatcher将请求转发到另一个JSP。我还尝试设置“action”属性,以便我可以告诉其他JSP要执行的操作,但是我了解到属性不会随请求一起转发。实际上,我的代码开始无限循环,因为我执行了相同的操作,因为action参数没有改变,导致请求在action和jsp之间循环。
我发现我可以通过在新页面的url中传递参数来覆盖action参数。像这样:
RequestDispatcher dispatcher = request.getRequestDispatcher("someUrl.jsp?action=SOME_OTHER_ACTION");
dispatcher.forward(request, response");
这个解决方案对我来说闻起来很腥。任何人都可以提供任何有关这是否是一个好主意的见解?
答案 0 :(得分:2)
是的,这是转发时发送请求参数的唯一方法。
答案 1 :(得分:2)
正如您所发现的,请求属性只是过滤器或其他请求处理程序将对象添加到请求对象的便利位置。它们与来自HTTP请求本身的参数完全不同。属性不会传递给HTTP客户端,并且在响应发送后消失。
你的方法没什么可疑的。另一种(可能更糟)的方法是使用会话来维持状态。
答案 2 :(得分:1)
我认为这是传递参数的有效方法之一。
其他方式可能是,您可以访问请求对象,您可以将其设置为请求属性。 forward在服务器上,您应该能够在另一端访问相同的请求属性。