DBMNG数据库管理与应用

科学是实事求是的学问,来不得半点虚假。
当前位置:首页 > 经验分享 > Java开发

Servlet2.3标准时web.xml中filter-mapping的执行顺序和字符集设置的优先级

问题起因:
今天遇到一个乱码问题,以前已经配置好了的呀。而且是普遍现象,看来是公共的变更引起的问题。   
分析过程:
于是开始进行调试,因为是公共问题,所以就对web.xml最近的变更进行增删调试,发现如果使用SecurityFilter就报错,去掉久正常了。
仔细检查,发现如下现象:
1、在设置字符集之前, 提前调用了request.getParameter()方法,就会出现问题。即使后来再设置字符集,随后的action接收的数据也会乱码。
2、对于同一个url,如:*.do,filter-mapping 是有顺序的,按照web.xml中的配置顺序。

从网上查到的结论:

根据servlet2.3规范filter执行是按照web.xml配置的filter-mapping先后顺序进行执行,所以上面的配置会导致遇见*.do的url请求,先进行SecurityFilter的过滤器处理,这时候没有做编码处理,已经是乱码,到下面的filter处理时已经时乱码,再做编码处理已经没有用处。

解决办法:    

//错误的顺序:
<filter-mapping>
         <filter-name>SecurityFilter</filter-name>
         <url-pattern>*.do</url-pattern>
</filter-mapping>
<filter-mapping>
         <filter-name>CharacterEncoding</filter-name>
         <url-pattern>*.do</url-pattern>
</filter-mapping>
<filter-mapping>
         <filter-name>CharacterEncoding</filter-name>
         <url-pattern>*.jsp</url-pattern>
</filter-mapping>
 
//正确的顺序:
 
<filter-mapping>
         <filter-name>CharacterEncoding</filter-name>
         <url-pattern>*.do</url-pattern>
</filter-mapping>
<filter-mapping>
         <filter-name>CharacterEncoding</filter-name>
         <url-pattern>*.jsp</url-pattern>
</filter-mapping>
<filter-mapping>
         <filter-name>SecurityFilter</filter-name>
         <url-pattern>*.do</url-pattern>
</filter-mapping> 



本站文章内容,部分来自于互联网,若侵犯了您的权益,请致邮件chuanghui423#sohu.com(请将#换为@)联系,我们会尽快核实后删除。
Copyright © 2006-2023 DBMNG.COM All Rights Reserved. Powered by DEVSOARTECH            豫ICP备11002312号-2

豫公网安备 41010502002439号