我正在尝试编写一个过滤器,它将挑选出任何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阈值设置得太高而被忽略了。
答案 0 :(得分:3)
*.html*
模式不起作用,因为它只匹配具有字面名称为“.html *”的扩展名的文件。
来自link:
网址模式使用极其简单的语法。模式中的每个字符都必须与URL路径中的相应字符完全匹配,但有两个例外。在模式结束时,/ *匹配从该点开始的任何字符序列。模式* .extension匹配以扩展名结尾的任何文件名。不支持其他通配符,并且模式中任何其他位置的星号不是通配符。
我相信你使用<url-pattern>*.html</url-pattern>
的第一个配置是正确的,并且应该在最后捕获带有查询参数的请求(无论如何对我来说似乎都是这样)。