概述
- 过滤器是运行在服务器端的程序,在与之相关的Servlet或JSP之前运行,实现对请求资源的过滤功能。
- 生命周期
服务器启动的时候,就会创建过滤器的对象。服务器关闭,就会销毁过滤器对象。
实现
应用
- post方式:请求编码处理
- get方式:利用装饰者模式,对request对象进行包装
/**
* 通用编码过滤器
*/
public class GenericEncodingFilter 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;
// 装饰者模式
MyHttpServletRequestWrapper myReq = new MyHttpServletRequestWrapper(req);
response.setContentType("text/html;charset=utf-8");
chain.doFilter(myReq, response);
}
@Override
public void destroy() {}
}
public class MyHttpServletRequestWrapper extends HttpServletRequestWrapper {
private HttpServletRequest request;
public MyHttpServletRequestWrapper(HttpServletRequest request) {
super(request);
this.request = request;
}
@Override
public String getParameter(String name) {
String method = request.getMethod();
if ("get".equalsIgnoreCase(method)) {
try {
return new String(request.getParameter(name).getBytes("iso-8859-1"),"utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
} else if ("post".equalsIgnoreCase(method)) {
try {
request.setCharacterEncoding("utf-8");
return request.getParameter(name);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
return request.getParameter(name);
}
}