博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
过滤器解决请求中文乱码
阅读量:5740 次
发布时间:2019-06-18

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

hot3.png

1、配置一个过滤器,拦截所有请求

package cn.demo.filter;import java.io.IOException;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.HttpServletResponse;/** * 全栈乱码过滤器 *  */public class MyFilter implements Filter {	private String value;	private String type;	@Override	public void init(FilterConfig filterConfig) throws ServletException {		value = filterConfig.getInitParameter("encoding");		type = filterConfig.getInitParameter("type");	}	@Override	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)			throws IOException, ServletException {		// 强转成子接口类型,使用更多api		HttpServletRequest httpServletRequest = (HttpServletRequest) request;		HttpServletResponse httpServletResponse = (HttpServletResponse) response;		MyRequest myRequest = new MyRequest(httpServletRequest);// 构造方法注入,MyResquest中重写三个方法,解决乱码		httpServletResponse.setContentType(type + ";charSet=" + value);		chain.doFilter(myRequest, httpServletResponse);	}	@Override	public void destroy() {	}}web.xml配置
MyFilter
cn.demo.filter.MyFilter
encoding
utf-8
type
text/html
MyFilter
/*

2、MyRequest类重写三个方法

package cn.demo.filter;import java.io.UnsupportedEncodingException;import java.util.Map;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletRequestWrapper;public class MyRequest extends HttpServletRequestWrapper {	private HttpServletRequest request;	private boolean flag = false;	public MyRequest(HttpServletRequest request) {		super(request);		this.request = request;	}	// 重写三个方法	@Override	public Map getParameterMap() {		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();			}		}		// 遍历取出每个元素,先编码,再解码		if ("get".equalsIgnoreCase(method)) {			if (!flag) {				Map
map = request.getParameterMap(); if (map != null && map.size() != 0) { // 遍历 for (String key : map.keySet()) { String[] values = map.get(key); if (values != null && values.length != 0) { for (int i = 0; i < values.length; i++) { try { // 每一个元素先编码再解码 values[i] = new String(values[i].getBytes("iso-8859-1"), "utf-8"); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } } flag = true; return map; } } return super.getParameterMap(); } @Override public String[] getParameterValues(String name) { Map
map = getParameterMap(); if (map != null && map.size() != 0) { String[] values = map.get(name); if (values != null && values.length != 0) { return values; } } return super.getParameterValues(name); } @Override public String getParameter(String name) { Map
map = getParameterMap(); if (map != null && map.size() != 0) { String[] values = map.get(name); if (values != null && values.length != 0) { return values[0]; } } return super.getParameter(name); }}

转载于:https://my.oschina.net/bob1900/blog/799471

你可能感兴趣的文章
underscore.js学习笔记
查看>>
windows下常用命令
查看>>
1.5编程基础之循环控制_29:数字反转
查看>>
iptables的CLUSTER target与以太网交换机的思想
查看>>
组策略 之 设备安装设置
查看>>
人工智能还能干这些?这8种AI应用你可能意想不到
查看>>
实现Hyper-V 虚拟机在不同架构的处理器间迁移
查看>>
linux根目录下的文件解析
查看>>
简单使用saltstack
查看>>
针对web服务器容灾自动切换方案
查看>>
LTE学习笔记(一)——背景知识
查看>>
突破媒体转码效率壁垒 阿里云首推倍速转码
查看>>
容器存储中那些潜在的挑战和机遇
查看>>
程序员该懂一点儿KPI
查看>>
R语言的三种聚类方法
查看>>
55%受访企业将物联网战略视为有效竞争手段
查看>>
深入理解Python中的ThreadLocal变量(上)
查看>>
如果一切即服务,为什么需要数据中心?
查看>>
《游戏开发物理学(第2版)》一导读
查看>>
Erlang简史(翻译)
查看>>