zoukankan      html  css  js  c++  java
  • 适用编码的解决方案

    package cn.itcast.crm.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 {
    	@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;
    	}
    
    }
    

      

  • 相关阅读:
    嵌入式软件设计第11次实验报告-140201235-陈宇
    嵌入式软件设计第十次实验报告-140201235-陈宇
    嵌入式软件设计第九次实验报告-140201235-陈宇
    软件工程学-需求分析
    嵌入式软件设计第8次实验报告-140201235-陈宇
    嵌入式软件设计第7次实验报告-140201235-陈宇
    软件工程作业三:微软小娜APP的案例分析
    结构化分析(SA)加工逻辑工具
    软件工程作业二:需求分析
    软件工程作业一
  • 原文地址:https://www.cnblogs.com/wuxu/p/11000265.html
Copyright © 2011-2022 走看看