您的位置:首页 > 移动开发

filter-mapping的执行顺序和字符集设置的优先级

2012-04-05 12:44 369 查看
转载地址:http://www.blogjava.net/jjshcc/archive/2011/12/29/367501.html

问题起因:

今天遇到一个乱码问题,以前已经配置好了的呀。而且是普遍现象,看来是公共的变更引起的问题。

分析过程:

于是开始进行调试,因为是公共问题,所以就对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>

To get more info about me or to know more about Portuguese Translation Studio ,please access www.puyufanyi.com
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: