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

Gab*_*enn 8 java parameters servlets forward

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

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

 request.getParameter("p");
Run Code Online (Sandbox Code Playgroud)

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

<a href="<c:url value="/report"/>?p=value">report</a>
Run Code Online (Sandbox Code Playgroud)

而且每件事都很好.

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

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

但参数'p'在请求的queryString成员中,而不在参数中.

如何使用查询参数传递'p'参数,我可以从JSP和前进中以相同的方式检索'p'.

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

我想我错过了什么,但我找不到什么!

Sot*_*lis 18

如有疑问,请始终遵守规范.在这种情况下,请参阅章节9.1.1 Query Strings in Request Dispatcher Paths

ServletContextServletRequest创造方法 RequestDispatcher 使用路径信息的对象允许的查询字符串信息的路径可选附件.例如,开发人员可以RequestDispatcher 使用以下代码获取a :

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

用于创建RequestDispatcher优先级的查询字符串中指定的 参数,该参数优先于传递给包含的servlet的其他同名参数.与a关联的参数的 RequestDispatcher范围仅适用于包含或转发呼叫的持续时间.

所以你可以做得很好

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

并且该参数p仅可用于HttpServletRequest映射到处理指定路径的资源,即./report在这种情况下.如果是a HttpServlet,则可以使用

request.getParameter("p");
Run Code Online (Sandbox Code Playgroud)

哪里requestHttpServletRequest方法参数.

forward(..)调用终止并且执行返回到您的时PreProcessingServlet,该参数将不再在本地HttpServletRequest对象中可用.