作用
Filter 是介于客户端(如浏览器)和目标资源(如 Servlet、JSP、静态文件)之间的一道“过滤网”或“安检门”。 它的核心作用是:在请求到达目标资源之前进行检查和预处理,以及在响应返回给客户端之前进行后处理和加工。
生命周期
观察代码
public interface Filter {
default public void init(FilterConfig filterConfig) throws ServletException {
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException;
default public void destroy() {
}
}
Filter内只有三个函数,初始化,执行,销毁。
过滤器随着web服务器的启动初始化,随服务器关闭而销毁
举例设置编码过滤器(结合HttpServlet(1))
- 依赖Filter
- 重写doFilter()方法
- 注意不要忘记写chain.doFilter(request, response); 它的作用是将请求和响应传递给过滤器链中的下一个组件,如果不调用这样会导致请求被拦截,无法到达目标 Servlet,客户端会一直等待响应。
public class SetCharacterEncoding implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
chain.doFilter(request, response);
response.setContentType("text/html;charset=UTF-8");
}
}
-
- 可以选择在web.xml中配置filter,代码规范filter要写在servlet上面
<filter> <filter-name>SetCharacterEncoding</filter-name> <filter-class>com.xiaozhang.com.SetCharacterEncoding</filter-class> </filter> <filter-mapping> <filter-name>SetCharacterEncoding</filter-name> <url-pattern>/hello</url-pattern> </filter-mapping> - 也可以选择使用注解
@WebFilter("/hello") public class SetCharacterEncoding implements Filter { ······ }
- 可以选择在web.xml中配置filter,代码规范filter要写在servlet上面
- @WebFilter("") ""中间是指定目录,如果写成
/*,就代表所有页面都用此过滤器,如果写成hello/*,就代表hello目录下的页面用测过滤器