我的目标是我现在无法实现:
我有一个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和转发获取参数。
我想我错过了一些东西,但我无法找到答案!
答案 0 :(得分:17)
如有疑问,请务必前往specification。在这种情况下,请参阅章节9.1.1 Query Strings in Request Dispatcher Paths
创建的
ServletContext
和ServletRequest
方法 使用路径信息的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
其中HttpServletRequest
是forward(..)
方法参数。
当PreProcessingServlet
调用终止并执行回到您的HttpServletRequest
时,该参数将不再在本地{{1}}对象中可用。