zoukankan      html  css  js  c++  java
  • javaweb后台接收中文乱码。

    加一个编码过滤器。

    package cn.itcast.goods.filter;
    
    
    import java.io.IOException;
    import java.io.UnsupportedEncodingException;
    import java.util.Map;
    import java.util.Map.Entry;
    
    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;
    import javax.servlet.http.HttpServletResponse;
    /**
     * 处理整个web应用全站乱码
     * 1)处理请求参数乱码
     * 2)处理响应正文乱码
     * @author RoySun
     *
     */
    public class MixCodeFilter implements Filter{
        @Override
        public void destroy() {}
    
        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
                throws IOException, ServletException {
            HttpServletRequest req = (HttpServletRequest) request;
            HttpServletResponse res = (HttpServletResponse) response;
            //针对post提交方式,这一句即可处理接收请求中的乱码
            request.setCharacterEncoding("utf-8");
            /*
             *过滤器中处理响应正文乱码,
             *所有拦截到的资源的乱码问题都可以解决
             */
            response.setContentType("text/html;charset=utf-8");
            /*
             * 采用装饰者模式,将request对象进行包装,
             * 在装饰类中重写getParameter等获取参数的方法
             */
            MyHttpServletRequest myRequest = new MyHttpServletRequest(req);
            chain.doFilter(request, res);
        }
    
        @Override
        public void init(FilterConfig onfig) throws ServletException {}
    
    }
    //装饰类,对HttpServletRequest类进行装饰,重写获取请求参数的方法
    class MyHttpServletRequest extends HttpServletRequestWrapper{
        private HttpServletRequest request;
        //构造方法
        public MyHttpServletRequest(HttpServletRequest request) {
            super(request);
            this.request = request;
        }
        @Override
        public String getParameter(String name) {
            return this.getParameterValues(name)==null? null:this.getParameterValues(name)[0];
        }
    
        @Override
        public String[] getParameterValues(String name) {
            return this.getParameterMap().get(name);
        }
        private boolean isEncode=true;
        @Override
        public Map<String, String[]> getParameterMap() {
            if("GET".equalsIgnoreCase(request.getMethod())){//针对get提交方式进行手动编解码
                Map<String, String[]> map = request.getParameterMap();
                if(isEncode){
                    for (Entry<String, String[]> entry : map.entrySet()) {
                        String[] params = entry.getValue();
                        for(int i=0;i<params.length;i++){
                            try {
                                System.out.println("过滤器之前的参数:" + params[i]);
                                params[i]=new String(params[i].getBytes("iso8859-1"), "utf-8");
                            } catch (UnsupportedEncodingException e) {
                                e.printStackTrace();
                            }
                        }
                    }
                    isEncode = false;
                }
                return map;
            }else{//其余6种提交方式
                return request.getParameterMap();
            }
        }
    
    }
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
      <filter>
        <filter-name>EncodingFilter</filter-name>
        <filter-class>cn.itcast.goods.filter.MixCodeFilter</filter-class>
      </filter>
      <filter-mapping>
        <filter-name>EncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
      </filter-mapping>
    </web-app>
  • 相关阅读:
    flex3 自定义控件
    Android 调用系统搜素框
    Android 自定义控件
    flex拖动时,按下ctrlKey和shiftKey,只执行Move操作
    Mvc4 webApi Json 序列化,日期Java解析失败的解决方法
    Ubuntu下安装Vmware workstation
    Android Activity传递自定义对象
    Flex4 格式化HTML
    Maven 环境搭建
    ActionScript 3 操作XML
  • 原文地址:https://www.cnblogs.com/coder-lzh/p/14077063.html
Copyright © 2011-2022 走看看