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 - Java Servlet 过滤器 - 在处理 JSP 页面之前未运行(在 Tomcat 上)