方枪枪的java世界

不要因为风雨飘落就停止了你的脚步,真正的得失就在你的心中。 做喜欢做的事,不轻言放弃!

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>
   
   

posted on 2008-04-23 21:06 做强大的自己 阅读(1973) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航: