1.Filter原理(执行流程):
当客户端发出Web资源的请求时,Web服务器根据应用程序配置文件设置的过滤器规则进行检查,若客户请求满足过滤器规则,则对客户请求/响应进行拦截,对请求头和请求数据进行检查或者改动,并依次通过过滤器链,最后把请求/响应交给Web资源处理。请求信息在过滤器中可以被修改,也可以根据条件绕不过请求不发往资源处理器,并直接向客户机发回一个响应。当资源处理器完成了对资源的处理后,响应信息将逐级逆向返回。同样在这个过程中,用户可以修改响应信息,从而完成一定的任务。
当一个请求符合某个过滤器的过滤条件时该请求就会交给这个过滤器去处理。那么当两个过滤器同时过滤一个请求时谁先谁后呢?这就涉及到了过滤连FilterChain。
服务器会按照web.xml中Filter定义的先后顺序组成一条链,然后依次执行其中的doFilter方法。
2.Filter并不是一个Servlet。所有的过滤器都必须实现Filter接口。该接口定义了init,doFilter(),destory()三个方法。
过滤器(Filter):Servlet过滤器是在Java Servlet规范2.3中定义的。它能够对Servlet容器的请求和响应对象进行检查和修改。
Servlet过滤器本身并不生成请求和响应对象,它只提供过滤作用。Servlet过滤器能够在Servlet被调用之前检查Request对象,修改Request Header和Request内容。
在Servlet被调用之后检查Response对象,修改Response Header 和 Response内容。Servlet过滤器负责过滤的Web组件可以是Servlet,JSP或HTML文件。
Filter的doFilter之后别忘了写chain 的chain.doFilter(request,response)
一旦Filter启动失败就会导致整个web启动失败