如何在转发时将请求参数从一个servlet传递到另一个servlet

时间:2014-02-19 13:50:32

标签: java servlets parameters forward

我的目标是我现在无法实现:

我有一个servlet,说' ReportServlet'。它需要一个请求参数,比如说' p'。 我显然可以通过以下方式获取参数:

 request.getParameter("p");

我的JSP中的查询字符串是:

<a href="<c:url value="/report"/>?p=value">report</a>

而且每件事都很好。

现在:我有另一个servlet,比如&#39; PreProcessingServlet&#39;。我想将PreProcessingServlet转发到ReportServlet,传递一个&#39; p&#39;在PreProcessingServlet中计算的参数。我试过了:

RequestDispatcher rd = getServletContext().getRequestDispatcher("/report?p="+value);
rd.forward(request, response);   

但参数&#39; p&#39;进入请求的queryString成员,而不是参数。

我怎样才能通过&#39; p&#39;参数,使用查询参数的方式,我可以检索&#39; p&#39;从JSP和前进一样的方式。

我不想使用请求属性,因为我想要一个独特的解决方案来从JSP和转发获取参数。

我想我错过了一些东西,但我无法找到答案!

1 个答案:

答案 0 :(得分:17)

如有疑问,请务必前往specification。在这种情况下,请参阅章节9.1.1 Query Strings in Request Dispatcher Paths

  

创建的ServletContextServletRequest方法   使用路径信息RequestDispatcher个对象允许使用可选项   将查询字符串信息附加到路径。例如,a   开发人员可以使用以下代码获取RequestDispatcher

String path = "/raisins.jsp?orderno=5"; 
RequestDispatcher rd = context.getRequestDispatcher(path);    
rd.include(request, response);
     

用于创建的查询字符串中指定的参数   RequestDispatcher优先于其他参数   名称传递给包含的servlet。 与a相关的参数   RequestDispatcher的作用域仅适用于期限   包括或转发。

所以你可以做得很好

RequestDispatcher rd = getServletContext().getRequestDispatcher("/report?p="+value);
rd.forward(request, response);   

参数p仅对HttpServletRequest可用,该/report被赋予映射到处理指定路径的资源,即。在这种情况下HttpServlet。如果是request.getParameter("p"); ,则可以使用

进行访问
request

其中HttpServletRequestforward(..)方法参数。

PreProcessingServlet调用终止并执行回到您的HttpServletRequest时,该参数将不再在本地{{1}}对象中可用。