web.xml配置
<filter>
<filter-name>demo2</filter-name>
<filter-class>com.filter.demoFilter2</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>demo2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
过滤器配置
package com.filter;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
@WebFilter(filterName = "demoFilter2")
public class demoFilter2 implements Filter {
private String charset;
public void init(FilterConfig config) throws ServletException {
charset = config.getInitParameter("encoding");
System.out.println(charset);
}
public void destroy() {
charset=null;
}
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
//在访问之前就把中文乱码处理了
//处理post方式的中文乱码问题
if (charset!=null){
req.setCharacterEncoding(charset);
resp.setCharacterEncoding(charset);
}
HttpServletRequest request=(HttpServletRequest)req;
//实例化一个自定义的增强版的处理get请求的中文乱码request对象
zqRequest zqreq=new zqRequest(request);
System.out.println("method:"+request.getMethod());
//获取请求方式是post或get,根据不同的请求方式分别处理乱码问题
if (request.getMethod().equals("POST")){
chain.doFilter(req,resp); //处理post方式中文乱码问题
}else {
chain.doFilter(zqreq,resp); //处理get方式中文乱码问题
}
}
}
增强request配置
package com.filter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import java.io.UnsupportedEncodingException;
public class zqRequest extends HttpServletRequestWrapper {
private HttpServletRequest request;
public zqRequest(HttpServletRequest request) {
super(request);
this.request=request;
}
@Override
public String getParameter(String name){
String parameter=request.getParameter(name);
try {
new String(parameter.getBytes("ISO8859-1"),"utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return parameter;
}
}