• 2018.12.1 web项目中解决乱码问题的一个工具类


    <!-- 配置一个过滤器  编码格式的过滤器 -->
      <filter>
      	<filter-name>encodeFilter</filter-name>
      	<filter-class>com.glut.web.filter.GenericEncodingFilter</filter-class>
      </filter>
      <filter-mapping>
      	<filter-name>encodeFilter</filter-name>
      	<url-pattern>/*</url-pattern>
      </filter-mapping>
    
    
    package com.glut.web.filter;
    
    import java.io.IOException;
    import java.io.UnsupportedEncodingException;
    import java.util.Map;
    
    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.HttpServletRequestWrapper;
    
    /**
     * 解决乱码显示
     * @author qichunlin
     *
     */
    public class GenericEncodingFilter implements Filter {
    	@Override
    	public void destroy() {
    	}
    
    	@Override
    	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
    			throws IOException, ServletException {
    		// 转型为与协议相关对象
    		HttpServletRequest httpServletRequest = (HttpServletRequest) request;
    		// 对request包装增强
    		HttpServletRequest myrequest = new MyRequest(httpServletRequest);
    		chain.doFilter(myrequest, response);
    	}
    
    	@Override
    	public void init(FilterConfig filterConfig) throws ServletException {
    	}
    
    }
    
    // 自定义request对象
    class MyRequest extends HttpServletRequestWrapper {
    
    	private HttpServletRequest request;
    
    	private boolean hasEncode;
    
    	public MyRequest(HttpServletRequest request) {
    		super(request);// super必须写
    		this.request = request;
    	}
    
    	// 对需要增强方法 进行覆盖
    	@Override
    	public Map getParameterMap() {
    		// 先获得请求方式
    		String method = request.getMethod();
    		if (method.equalsIgnoreCase("post")) {
    			// post请求
    			try {
    				// 处理post乱码
    				request.setCharacterEncoding("utf-8");
    				return request.getParameterMap();
    			} catch (UnsupportedEncodingException e) {
    				e.printStackTrace();
    			}
    		} else if (method.equalsIgnoreCase("get")) {
    			// get请求
    			Map<String, String[]> parameterMap = request.getParameterMap();
    			if (!hasEncode) { // 确保get手动编码逻辑只运行一次
    				for (String parameterName : parameterMap.keySet()) {
    					String[] values = parameterMap.get(parameterName);
    					if (values != null) {
    						for (int i = 0; i < values.length; i++) {
    							try {
    								// 处理get乱码
    								values[i] = new String(values[i].getBytes("ISO-8859-1"), "utf-8");
    							} catch (UnsupportedEncodingException e) {
    								e.printStackTrace();
    							}
    						}
    					}
    				}
    				hasEncode = true;
    			}
    			return parameterMap;
    		}
    
    		return super.getParameterMap();
    	}
    
    	@Override
    	public String getParameter(String name) {
    		Map<String, String[]> parameterMap = getParameterMap();
    		String[] values = parameterMap.get(name);
    		if (values == null) {
    			return null;
    		}
    		return values[0]; // 取回参数的第一个值
    	}
    
    	@Override
    	public String[] getParameterValues(String name) {
    		Map<String, String[]> parameterMap = getParameterMap();
    		String[] values = parameterMap.get(name);
    		return values;
    	}
    
    }
    
  • 相关阅读:
    Fiddler系列教程3:使用Fiddler录制Jmeter性能测试脚本
    PySide6读取EXCLE文档
    C#实现操作DOS命令的方法
    在PyCharm中调用xlrd模块出现 ModuleNotFoundError: No module named 'xlrd' ,但在sublime却可以正常
    pip安装时出现错误:File "D:Python39Scriptspip.exe\__main__.py", line 4, in <module> ModuleNotFoundError: No module named 'pip'
    /ect/fstab与/etc/mtab的区别
    虚拟机中Ubuntu系统修改分辨率
    关于报错Could not load file or assembly的问题
    关于WinCC归档应该知道的事
    vue + element 表单的简单公用组件,表格的集成写法
  • 原文地址:https://www.cnblogs.com/qichunlin/p/9985480.html
Copyright © 2020-2023  润新知