web.xml中的url-pattern问题

时间:2012-06-13 21:48:51

标签: java servlets servlet-filters

我在web.xml中的过滤器映射如下:

  <filter>
    <filter-name>LoginCheckFilter</filter-name>
    <filter-class>com.tutorial.filter.LoginCheckFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>LoginCheckFilter</filter-name>
    <url-pattern>/admin*</url-pattern>
  </filter-mapping>

当我运行我的应用并点击http://localhost:8080/admin时,我的过滤器没有被执行。我无法理解为什么。

模式是否有任何问题。此外,如果我从模式中删除'*',那么过滤器将在点击上方网址时执行。

需要帮助。感谢。

3 个答案:

答案 0 :(得分:7)

规范(第12.2段)说明如下:

  

在Web应用程序部署描述符中,使用以下语法   用于定义映射:

     
      
  • 以“/”字符开头的字符串   以'/ *'后缀结尾用于路径映射。

  •   
  • 一个字符串   以'*。'开头的前缀用作扩展名映射。

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

  •   
  • 一个字符串   仅包含'/'字符表示“默认”servlet   应用程序。在这种情况下,servlet路径是请求URI   减去上下文路径,路径信息为null。

  •   
  • 所有其他字符串   仅用于完全匹配。

  •   

因此*按字面意思理解,除非模式以/*结尾或以*.开头

答案 1 :(得分:2)

使用/admin/*代替/admin*

Servlet容器无法将/admin*识别为正确的网址格式。

答案 2 :(得分:1)

也许试试:

<url-pattern>/admin/*</url-pattern>