Servlet-使用Filter全局过滤中文乱码
发布日期:2021-06-30 18:41:02 浏览次数:7 分类:技术文章

本文共 2233 字,大约阅读时间需要 7 分钟。

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
getParameterMap() { Map
map = req.getParameterMap(); if (flag) { for (Map.Entry
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配置

GlobalFilter
com.lqr.filter.GlobalFilter
GlobalFilter
/*
...
...

转载地址:https://linqiarui.blog.csdn.net/article/details/52901898 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:eclipse修改servlet模板的方法
下一篇:Filter过滤器快速入门

发表评论

最新留言

网站不错 人气很旺了 加油
[***.192.178.218]2024年04月12日 09时51分27秒