我正在制作一个小型的webapp(这可能被认为是一项单一任务)。我的工具是java7,tomcat7.0.40。
我有一个名为FlowFilter的过滤器。以下是web.xml中FlowFilter的定义和映射:
<filter>
<filter-name>FlowFilter</filter-name>
<filter-class>path.to.filter.FlowFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>FlowFilter</filter-name>
<url-pattern></url-pattern>
<url-pattern>*.flow</url-pattern>
<url-pattern>*.request</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>ERROR</dispatcher>
<dispatcher>INCLUDE</dispatcher>
</filter-mapping>
我的webapp根位于:http:// [host] / mywebapp。
我还有一个通过web.xml配置的欢迎文件:
<welcome-file-list>
<welcome-file>jsp/index.jsp</welcome-file>
</welcome-file-list>
从映射中可以看出,我需要FlowFilter在以下3种情况下执行:
问题是在第三种情况下永远不会调用FlowFilter。
正如我在servlet-3规范12.2和6.2.4中所读到的,url-pattern规则适用于过滤器。
但是当我调试Tomcat的ApplicationFilterFactory.matchFiltersURL时,过滤器的url-patterns永远不会与&#34;&#34;映射。
问题是:只是Tomcat还没有实现这样的功能,或者我误读了规范或我以错误的方式映射过滤器,以及原因。
谢谢。
答案 0 :(得分:2)
如果您已定义<welcome-file-list>
此will beat the filter。
您可以在应用过滤规则后自行删除<welcome-file-list>
并重定向。并尝试使用<url-pattern>/</url-pattern>
来匹配context-root。
另见this answer。