/**
*装饰者模式:
* a.装饰者类和被装饰者类必须实现同一个接口或继承同一个类
* b.在装饰者类中,必须要有被装饰者的引用
* c.在装饰者类中对需要增强的方法,进行增强
* d.在装饰者类中对不需要增强的方法,调用原来的业务逻辑
*HttpServletRequestWrapper:
* 提供HttpServletRequest接口的实现,Servlet开发人员只要继承子类接口就可以了.
*
*/
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;
public class EncodingFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
String method = req.getMethod();
if("get".equalsIgnoreCase(method)){
MyRequest myRequest = new MyRequest(req);
//放行
chain.doFilter(myRequest, response);
}else if("post".equalsIgnoreCase(method)){
req.setCharacterEncoding("utf-8");
//放行
chain.doFilter(req, response);
}else{
//放行
chain.doFilter(request, response);
}
}
@Override
public void destroy() {
}
}
import java.io.UnsupportedEncodingException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
public class MyRequest extends HttpServletRequestWrapper{
public MyRequest(HttpServletRequest request) {
super(request);
}
@Override
public String getParameter(String name) {
//获取乱码的内容
String value = super.getParameter(name);
try {
return new String(value.getBytes("iso-8859-1"),"utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return super.getParameter(name);
}
}