servlet 过滤器是不是必须在 web.xml 文件中指定?

Posted

技术标签:

【中文标题】servlet 过滤器是不是必须在 web.xml 文件中指定?【英文标题】:Do servlet filters have to be specified in the web.xml file?servlet 过滤器是否必须在 web.xml 文件中指定? 【发布时间】:2011-07-05 01:15:55 【问题描述】:

我的公司有一个 servlet 过滤器,我们希望将其包含在各种第 3 方 Java Web 应用程序中。编辑供应商的 web.xml 文件有些犹豫。这种犹豫是否合理?还有另一种方法可以做到这一点吗?有问题的应用服务器是 Tomcat 和 Weblogix...

【问题讨论】:

【参考方案1】:

如果使用最高版本 2.5 的 Servlet API - 如果您想要可移植性,没有其他方法 - 您必须在 web.xml 中包含 Filter

如果使用 Servlet API 3.0,你可以在你的 jar 中使用web-fragment.xml,或者在过滤器上使用@WebFilter 注解,它会被自动部署(web-app 应该只指定metadata-complete="false" 以包含声明来自其他模块)

【讨论】:

【参考方案2】:

是的。

我已经能够以编程方式执行此操作(in Jetty 请参阅 addFilter() 方法),但这是一个特定的 Jetty 类,因此我不知道解决此问题的非容器特定方法,所以确保您的代码跨 Tomcat 和 Jetty 进行部署,您的方法是唯一安全的方法。

【讨论】:

【参考方案3】:

AFAIK,他们必须进入 web.xml。你的犹豫是有道理的——我从不喜欢这种修改,因为它很难整合供应商升级。但我不确定你是否有选择。只需确保您的黑盒/验收测试足够强大,可以检测到您的过滤器在升级过程中何时被丢弃。

【讨论】:

以上是关于servlet 过滤器是不是必须在 web.xml 文件中指定?的主要内容,如果未能解决你的问题,请参考以下文章

web.xml

web.xml - Java Servlet 过滤器 - 在处理 JSP 页面之前未运行(在 Tomcat 上)

WEB-INF/web.xml 和 conf/web.xml 中定义的 servlet 过滤器的实际执行顺序是啥

请教一个问题,关于web.xml配置的

如何从 servlet 内省 web.xml?

为啥在web.xml中配置过了类的路径,但在jsp页面访问时还是提示找不到呢