【问题标题】:Trouble with url-pattern in web.xmlweb.xml 中的 url 模式存在问题
【发布时间】:2012-06-13 21:48:51
【问题描述】:

我在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 时,我的过滤器没有被执行。我不明白为什么。

图案有问题吗?此外,如果我从模式中删除 '*',则过滤器将在点击以上 url 时执行。

在这方面需要帮助。谢谢。

【问题讨论】:

    标签: java servlets servlet-filters


    【解决方案1】:

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

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

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

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

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

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

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

    所以* 是字面意思,除非模式以/* 结尾或以*. 开头

    【讨论】:

    • 为了将来参考,这似乎是 servlet 规范 3.0。例如,The empty string ("") 似乎对版本 2.5 无效。
    【解决方案2】:

    使用/admin/* 代替/admin*

    Servlet 容器无法将 /admin* 识别为正确的 URL 模式。

    【讨论】:

      【解决方案3】:

      不妨试试:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-12-20
        • 2017-11-19
        • 1970-01-01
        • 2010-12-25
        • 1970-01-01
        • 2012-02-13
        • 2015-06-26
        • 2010-10-04
        相关资源
        最近更新 更多