欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

使用Filter和包装模式解决request/response乱码问题,filterresponse,package filt

来源: javaer 分享于  点击 48418 次 点评:12

使用Filter和包装模式解决request/response乱码问题,filterresponse,package filt


package 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;import javax.servlet.http.HttpServletResponse;/** * 使用此过滤器解决reqeust/response乱码问题 */public class CharacterFilter implements Filter {    @Override    public void init(FilterConfig fConfig) throws ServletException {}    @Override    public void doFilter(ServletRequest req, ServletResponse resp,            FilterChain chain) throws IOException, ServletException {        HttpServletRequest request = (HttpServletRequest) req;        HttpServletResponse response = (HttpServletResponse) resp;        req.setCharacterEncoding("utf-8");// 解决request乱码        resp.setContentType("text/html;charset=utf-8"); // 解决response乱码        if ("get".equalsIgnoreCase(request.getMethod())) {            CharacterRequest characterRequest = new CharacterRequest(request); // 使用包装的request            chain.doFilter(characterRequest, response);// 放行            return;        }        doFilter(request, response, chain);    }    @Override    public void destroy() {}}/** * 包装后的Request * @author 马隆博 */class CharacterRequest extends HttpServletRequestWrapper {    public CharacterRequest(HttpServletRequest request) {        super(request);    }    @SuppressWarnings("finally")    private String convertCharacter(String value) {        String resultValue = value;        try {            resultValue = new String(value.getBytes("ISO-8859-1"), "utf-8");//转换为utf-8        } catch (UnsupportedEncodingException e) {            e.printStackTrace();        } finally {            return resultValue;        }    }    @Override    public String getParameter(String name) {        String value = super.getParameter(name);// 调用被包装对象的方法        if (value != null){            value = convertCharacter(value);//转换字符        }        return value;    }    @Override    public Map<String, String[]> getParameterMap() {        Map<String, String[]> map = super.getParameterMap();        if (map != null) {            // 遍历转换字符            for (String[] values : map.values()) {                for (String value : values) {                    value = convertCharacter(value);                }            }        }        return map;    }    @Override    public String[] getParameterValues(String name) {        String[] values = super.getParameterValues(name);        if (values != null) {            // 遍历转换字符            for (String value : values) {                value = convertCharacter(value);            }        }        return values;    }}//该片段来自于http://byrx.net
相关栏目:

用户点评