zoukankan      html  css  js  c++  java
  • 2018.10.8 Hibernate中解决乱码问题---配置一个过滤器

    在web.xml中配置下

    <filter>
        <filter-name>encodeFilter</filter-name>
        <filter-class>cn.legend.web.filter.GenericEncodingFilter</filter-class>
      </filter>
      <filter-mapping>
        <filter-name>encodeFilter</filter-name>
        <url-pattern>/*</url-pattern>
      </filter-mapping>
    

    GenericEncodingFilter.java 类名必须要跟配置文件下面的名字一样

    package cn.legend.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;
    
    /**
     * 通用编码解决方案
     * 
     */
    public class GenericEncodingFilter implements Filter {
    	public void destroy() {
    	}
    
    	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);
    	}
    
    	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;
    	}
    
    }
    

    注意:配置好之后无需在里面设置编码格式了

  • 相关阅读:
    单向绑定和双向绑定
    Vue
    事件处理
    网关
    同时加载多个配置集
    Nacos Group方案
    DataID方案
    maven_provided说明
    C#大数据导入-SqlBulkCopy
    https://webyog.com/product/monyog/
  • 原文地址:https://www.cnblogs.com/qichunlin/p/9974488.html
Copyright © 2011-2022 走看看