【Java】全站编码过滤器GenericEncodingFilter代码与配置
编码过滤器GenericEncodingFilter:
1 package com.fuck.web.filter; 2 3 import java.io.IOException; 4 import java.io.UnsupportedEncodingException; 5 import java.util.Map; 6 7 import javax.servlet.Filter; 8 import javax.servlet.FilterChain; 9 import javax.servlet.FilterConfig; 10 import javax.servlet.ServletException; 11 import javax.servlet.ServletRequest; 12 import javax.servlet.ServletResponse; 13 import javax.servlet.http.HttpServletRequest; 14 import javax.servlet.http.HttpServletRequestWrapper; 15 16 /** 17 * 解决get和post请求 全部乱码 18 * 19 * @author seawind 20 * 21 */ 22 public class GenericEncodingFilter implements Filter { 23 24 @Override 25 public void destroy() { 26 } 27 28 @Override 29 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { 30 // 转型为与协议相关对象 31 HttpServletRequest httpServletRequest = (HttpServletRequest) request; 32 // 对request包装增强 33 HttpServletRequest myrequest = new MyRequest(httpServletRequest); 34 response.setContentType("text/html;charset=utf-8"); 35 chain.doFilter(myrequest, response); 36 } 37 38 @Override 39 public void init(FilterConfig filterConfig) throws ServletException { 40 } 41 42 } 43 44 // 自定义request对象 45 class MyRequest extends HttpServletRequestWrapper { 46 47 private HttpServletRequest request; 48 49 private boolean hasEncode; 50 51 public MyRequest(HttpServletRequest request) { 52 super(request);// super必须写 53 this.request = request; 54 } 55 56 // 对需要增强方法 进行覆盖 57 @Override 58 public Map getParameterMap() { 59 // 先获得请求方式 60 String method = request.getMethod(); 61 if (method.equalsIgnoreCase("post")) { 62 // post请求 63 try { 64 // 处理post乱码 65 request.setCharacterEncoding("utf-8"); 66 return request.getParameterMap(); 67 } catch (UnsupportedEncodingException e) { 68 e.printStackTrace(); 69 } 70 } else if (method.equalsIgnoreCase("get")) { 71 // get请求 72 Map<String, String[]> parameterMap = request.getParameterMap(); 73 if (!hasEncode) { // 确保get手动编码逻辑只运行一次 74 for (String parameterName : parameterMap.keySet()) { 75 String[] values = parameterMap.get(parameterName); 76 if (values != null) { 77 for (int i = 0; i < values.length; i++) { 78 try { 79 // 处理get乱码 80 values[i] = new String(values[i].getBytes("ISO-8859-1"), "utf-8"); 81 } catch (UnsupportedEncodingException e) { 82 e.printStackTrace(); 83 } 84 } 85 } 86 } 87 hasEncode = true; 88 } 89 return parameterMap; 90 } 91 92 return super.getParameterMap(); 93 } 94 95 @Override 96 public String getParameter(String name) { 97 Map<String, String[]> parameterMap = getParameterMap(); 98 String[] values = parameterMap.get(name); 99 if (values == null) { 100 return null; 101 } 102 return values[0]; // 取回参数的第一个值 103 } 104 105 @Override 106 public String[] getParameterValues(String name) { 107 Map<String, String[]> parameterMap = getParameterMap(); 108 String[] values = parameterMap.get(name); 109 return values; 110 } 111 112 }
WEB-INF下的web.xml配置:
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"><display-name>estoredemo</display-name><filter><filter-name>GenericEncodingFilter</filter-name><filter-class>com.fuck.web.filter.GenericEncodingFilter</filter-class></filter><filter-mapping><filter-name>GenericEncodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><welcome-file-list><welcome-file>index.html</welcome-file><welcome-file>index.htm</welcome-file><welcome-file>index.jsp</welcome-file><welcome-file>default.html</welcome-file><welcome-file>default.htm</welcome-file><welcome-file>default.jsp</welcome-file></welcome-file-list> </web-app>
=================================================================================================
网上看到另一个,其实和上面基本一模一样,不过也贴上做个备份吧
1 import java.io.IOException; 2 import java.util.Map; 3 4 import javax.servlet.Filter; 5 import javax.servlet.FilterChain; 6 import javax.servlet.FilterConfig; 7 import javax.servlet.ServletException; 8 import javax.servlet.ServletRequest; 9 import javax.servlet.ServletResponse; 10 import javax.servlet.http.HttpServletRequest; 11 import javax.servlet.http.HttpServletRequestWrapper; 12 13 public class EncodingFilter implements Filter { 14 private FilterConfig config = null; 15 private String encode = null; 16 17 public void destroy() { 18 19 } 20 21 public void doFilter(ServletRequest request, ServletResponse response, 22 FilterChain chain) throws IOException, ServletException { 23 response.setContentType("text/html;charset="+encode); //--解决响应乱码 24 //--包装改造request中和获取请求参数相关的方法解决请求参数乱码 25 chain.doFilter(new MyHttpServletRequest((HttpServletRequest) request), response); 26 } 27 28 public void init(FilterConfig filterConfig) throws ServletException { 29 this.config = filterConfig; 30 encode = config.getInitParameter("encode") == null?"utf-8":config.getInitParameter("encode"); 31 } 32 33 34 35 //内部类,装饰类改造HttpServletRequest 的三个方法 36 class MyHttpServletRequest extends HttpServletRequestWrapper{ 37 private HttpServletRequest request = null; 38 private boolean isNotEncode = true; 39 public MyHttpServletRequest(HttpServletRequest request) { 40 super(request); 41 this.request = request; 42 } 43 44 @Override 45 public Map getParameterMap() { 46 try{ 47 if(request.getMethod().equalsIgnoreCase("POST")){//--如果是post提交,一行代码解决post提交请求参数乱码 48 request.setCharacterEncoding(encode); 49 return request.getParameterMap(); 50 }else if(request.getMethod().equalsIgnoreCase("GET")){//--如果是get提交,则应该手动编解码解决乱码 51 Map<String,String[]> map = request.getParameterMap();//获取有乱码的map 52 if(isNotEncode){//只能在第一次解决乱码 53 for(Map.Entry<String, String[]> entry : map.entrySet()){//遍历map,解决所有值的乱码 54 String [] vs = entry.getValue(); 55 for(int i=0;i<vs.length;i++){ 56 vs[i] = new String(vs[i].getBytes("iso8859-1"),encode); 57 } 58 } 59 isNotEncode = false;//设置为false,第二次就不会再进这个代码块了 60 } 61 return map; 62 }else{ 63 return request.getParameterMap(); 64 } 65 }catch (Exception e) { 66 e.printStackTrace(); 67 throw new RuntimeException(e); 68 } 69 } 70 71 @Override 72 public String[] getParameterValues(String name) { 73 return (String[]) getParameterMap().get(name); 74 } 75 76 @Override 77 public String getParameter(String name) { 78 return getParameterValues(name) == null ? null : getParameterValues(name)[0]; 79 } 80 } 81 }
<filter> <description>全站乱码过滤器</description> <filter-name>encodeFilter</filter-name> <filter-class>com.java.filter.EncodingFilter</filter-class> <init-param> <param-name>encode</param-name> <param-value>utf-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodeFilter</filter-name> <url-pattern>/*</url-pattern> -----------------------------------------拦截的路径 </filter-mapping>
转载于:https://www.cnblogs.com/dflmg/p/6278434.html
【Java】全站编码过滤器GenericEncodingFilter代码与配置相关推荐
- java 输出编码_从代码看java输入输出中的编码和解码
在java中,采用Unicode编码,英文字符和汉字都占两个字节,下面的代码都是在中文操作系统上执行的,系统采用GBK编码. 1.看一下下面这段代码的编码和解码:当我们在键盘上敲入字符的时候,其采用的 ...
- Java三大器之过滤器(Filter)的工作原理和代码演示
一.Filter简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术之一,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, ...
- java全站_javaWeb_全站编码
目的 : 实现javaweb项目的全站编码问题 需要解决的问题 : 在何时进行编码问题的解决, 在何处进行编码问题的解决, 才用什么方法进行解决 设计思路 : 在Filter进行全站的编码转换, 对于 ...
- java 字符过滤器_Java Web---登录验证和字符编码过滤器
什么是过滤器? 在Java Web中,过滤器即Filter.Servlet API中提供了一个Filter接口(javax.servlet.Filter).开发web应用时,假设编写的Java类实现了 ...
- java steam filter 动态条件_Filter解决全站编码问题
从Tomcat8开始,默认编码已经改为UTF-8,所以已经不会出现Get请求乱码问题了. 只需处理Post乱码. 我们往常对乱码的处理都放在Servlet的doGet和doPost方法中: 这个案例采 ...
- java 编码过滤器_Java编码过滤器
Java编码过滤器: package com.utils; import javax.servlet.*; import javax.servlet.http.*; public class Enco ...
- Java框架JSON-RPC项目demo代码实战 + JAVA WEB配置虚拟目录(转自21天java web开发)
Java框架JSON-RPC项目demo代码实战 备注 JAVA WEB配置虚拟目录(转自21天java web开发) https://blog.csdn.net/wjxbj/article/det ...
- web.xml还不会配置编码过滤器?
场景 当出现中文乱码问题,Spring中可以利用CharacterEncodingFilter过滤器解决. 实现 打开web.xml <!-- 编码过滤器 --><!-- 其中两个的 ...
- 配置eclipes中java、javascript的自动代码提示
如何配置eclipes中java.javascript的自动代码提示 Java代码: JavaScript(jsp)代码: Java代码: Java->Editor->Content As ...
最新文章
- G - IP地址转换
- lnmp安装博客系统WordPress
- 世界人口钟实时数据_用数字孪生重新定义智慧城市,美象VR推出MxDATA智慧城市CIM数据可视化平台...
- Handlebars.js 模板引擎
- JQuery中的html(),text(),val()区别
- 数据结构学习工具总结
- 用户交互php源码,phpWebSite ,容许个人和群组用户很容易地维护一个交互式社区驱动的站点.phpWebSite...
- Postgresql日志配置
- Linux6、7 系列 安装、卸载mysql
- android 动态改变语言,android动态设置app当前运行语言的方法
- [Nvidia] nvidia-smi
- 让Win让Win XP自动维护系统 自动维护系统
- 《剑指offer》面试题25——二叉树中和为某一值的路径
- python语言规范_python语言规范
- 参考官方mysql自定义一个mysql sink connector
- 使用vcpkg安装指定版本的开源软件
- 潮流能模型matlab,基于matlab的yalmip最优潮流建模的Infeasible problem
- excel自动调整列宽_高效使用Excel透视表,必须要注意的十个细节
- Plain Road
- 等效焦距和可视角度换算表