您可以将 WebFilter 打包到库中吗

Posted

技术标签:

【中文标题】您可以将 WebFilter 打包到库中吗【英文标题】:Can you package a WebFilter into a library 【发布时间】:2011-06-24 06:35:36 【问题描述】:

如果是这样,你是怎么做到的?

是的,听起来像是我的最后一个问题。这本质上是同样的问题。我有一个@javax.servlet.annotation.WebFilter,直接打包到战争中时效果很好。现在我想将过滤器移到库中。但如果我这样做,它将不再被调用。

我必须注意的任何陷阱还是根本不可能?

【问题讨论】:

我还没有使用过滤器注释,所以可能会在这里关闭。或许可以尝试将带有 WebFilter 注释的类打包到一个 jar 中,然后将该 jar 放入 war/WEB-INF/lib 目录中? 如果你使用 EAR,那么你也可以在那里打包 lib。 @Martin 是一回事。我有一个 ear 文件,其中包含一个 war 和 ear 库,其中涉及 jar ,这些 jar 由 war 的 ear 使用。如果此类不明确属于战争,则 Webfilter 注释不会影响 Web 应用程序 【参考方案1】:

设置<web-app metadata-complete="false">

这意味着此 Web 应用程序的元数据不限于此特定的 xml(以及 Web 应用程序的类),而是可以通过 3rd 方库使用元数据。

还可以查看“网络片段”。您可以在 jar 的 META-INF 中定义一个 web-fragment.xml,并将所有 servlet 和过滤器映射到那里。

Take a look at this demo.

【讨论】:

同时使用 web-fragment.xmlmetadata-complete 效果很好。为了那些可能会发现这个问题的人的利益:- 1)我使用 maven 将库构建为标准 jar 文件 - 2)我将 maven 库作为标准库放入应用程序 EAR 的 /lib 目录中。跨度> 【参考方案2】:

只需将一个空的 Servlet 3.0 兼容 web.xml 文件放到您的 JAR 项目的 /META-INF 文件夹中。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    id="yourProjectId" version="3.0">
</web-app>

默认情况下,Servlet 3.0 容器将扫描 JAR 中是否存在 /META-INF/web.xml 文件,如果存在,则扫描 JAR 中的所有类以查找 Servlet 3.0 注释。无需其他设置。

顺便说一句,JSF 2.0 具有与 /META-INF/faces-config.xml 类似的技术。

【讨论】:

试过了,没用。该文件肯定包含在 jar 中。 Tomcat 7.53 Java 60。奇怪的是,它确实在 Eclipse 中工作。 war 和 jar 都有相同的 web.xml,唯一的区别是 id 值。

以上是关于您可以将 WebFilter 打包到库中吗的主要内容,如果未能解决你的问题,请参考以下文章

将Crashlytics集成到库项目中

Spring WebFlux添加WebFIlter以匹配特定路径

ios编程:使用线程将多个图像添加到库中

如何使 WebFilter 在非 WebFlux/非反应式 Spring Boot 应用程序中工作?

无法将“genefilter”包添加到库中

CodeIgniter:在每个库中加载模型或将模型从控制器内“传递”到库中