jsp中EL表达式显示时中文乱码和过滤器解决请求中文乱码

一,jsp中EL表达式显示时中文乱码

    我是通过url请求将一个jsp的值传到另一个jsp,结果在另一个jsp显示时出现中文乱码。

    分析问题:由于URL请求没有设置编码格式所以解析响应时会出现中文乱码

    解决方法:在Tomcat的conf文件夹中的server.xml文件中修改:

<Connector port="8088" protocol="HTTP/1.1"connectionTimeout="20000"  redirectPort="8443" URIEncoding="UTF-8"/>

       将编码格式改成utf-8,则URL传递的值就是utf-8格式的,就不会出现乱码。我的项目都是用的utf-8编码,所以我这边也用utf-8,如果你的项目是gbk编码,则改成gbk编码,保持与项目编码一致。

二,过滤器解决请求中文乱码

    首先要在配置文件里面添加过滤器如下图

        一下代码可以作为工具类使用

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;  
import javax.servlet.http.HttpServletResponse;  
/**  
 * 统一编码  
 * @author Administrator  
 *  
 */  
public class EncodingFilter implements Filter {  
  
    @Override  
    public void init(FilterConfig filterConfig) throws ServletException {  
        // TODO Auto-generated method stub  
  
    }  
  
    @Override  
    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException {  
        //1.强转  
        HttpServletRequest request=(HttpServletRequest) req;  
        HttpServletResponse response=(HttpServletResponse) resp;  
          
        //2.放行  
        chain.doFilter(new MyRequest(request), response);  
    }  
  
    @Override  
    public void destroy() {  
        // TODO Auto-generated method stub  
  
    }  
  
}  
class MyRequest extends HttpServletRequestWrapper{  
    private HttpServletRequest request;  
    private boolean flag=true;  
      
      
    public MyRequest(HttpServletRequest request) {  
        super(request);  
        this.request=request;  
    }  
      
    @Override  
    public String getParameter(String name) {    
        if(name==null || name.trim().length()==0){  
            return null;  
        }  
        String[] values = getParameterValues(name);  
        if(values==null || values.length==0){  
            return null;  
        }  
          
        return values[0];  
    }  
      
    @Override  
    /**  
     * hobby=[eat,drink]  
     */  
    public String[] getParameterValues(String name) {  
        if(name==null || name.trim().length()==0){  
            return null;  
        }  
        Map<String, String[]> map = getParameterMap();  
        if(map==null || map.size()==0){  
            return null;  
        }  
          
        return map.get(name);  
    }  
      
    @Override  
    /**  
     * map{ username=[tom],password=[123],hobby=[eat,drink]}  
     */  
    public Map<String,String[]> getParameterMap() {    
          
        /**  
         * 首先判断请求方式  
         * 若为post  request.setchar...(utf-8)  
         * 若为get 将map中的值遍历编码就可以了  
         */  
        String method = request.getMethod();  
        if("post".equalsIgnoreCase(method)){  
            try {  
                request.setCharacterEncoding("utf-8");  
                return request.getParameterMap();  
            } catch (UnsupportedEncodingException e) {  
                // TODO Auto-generated catch block  
                e.printStackTrace();  
            }  
        }else if("get".equalsIgnoreCase(method)){  
            Map<String,String[]> map = request.getParameterMap();  
            if(flag){  
                for (String key:map.keySet()) {  
                    String[] arr = map.get(key);  
                    //继续遍历数组  
                    for(int i=0;i<arr.length;i++){  
                        //编码  
                        try {  
                            arr[i]=new String(arr[i].getBytes("iso8859-1"),"utf-8");  
                        } catch (UnsupportedEncodingException e) {  
                            e.printStackTrace();  
                        }  
                    }  
                }  
                flag=false;  
            }  
            //需要遍历map 修改value的每一个数据的编码  
              
            return map;  
        }  
          
        return super.getParameterMap();  
    }  
      
}  

 

posted @ 2018-04-21 10:41  智行者  阅读(571)  评论(0)    收藏  举报