在浏览器地址栏中输入jsp地址,就会执行request器对象的requestInitialized方法和request的Attribute属性的器对象的attributeReplaced方法。等jsp加载完了,就会执行request器对象的requestDestroyed方法,当然这些都不是我们的重点!
点击submit按钮提及到服务器端,发现表单中的中文提交到服务器端的时候,服务器端拿到的中文数据是中文乱码,这就很奇怪了,我明明是写了处理中文乱码的过滤器的嘛!
于是我debug了一下,看看执行的流程和顺序是怎么回事!
debug后,第1步执行的是request器对象的requestInitialized方法,所以器是优先于过滤器执行的,看下图
第2步执行的是RequestAttributeListener类中的attributeReplaced方法,看下图

第3步执行的是ChineseMessyCodeFilter类(中文乱码过滤器类)中的doFilter方法,看下面的截图
这个时候小伙伴应该明白了为什么我们写了中文乱码过滤器还是会乱码!
没错,就是在执行ChineseMessyCodeFilter类(中文乱码过滤器类)中的doFilter方法之前,我们的程序先执行了request器对象的requestInitialized方法和request的Attribute属性的器对象的attributeReplaced方法,而这2个方法中又使用了request.getParameter()方法,我们都知道在request.setCharacterEncoding("utf-8");这句话之前,不能使用request.getParameter()方法,这样会导致服务器端获取到的还是中文乱码,所以必须是request.getParameter()这句话只能放在request.setCharacterEncoding("utf-8");这句话之后,才能解决中文乱码的问题,所以知道原因了的话,我们只要把RequestAttributeListener类中的attributeReplaced方法中的getServletRequest().getParameter()这句话注释掉,把RequestListener类中requestInitialized方法中的request.getParameter()注释掉,就可以解决中文乱码过滤器失效的问题,所以大家记住,javaweb开发中器中的一些语句会导致过滤器失效,就像这个例子一样,request器对象中的一些语句导致了中文乱码过滤器失效!
注释掉后,jsp表单提交,服务器端拿表单数据的时候就不会是中文乱码了!,看下图
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-73622-5.html
要的不就是不断的在变化吗
加油