【发布时间】:2013-06-09 19:37:19
【问题描述】:
我偶然发现了我的网络应用程序中的一个错误,在我发现发生了什么之前,我一直摸不着头脑(并最终拉扯我的头发)。
基本上,我在 web.xml 中定义了 2 个过滤器,两个映射如下:
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<servlet-name>SpringMVCDispatcher</servlet-name>
</filter-mapping>
<filter-mapping>
<filter-name>SpringFormMethodFilter</filter-name>
<url-pattern>/administration/*</url-pattern>
</filter-mapping>
它们都是 Spring MVC 过滤器。我的问题是我得到的表单数据没有被解释为 UTF-8,尽管 encodingFilter 应该在其他任何东西有机会从中读取之前将请求编码设置为 UTF-8。
我终于注意到表单方法过滤器是在编码过滤器之前执行的,尽管定义过滤器映射的顺序应该是它们链接的顺序:
过滤器在链中的顺序与 过滤器映射出现在 Web 应用程序部署描述符中。
(来自Oracle)
当我使用相同的映射(即映射到 servlet 而不是 URL 模式)时,两种映射的顺序都会恢复并且一切都按预期工作:
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<servlet-name>SpringMVCDispatcher</servlet-name>
</filter-mapping>
<filter-mapping>
<filter-name>SpringFormMethodFilter</filter-name>
<servlet-name>SpringMVCDispatcher</servlet-name>
</filter-mapping>
这是Servlet 规范的一部分,还是Tomcat 的故障?它是否记录在某处,我应该提交错误报告吗?
我正在使用带有 Java 7 的 Tomcat 7.0.39。
【问题讨论】:
标签: tomcat servlets tomcat7 servlet-filters