当前位置: 首页 > 知识库问答 >
问题:

从另一个servlet调用servlet过滤器

况喜
2023-03-14

我正在研究一个合作医疗系统。

我的代码在url“/market”调用的servlet的doGet()函数中。我想要一个HttpServletRequestWrapper,它将通过为url“/page”设置的所有过滤器。

我希望这些过滤器会更新请求,这样注释处理器以后就可以用正确的值注入依赖项。

我在Tomcat服务器中,所以我应该能够强制转换到正确的特殊对象,而不必遵从其他服务器。

一个相关的问题是使用req。getRequestDispatcher(路径)。转发(requestWrapper、responseWrapper) ,我希望能调用过滤器。应该吗?javadoc说:

此方法允许一个servlet对请求进行初步处理


共有1个答案

夏长卿
2023-03-14

默认情况下,过滤器仅映射到请求调度程序。下面是过滤器映射的示例

<filter-mapping>
    <filter-name>yourFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

隐式等同于

<filter-mapping>
    <filter-name>yourFilter</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
</filter-mapping>

这意味着,过滤器仅在“原始”传入请求上触发,而不是在转发的请求上触发。

还有三个调度员:转发包含错误RequestDispatcher#forward()触发转发调度器。如果你想让你的过滤器也挂在上面,那么只需添加它:

<filter-mapping>
    <filter-name>yourFilter</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>FORWARD</dispatcher>
</filter-mapping>

请注意,您需要在此处明确指定请求调度程序,否则它将假定您完全覆盖它,并且只对转发调度程序感兴趣。

在过滤器内部,如果您想区分请求转发,那么您可以通过确定是否存在用RequestDispatcher#FORWARD_REQUEST_URI

String forwardRequestURI = (String) request.getAttribute(RequestDispatcher.FORWARD_REQUEST_URI);

if (forwardRequestURI != null) {
    // Forward was triggered on the given URI.
}
 类似资料:
  • 问题内容: 我需要从另一个Servlet调用Servlet的POST方法,并在Servlet的参数中传递一个Blob。这是可能的,如果可以的话,该怎么做。PS:我不能使用Apache HttpClient 问题答案: 您需要自己创建并发送HTTP请求。您不能使用转发/重定向/包含,因为您要将方法从GET更改为POST,并且想要发送请求。 由于显然不是HttpClient(以及其他第三方库?),您最

  • 服务1: 服务2: 网状物xml: 我无法从servlet1调用一个到另一个servlet2我不知道在sservlet2哪里做错了,我们必须给出名称类或URL模式,请检查servlet 1的代码。

  • 问题内容: 我想将多个值从一个servlet传递到另一个servlet。请告诉我如何通过? 问题答案: 取决于您是否使用会话: 使用session.setAttribute()将数组存储在会话变量中。 使用session.getAttribute();检索数组。 但是,变量将一直保留到会话终止,您用其他东西覆盖它或将其删除为止。 如果将一个servlet转发到另一个servlet,则可以将其存储在

  • 问题内容: 我已经编写了REST Web服务方法,并且。以下是Web服务类`@Path(“ / service”)公共类Service { }` 在Web服务方法中,正在使用调用,而正在使用的URL是http:// localhost:8080 / xxxx / xxxx / service / val / zzzz 。zzzz是要传递的值。URL模式的和是/安全。现在,问题没有被调用,而直接调用

  • servlet过滤器映射中的url模式能否指向另一个域中的servlet? 在url模式中,put/*将使此筛选器应用于应用程序中的所有servlet。有没有办法在另一个域/应用程序中为servlet应用过滤器?如果是这样,我应该使用什么样的url模式。 我尝试把完整的路径到域名和servlet,但抛出一个错误,我的应用程序没有启动。

  • 问题内容: 我有一个过滤器linkifyStuff,其中需要使用其他过滤器处理一些变量。我无法弄清楚从另一个调用一个过滤器的语法。 我了解过滤器链接-这不是我想要的。我想将过滤器应用于linkifyStuff过滤器中的局部变量,而不是其输入或输出。 我希望像下面这样工作,但是$ filter(’filtername’)显然不是正确的语法。 我可以为sanitizeStuff和sanitizeStu