所有.html网址的url-mapping,包括带有查询参数的网址

时间:2011-02-10 22:03:05

标签: java servlet-filters url-mapping

我正在尝试编写一个过滤器,它将挑选出任何HTML页面请求,无论该URL是否具有查询参数。 (此过滤器的目的是跟踪访客行为/统计数据)

这是我在web.xml中的过滤器映射:

<filter-mapping>
    <filter-name>statTrackingFilter</filter-name>
    <url-pattern>*.html</url-pattern>
</filter-mapping>

该url-pattern将匹配以“.html”结尾的页面的请求,但我还想捕获带有查询参数的请求。

我尝试了以下配置,但它与以前的任何请求都不匹配:

<filter-mapping>
    <filter-name>statTrackingFilter</filter-name>
    <url-pattern>*.html*</url-pattern>
</filter-mapping>

如何配置我的过滤器以捕获对任何HTML页面的所有请求?

或者我是以错误的方式来做这件事的?我应该让我的过滤器监听所有请求,并让过滤器决定请求的URL是否重要?我想忽略所有CSS,JS和图像请求。

谢谢。

修改: <url-pattern>*.html</url-pattern>确实有效。我认为这不是因为我的过滤器中的日志因为我的log4j阈值设置得太高而被忽略了。

1 个答案:

答案 0 :(得分:3)

*.html*模式不起作用,因为它只匹配具有字面名称为“.html *”的扩展名的文件。

来自link

  

网址模式使用极其简单的语法。模式中的每个字符都必须与URL路径中的相应字符完全匹配,但有两个例外。在模式结束时,/ *匹配从该点开始的任何字符序列。模式* .extension匹配以扩展名结尾的任何文件名。不支持其他通配符,并且模式中任何其他位置的星号不是通配符。

我相信你使用<url-pattern>*.html</url-pattern>的第一个配置是正确的,并且应该在最后捕获带有查询参数的请求(无论如何对我来说似乎都是这样)。