2

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

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

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

该 url 模式将匹配以“.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 阈值设置得太高而忽略了来自我的过滤器的日志。

4

1 回答 1

4

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

链接

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

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

于 2011-02-11T04:15:36.527 回答