过滤器(Filter)你知多少

过滤器

过滤器实际上就是对web资源进行的拦截,filter是Servlet的规范它是处于客户端与服务器资源文件之间的一道过滤网 。通俗的来讲,就是你想要访问我的服务器,就需要首先通过过滤器的层层检查,然后你的请求才会被servlet处理。
在这里插入图片描述
过滤器是配置在web.xml文件中的

<!--在web.xml里面设置拦截器-->
 
<filter>          
  <filter-name>XxxFilter</filter-name>         
  <filter-class>XxxFilter类的全限定名</filter-class>
  <init-param>
        <param-name>encoding</param-name>
        <param-value>GB2312</param-value>
    </init-param>
</filter>   

<filter>
  <filter-name>XxxFilter1</filter-name>         
  <filter-class>XxxFilter1类的全限定名</filter-class>  
</filter>
 
 <filter-mapping>          
	<filter-name>XxxFilter</filter-name>          
	<!--表示:当前Filter只对哪些资源做过滤/拦截操作,只对hello.jsp做拦截  -->     
	<url-pattern>/hello.jsp</url-pattern>      
</filter-mapping>

 <filter-mapping>          
	<filter-name>XxxFilter1</filter-name>          
	<!--表示:当前Filter只对哪些资源做过滤/拦截操作,只对hello1.jsp做拦截  -->     
	<url-pattern>/hello1.jsp</url-pattern>      
</filter-mapping>

多个拦截器的执行顺序与web.xml文件中的filter-mapping的顺序有关。

详解

Filter三个生命周期方法

    @Override
    // Filter的初始化方法,在Servlet启动时调用
    //FilterConfig为Filter的配置和运行环境
    public void init(FilterConfig filterConfig) throws ServletException {
	
    }

    @Override
    // Filter进行拦截请求时,Servlet将调用doFilter方法
    //request 和response 分别对应本次访问请求的请求体和响应体,chain则表示Filter链的对象
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {

    }

    @Override
    // 在Servlet对象被销毁时调用,只能执行一次,释放资源
    public void destroy() {

    }
Filter链

在一个web应用中,可以定义很多歌Filter拦截器对象,这些Filter组成一个Filter链(过滤器链)。
多个Filter(过滤器)的拦截顺序与他们在Web.xml中映射(filter-mapping)顺序一致。一个Filter执行完之后,会调用FilterChain.doFilter激活下一个Filter的doFilter方法。最后一个Filter.foFilter方法调用之后将会激活目标Servlet的service方法

FilterConfig接口

Filterconfig里面封装了Filter的配置参数信息。
FilterConfig接口定义的各个方法:

public interface FilterConfig {
	//返回<filter-name>元素设置的值
    String getFilterName();
	//返回FilterConfig对象中所包装的ServletContext对象的引用
    ServletContext getServletContext();
	//返回在web.xml文件中Filter所设置的某个名称的初始化的参数值
    String getInitParameter(String var1);
	//返回一个Enumeration集合对象
    Enumeration<String> getInitParameterNames();
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章