过滤器介绍
- 什么是过滤器?
filter是对客户端访问资源的过滤,符合条件放行,不符合条件不放行,并且可以对目标资源访问前后进行逻辑处理。 - 过滤器编写步骤
1.编写一个过滤器的类实现Filter接口
2.实现接口中尚未实现的方法(着重实现doFilter方法)
3.在web.xml中进行配置(主要是配置要对哪些资源进行过滤)
@WebFilter(filterName = "Filter")
public class Filter implements javax.servlet.Filter {
public void destroy() {
}
/*是否对请求进行放行*/
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
System.out.println("doFilter");
chain.doFilter(req, resp);
}
public void init(FilterConfig config) throws ServletException {
}
}
<filter>
<filter-name>myfilter</filter-name>
<filter-class>org.youyuan.servlet.Filter</filter-class>
</filter>
<filter-mapping>
<filter-name>myfilter</filter-name>
<url-pattern>/Servlet5</url-pattern>
</filter-mapping>
- 访问一个资源的时候,会被过滤器拦截
要在过滤器当中进行放行之后, 才能够访问到对应的servlet
chain.doFilter(req,res);
过滤器的访问流程
1.在发送一个请求时, web容器会先到filter当中,创建三个参数,res,req,chain。
2.在过滤器当中,放行之后,才能够访问到对应的资源。
3.中间的过滤器可能有多个,在一个过滤器当中,可以调用另外一个过滤器。
4.也有可能过滤器没有拦截所有的资源,有些资源可以直接被访问。
filter生命周期
- init方法
当filter对象创建时调用,当服务器启动时创建,因为有可能一个filter对应多个servlet,启动时, 先把filter准备好, 访问资源时就可以进行过滤了。 - filterconfig
当前filter对象的配置信息,和servletConfig差不多, 获取名称,参数,获取servletContext对象,先有的ServletContext。 - dofitter
当匹配到mapping时调用dofilter
参数:
1.res
2.req
3.FilterChain:过滤器链对象,内部维护着各个filter的索引,并且知道所有filter的顺序,是根据mapping的顺序来执行的。 - destroy
当filter对象销毁时调用,关闭服务器时销毁对象,和servletContext的生命周期是一样。