Global Java Servlet Filter,有可能吗?
Posted
技术标签:
【中文标题】Global Java Servlet Filter,有可能吗?【英文标题】:Global Java Servlet Filter, is it possible? 【发布时间】:2011-11-29 14:59:35 【问题描述】:我正在为学术目的编写一个项目,其中包括编写一个监视 servlet/jsp 响应时间的过滤器。
问题是过滤器应该适用于服务器中每个已部署的 Web 应用程序,而不仅仅是一个特定的应用程序,我只是找不到有关应用“全局”过滤器的任何信息。
有可能吗?
注意: 值得一提的是,我使用 Apache Tomcat 7 作为首选服务器。
谢谢!
米奇
【问题讨论】:
【参考方案1】:您可以在 Tomcat 的公共类路径中提供过滤器并编辑 Tomcat 自己的 /conf/web.xml
以添加过滤器,但这不能在不存在的 webapp 上下文中运行(即它不涵盖所有可能requests) 并且它在所有部署的 webapps 中都是可覆盖的。更健壮的解决方案取决于使用的 servlet 容器。如果是 Tomcat,则需要 the Valve component。
启动示例:
import org.apache.catalina.valves.ValveBase;
public class MyValve extends ValveBase
@Override
public void invoke(Request request, Response response) throws IOException, ServletException
// ...
getNext().invoke(request, response);
在server.xml
注册如下:
<Valve className="com.example.MyValve" />
【讨论】:
在 tomcat /conf/web.xml 中添加正确的/WEB-INF/web.xml
有另一个具有相同过滤器名称的过滤器时,它们才可被覆盖。如果您能承受这种风险,请继续将其放入 Tomcat 的/conf/web.xml
。阀门绝对不能从 webapp 端被覆盖/禁用。
最后一个问题 - 使用上述方法(阀门或过滤器)之一编译的过滤器代码应该放在哪里?
在Tomcat的公共类路径中。就像在 Tomcat/lib
中的 JAR 一样,或者在由 /conf/catalina.properties
中的 common.loader
属性表示的路径中。
谢谢伙计,你真的很有帮助:)【参考方案2】:
您可以配置过滤器的 url 模式来处理您想要的任何请求/响应。请查看http://www.caucho.com/resin-3.0/config/webapp.xtp#filter-mapping
【讨论】:
对不起,这根本不能回答 OP 的问题。他特别提到他想要一些适用于给定 Servlet 容器上的所有 webapps 的东西。【参考方案3】:过滤器是为每个 Web 应用程序配置的,但 Tomcat 本身可能有一种用于计时请求/响应处理时间的机制。
【讨论】:
以上是关于Global Java Servlet Filter,有可能吗?的主要内容,如果未能解决你的问题,请参考以下文章