The NoteBook of EricKong

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  610 Posts :: 1 Stories :: 190 Comments :: 0 Trackbacks

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

    于是开始进行调试,因为是公共问题,所以就对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 2011-12-29 16:42 Eric_jiang 阅读(2302) 评论(2)  编辑  收藏 所属分类: JSP

Feedback

# re: filter-mapping的执行顺序和字符集设置的优先级 2016-01-10 16:02 范甘迪
s'd'f's'd  回复  更多评论
  

# re: filter-mapping的执行顺序和字符集设置的优先级 2016-07-19 14:02 d
a  回复  更多评论
  


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


网站导航: