gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:04:54 25 4
gpt4 key购买 nike

有一个我暂时无法实现的目标:

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

 request.getParameter("p");

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

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

一切正常。

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

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

但是参数 'p' 进入请求的 queryString 成员,而不是参数。

如何使用查询参数传递“p”参数,以便我可以从 JSP 和转发中以相同的方式检索“p”。

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

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

最佳答案

如有疑问,请随时转到 specification .在这种情况下,请参阅章节 9.1.1 Query Strings in Request Dispatcher Paths

The ServletContext and ServletRequest methods that create RequestDispatcher objects using path information allow the optional attachment of query string information to the path. For example, a Developer may obtain a RequestDispatcher by using the following code:

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

Parameters specified in the query string used to create the RequestDispatcher take precedence over other parameters of the same name passed to the included servlet. The parameters associated with a RequestDispatcher are scoped to apply only for the duration of the include or forward call.

所以你可以做得很好

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

和参数p将仅适用于 HttpServletRequest赋予资源映射以处理指定路径,即。 /report在这种情况下。如果那是 HttpServlet ,然后您可以使用

访问它
request.getParameter("p");

哪里request将是 HttpServletRequest方法参数。

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

关于java - 如何在转发时将请求参数从一个 servlet 传递到另一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21882485/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com