Filter :
Java中的Filter 并不是一个标准的Servlet ,它不能处理用户请求,也不能对客户端生成响应。 主要用于对HttpServletRequest 进行预处理,也可以对HttpServletResponse 进行后处理,是个典型的处理链。
过滤链的好处是,执行过程中任何时候都可以打断,只要不执行chain.doFilter()就不会再执行后面的过滤器和请求的内容。
1、filter的驱动:
在 web 应用程序启动时,web 服务器将根据 web.xml 文件中的配置信息来创建每个注册的 Filter 实例对象,并将其保存在服务器的内存中
<filter>
<filter-name>helloFilter</filter-name>
<filter-class>com.jalja.filter.HelloFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>helloFilter</filter-name>
<!-- 要拦截的资源 -->
<url-pattern>/freeMark</url-pattern>
</filter-mapping>
2、filter接口:
//destory() 在Web容器卸载 Filter 对象之前被调用。该方法在Filter的生命周期中仅执行一次。在这个方法中,可以释放过滤器使用的资源。
public void destroy()
//Filter 链的执行
//chain.doFilter(request, response);//把请求传给下一个filter,如果该filter是该filter链的最后一个filter,则把请求给目标资源
public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain)
//类似于servlet的init方法,在创建Filter对象时被调用,只调用一次,对当前的filter进行初始化操作,filter单例
//FilterConfig 类似于servletConfig 可以获得Filter的初始化参数信息
public void init(FilterConfig filterConfig)
3、filter 拦截顺序:
web.xml中配置多个filter时构成filter链,他们的拦截顺序取决于<filter-mapping>的顺序
4、filter默认过滤的是 请求资源,如果是 其他方式的请求则过滤器无效 ,如果要使用就要在<filter-mapping>中添加<dispatcher>来指定过滤方式
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
<dispatcher>ERROR</dispatcher>