您可以将 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.xml
和 metadata-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 打包到库中吗的主要内容,如果未能解决你的问题,请参考以下文章
Spring WebFlux添加WebFIlter以匹配特定路径