Servlet过滤器URL映射

时间:2010-09-10 16:29:33

标签: java servlets servlet-filters url-pattern

如何将过滤器映射到URL的根目录?我正在使用Tomcat 7.0.2并将应用程序部署为ROOT.war。欢迎页面是sign_in.xhtml。每当客户端发送对站点根目录的请求(即仅域名),或者客户端请求sign_in.xhtml时,我想运行过滤器。以下是我到目前为止的情况:

  <filter>
        <filter-name>My filter</filter-name>
        <filter-class>com.myApp.myFilter</filter-class>        
    </filter>
    <filter-mapping>
        <filter-name>My filter</filter-name>
        <url-pattern>/sign_in.xhtml</url-pattern>
    </filter-mapping>

直接请求sign_in.xhtml,成功调用过滤器,但我不知道如何获取root用户调用过滤器的请求。根据Servlet规范(3.0版)

<url-pattern>/</url-pattern>

映射到默认servlet,空字符串映射到根。以下是规范中的相关部分:

“空字符串(”“)是一个特殊的URL模式,它完全映射到 应用程序的上下文根,即http://host:port/ /形式的请求。在这种情况下,路径信息是'/',servlet路径和上下文路径是 空字符串(“”)。“

但是,以下两个url模式都会导致Tomcat抛出异常。

<url-pattern></url-pattern>
<url-pattern>""</url-pattern>

如果有人能对此有所了解,我将非常感激。谢谢。

安德鲁

1 个答案:

答案 0 :(得分:7)

<url-pattern>/</url-pattern>应该适用于root用户的请求。你试过吗?

如果您的意图更多是过滤所有请求,那么您应该使用<url-pattern>/*</url-pattern>


更新:要排除其中一个,我在Tomcat 7测试了url-pattern的{​​{1}}(同时使用/web.xml)它确实没有按预期工作。然而@WebFilter(urlPatterns={"/"})的{​​{1}}在Tomcat 6(Servlet 2.5)和Glassfish v3(Servlet 3.0)上的工作正常。我怀疑Tomcat 7中存在一个错误,因此我已经报告了issue 49914

相关问题