本篇文章是对SpringMVC出现request请求参数乱码情况解决办法博客中“解决措施1”的原理解析,个人认为了解一些简单技术背后的原理对个人编程还是挺有帮助的。
如果有request请求参数乱码问题的小伙伴可以去查看下我上面提到的那片博客,希望对大家有所帮助!
1、进入CharacterEncodingFilter.class
2、CharacterEncodingFilter继承结构图
可以看出CharacterEncodingFilter的曾祖父居然是Filter
3、doFilter( )方法
我们重点看Filter接口的doFilter( )方法的实现情况:
doFilter( )方法在OncePerRequestFilter里实现:
关键:doFilter( )方法里执行了doFilterInternal( ),而doFilterInternal( )方法的实现又在OncePerRequestFilter的子类CharacterEncodingFilter里实现。
绕了一圈又回到了CharacterEncodingFilter类了,看下关键代码:
4、回顾下web.xml里的配置信息
5、CharacterEncodingFilter类中的属性
查看源代码,CharacterEncodingFilter类有三个属性,并且发现无论有参还是无参构造方法forceRequestEncoding、
forceResponseEncoding这两个属性的初始值都是false。下面的主要目的就是解释为什么要改成ture?
6、关键代码
1、我们在web.xml里设置了encoding为UTF-8,所以该值不为空。
2、我们在web.xml里设置了forceRequestEncoding、forceResponseEncoding两个Boolean值为true,所以if语句可以执
行。
3、分别将request、response的编码设置成encoding,也就是UTF-8。
到此,分析结束!