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 中添加正确的 声明怎么样?这行得通吗? 还可以。仅当 webapp 的 /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,有可能吗?的主要内容,如果未能解决你的问题,请参考以下文章

Servlet生命周期

servlet过滤器

Filter介绍

过滤器Filter(拦截jsp页面的跳转)案例:

day22(过滤器Filter)

在servlet中查询数据库并在页面显示查询的结果