Servlet-使用Filter全局过滤中文乱码

来源:互联网 发布:快手视频配音软件 编辑:程序博客网 时间:2024/05/16 11:01

1、GlobalFilter类编写

/** * @author CSDN_LQR * @TODO 全局中文过滤器(适用get和post请求参数的中文乱码问题,从此不同在servlet中对参数做处理) */public class GlobalFilter implements Filter {    @Override    public void destroy() {    }    @Override    public void doFilter(ServletRequest request, ServletResponse response,            FilterChain chain) throws IOException, ServletException {        HttpServletRequest req = (HttpServletRequest) request;        // 解决POST请求参数乱码问题        // request.setCharacterEncoding("UTF-8");        req = new MyRequest(req);        chain.doFilter(req, response);    }    @Override    public void init(FilterConfig filterConfig) throws ServletException {    }}

2、MyRequest类编写

/** * @author CSDN_LQR * @TODO 使用装饰模式包装HttpServletRequest,解决getParamter中文乱码问题 */class MyRequest extends HttpServletRequestWrapper {    private HttpServletRequest req;    private boolean flag = true;// 标记是否getParameterMap方法还未被调用过(如果在同个servlet中调用了2次getParameter等方法2次,没有用flag做标记的话,会对参数进行2次编码,结果第2次得到的参数会是乱码)    public MyRequest(HttpServletRequest request) {        super(request);        req = request;    }    @Override    public String getParameter(String name) {        return getParameterMap().get(name)[0];    }    @Override    public String[] getParameterValues(String name) {        return getParameterMap().get(name);    }    @Override    public Map<String, String[]> getParameterMap() {        Map<String, String[]> map = req.getParameterMap();        if (flag) {            for (Map.Entry<String, String[]> entry : map.entrySet()) {                String[] value = entry.getValue();                for (int i = 0; i < value.length; i++) {                    try {                        value[i] = new String(value[i].getBytes("iso-8859-1"),                                "UTF-8");                    } catch (UnsupportedEncodingException e) {                        e.printStackTrace();                    }                }            }            flag = false;        }        return map;    }}

3、web.xml配置

<?xml version="1.0" encoding="UTF-8"?><web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">    <!-- filter要放在servlet之前 -->    <filter>        <filter-name>GlobalFilter</filter-name>        <filter-class>com.lqr.filter.GlobalFilter</filter-class>    </filter>    <filter-mapping>        <filter-name>GlobalFilter</filter-name>        <url-pattern>/*</url-pattern>    </filter-mapping>    <servlet>        ...    </servlet>    <servlet-mapping>        ...    </servlet-mapping></web-app>
0 0