Pie*_*nry 31 tomcat servlets servlet-filters tomcat7
我偶然发现我的网络应用程序中的一个错误,让我摸不着头脑(并最终拉我的头发)一段时间才发现发生了什么事.
基本上,我在我的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>
Run Code Online (Sandbox Code Playgroud)
它们都是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>
Run Code Online (Sandbox Code Playgroud)
这是Servlet规范的一部分还是Tomcat的故障?是否在某处提供了文件,我应该提交错误报告吗?
我在Java 7中使用Tomcat 7.0.39.