1.创建一个类来继承filter类并导入import javax.servlet.Filter; 并实现里面的方法
public class EncodeFilter implements Filter {
private String encode = null;//针对post提交方式 设置字符编码
//过滤器释放资源
public void destroy() {
encode = null;
}
//过滤器
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
// 设置post字符编码
if (req.getMethod().equals("post")) {
if (request.getCharacterEncoding() == null) {
request.setCharacterEncoding(encode);
chain.doFilter(request, response);//过滤放行
}
}
else{
EncodeingRequest myRequest = new EncodeingRequest(req);
chain.doFilter(myRequest, response);//过滤放行
}
}
//初始化
public void init(FilterConfig filterConfig) throws ServletException {
String encode = filterConfig.getInitParameter("encode");
if (this.encode == null) {
this.encode = encode;
}
}
}
2.针对post提交要配置web.xml文件。获得filter初始化参数 /*代表所有类型的都要进过滤
<filter>
<filter-name>EncodeFilter</filter-name>
<filter-class>message.sevlet.filter.EncodeFilter</filter-class>
<init-param>
<param-name>encode</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>EncodeFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
3.针对get提交解决乱码问题 导入 import javax.servlet.http.HttpServletRequestWrapper;
//创建一个类来继承 HttpServletRequestWrapper 重写getParameter方法
public class EncodeingRequest extends HttpServletRequestWrapper {
private HttpServletRequest request;
public EncodeingRequest(HttpServletRequest request) {
super(request);
this.request = request;
}
// 重写getParameter
// 4、重写getParameter方法
@Override
public String getParameter(String name) {
try {
// 得到原来的参数
String value = request.getParameter(name);
// 增强
value = new String(value.getBytes("ISO-8859-1"), "utf-8");
// 返回增强后的内容
return value;
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
}