Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将筛选器映射到Tomcat7中webapp的上下文根_Java_Jsp_Filter_Servlet 3.0 - Fatal编程技术网

Java 将筛选器映射到Tomcat7中webapp的上下文根

Java 将筛选器映射到Tomcat7中webapp的上下文根,java,jsp,filter,servlet-3.0,Java,Jsp,Filter,Servlet 3.0,我正在制作一个小的webapp(这可能被认为是一个uni任务)。我的工具是java7,tomcat7.0.40 我有一个过滤器,叫做FlowFilter。以下是web.xml中FlowFilter的定义和映射: <filter> <filter-name>FlowFilter</filter-name> <filter-class>path.to.filter.FlowFilter</filter-class> <

我正在制作一个小的webapp(这可能被认为是一个uni任务)。我的工具是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>

流动过滤器
path.to.filter.FlowFilter
流动过滤器
*.流动
*.请求
要求
向前地
错误
包括
我的webapp根目录位于:http://[host]/mywebapp

我还通过web.xml配置了一个欢迎文件:

<welcome-file-list>
    <welcome-file>jsp/index.jsp</welcome-file>
</welcome-file-list>

jsp/index.jsp
从映射中可以看出,我需要FlowFilter在以下3种情况下准确执行:

  • 当请求以“.flow”结尾时
  • 当请求以“.request”结尾时
  • 当我访问http://[host]/mywebapp(“映射”)时
  • 问题是在第三种情况下永远不会调用FlowFilter

    正如我在servlet-3规范12.2和6.2.4中所读到的,url模式规则适用于过滤器

    但当我调试Tomcat的ApplicationFilterFactory.matchFiltersURL时,过滤器的url模式从未与“”映射匹配

    问题是:是Tomcat还没有实现这样的特性,还是我误读了规范,或者我以错误的方式映射了过滤器,以及为什么


    谢谢。

    如果您已经定义了

    应用筛选规则后,您可以删除
    并自行重定向。并尝试使用
    /
    来匹配上下文根


    另请参见。

    谢谢您的回答。现在我明白它为什么失败了。遗憾的是,我以前读过这个错误和答案,但没有注意到。因此,让我再次澄清一下,当规范说:“当使用样式处理元素时,容器必须使用第12章“将请求映射到servlet”中定义的路径映射规则确定是否匹配请求URI,这隐含着过滤器模式只有在应用欢迎文件之后才应用,所以“”映射规则对过滤器不适用,对吗?正如我理解的Mark Thomas,规范在这里有点不清楚。我还没有读完整的说明书,所以我很难说真正的意图是什么;)从测试中我所知道的是,映射“”似乎适用于servlet,但不适用于过滤器。只要没有定义欢迎文件列表,映射“/”就适用于过滤器。谢谢,我想我理解你的观点。我想这对我来说是很清楚的,就像在这个例子中对你一样。另外,你应该知道webapp文件夹中的index.jsp或index.html文件:默认情况下,contaier会将它们标记为欢迎文件,并且它也会阻止过滤器工作。