tomcat8 编写字符编码Filter过滤器无效问题
来源:互联网 发布:人工智能图片大全 编辑:程序博客网 时间:2024/05/21 01:43
同事遇到编码问题时想做一个解决全站的字符编码过滤器,过滤器类和配置如下:
过滤器类:
package com.chaoxing.newspaper.web.filter;import java.io.IOException;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class CharacterEncodingFilter implements Filter {public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {System.out.println("过滤器执行"); final HttpServletRequest request = (HttpServletRequest) req; HttpServletResponse response = (HttpServletResponse) res; //解决post请求的中文乱码 request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); response.setContentType("text/html;charset=UTF-8");chain.doFilter((ServletRequest) Proxy.newProxyInstance(this.getClass().getClassLoader(), request.getClass().getInterfaces(), new InvocationHandler(){@Overridepublic Object invoke(Object proxy, Method method, Object[] args)throws Throwable {String methodname = method.getName(); //拿到当前的方法 if(methodname.equals("getParameter")){ //执行request.getparameter获取结果 String value = (String) method.invoke(request, args); if(value==null){ return null; } if(!request.getMethod().equalsIgnoreCase("get")){ //判断是为get请求 return value; } System.out.println(value+"|||||"); //转换编码返回 value = new String(value.getBytes("UTF-8"),"UTF-8"); System.out.println(value+"======="); return value; } //交给request执行请求 return method.invoke(request, args); } } ), res);}public void init(FilterConfig fConfig) throws ServletException {System.out.println("过滤器初始化");}@Overridepublic void destroy() {System.out.println("过滤器完成");}}
过滤器配置:
<!--解决全站乱码的filter --> <filter> <filter-name>CharacterEncoding</filter-name> <filter-class>com.XXX.web.filter.CharacterEncodingFilter</filter-class> </filter> <filter-mapping> <filter-name>CharacterEncoding</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
但是在前端form的提交方式是get的情况下,得到的仍然是乱码。
刚开始一直纠结于过滤器是不是写错了,编码集是不是写错了,但是经过测试,并没有错,过滤器正常运行,
最后把value.getByte("iso-8859-1","utf-8") 改为 value.getByte("utf-8","utf-8")后台就能得到值,不再是乱码了。最后百度了下,
说tomcat8默认的编码集是utf-8,tomcat8之前默认的编码集是iso-8859-1,恍然大悟......
总结:tomcat7及其版本之前默认的编码集是iso-8859-1,tomcat8默认的字符集已经是UTF-8,所以不再需要为request.getParameter()的结果进行转码,不需要编码编码过滤器类了
阅读全文
0 0
- tomcat8 编写字符编码Filter过滤器无效问题
- 使用Filter过滤器解决字符编码问题
- Filter字符编码过滤器
- Filter字符编码过滤器
- 字符编码过滤器 Servlet Filter
- Filter过滤器(字符编码)
- ---Filter ( 四 ) filter字符编码过滤器
- Filter过滤器,统一网站字符编码
- Filter过滤器的应用--处理字符编码
- Filter实际应用--字符编码过滤器
- 过滤器的编写(过滤字符编码)
- 使用filter过滤器解决编码问题
- filter过滤器解决全局编码问题
- 字符编码拦截器/过滤器无效的原因
- filter(字符编码过滤器)(chain.doFilter(request,response))
- Servlet 编写Filter过滤器
- Filter编码过滤器
- filter编码过滤器
- 浅论各种调试接口(SWD、JTAG、Jlink、Ulink、STlink)的区别
- c运行库、c标准库、windows API都是什么玩意
- C语言中的nan和inf 的判断和使用
- redis分布式锁实现
- 自己写的一款基于移动端的图片浏览器插件
- tomcat8 编写字符编码Filter过滤器无效问题
- Android 微信分享链接部分手机无法成功分享
- SuperMap iMobile for Android许可配置介绍
- HDU2577
- Android 中 c 代码回调Java代码的详细步骤(jni、NDK的使用)
- 图片的压缩
- 面试题目3:二维数组中的查找
- Win7 64位+VS2010+OpenCV2.4.9环境配置
- Android 官方翻译相关文章