今天刷站找到一个Get、post请求中文乱码的一个工具类,具体视频连接 ↓
直接上代码
package com.zwlm.filter;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
/**
* 字符串乱码处理
* Tomcat8及以上 | Tomcat7及一下
* POST请求 乱码处理 |
* request.setCharacterEncoding("UTF-8"); |
* GET请求 不会乱码 | 乱码处理
* | new String(request.getParameter("参数名").getBytes("ISO-8859-1"),"UTF-8");
*/
@WebFilter("/*")
public class AEncodingFilter implements Filter {
//初始化
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
public AEncodingFilter(){
}
@Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain chain) throws IOException, ServletException {
//基于Http
HttpServletRequest request =(HttpServletRequest) arg0;
HttpServletResponse response=(HttpServletResponse) arg1;
//处理请求乱码(处理POST请求)
request.setCharacterEncoding("UTF-8");
//处理GET请求且服务器版本在Tomcat8以下的
String method=request.getMethod();
//如果是GET请求
if ("Get".equalsIgnoreCase(method)){
//服务器版本在Tomcat8以下的 Apache Tomcat/8.0.45
String serverInfo = request.getServletContext().getServerInfo();
//得到具体的版本号
String versionStr = serverInfo.substring(serverInfo.indexOf("/")+1,serverInfo.indexOf("."));
//判断服务器版本是否小于8
if (Integer.parseInt(versionStr)<8){
//得到自定义内部类(Mywapper继承了HttpServletRequestWapper对象,而HttpServletRequestWapper对象实现了HttpServletRequest接口,所以MyWapper的本质也是request对象)
HttpServletRequest myRequest = new MyWapper(request);
//放行资源
chain.doFilter(myRequest,response);
return;
}
}
//放行资源
chain.doFilter(request,response);
}
class MyWapper extends HttpServletRequestWrapper {
/**
* 定义成员变量,提升构造器中的request对象的范围
*/
private HttpServletRequest request;
public MyWapper(HttpServletRequest request) {
super(request);
this.request=request;
}
/**
* 重写getParameter()方法、
*/
@Override
public String getParameter(String name) {
String value=request.getParameter(name);
if (value!=null && !"".equals(value.trim())){
//将默认ISO-8859-1 编码的字符串转换成UTF-8
try {
value=new String(value.getBytes("ISO-8859-1"),"UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
return value;
}
}
}