Servlet 过滤器( Filter )

Servlet 过滤器( Filter )

  • 原理图:
    在这里插入图片描述

  • 过滤器的使用场景

    • 登录权限验证、资源访问权限控制、敏感词汇过滤、字符编码转换
  • 过滤器的优势

    • 便于代码重用,不必每个servlet中还要进行相应的操作
  • 配置方式

    • web配置方式

      • <!--过滤器的xml配置  -->
        <filter>
        	<!--名称-->
        	<filter-name>sf</filter-name>
        	<!--过滤器类全称-->
        	<filter-class>com.qf.web.filter.SecondFilter</filter-class>
        </filter>
        <!--映射路径配置-->
        <filter-mapping>
            <!--名称-->
            <filter-name>sf</filter-name>
            <!--过滤的url匹配规则和Servlet的一模一样-->
            <url-pattern>/*</url-pattern>
        </filter-mapping>
        
    • 注解方式

      • 在过滤的类中加上注解 @WebFilter(“/*”)
      • 过滤的路径=访问的路径过程中含过滤路径(格式),即执行对应的过滤器类

过滤器( Filter )类的运行原理及运行顺序

  • Filter代码
  • Filter为 接口,写一个类去实现它
@WebFilter("/*")
public class demo implements Filter {

	//销毁--执行一次
	public void destroy() {
		// TODO Auto-generated method stub
	}
	//进行过滤时执行的方法
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
		// TODO Auto-generated method stub
		// 过滤前
	chain.doFilter(request, response);//过滤条件通过后,进入下一个过滤器(有过滤器)/到达目标请求
		//过滤后
	}
	//初始化--执行一次
	public void init(FilterConfig fConfig) throws ServletException {
		// TODO Auto-generated method stub
	}

}
  • 图示
    在这里插入图片描述

Filter链中–Filter运行顺序

  • 在一个web应用中,可以开发编写多个Filter,这些Filter组合起来称之为一个Filter链
  • 执行顺序
Filter仅以web.xml 方式配置 按照web.xml中Filter定义的顺序执行
Filter仅以注解 方式配置 按照Filter类文件的类名,按字典序执行
Filter以web.xml和注解方式配置 web.xml中的内容优先执行,其次是注解
(同种配置方式,按上述规则执行)

Filter 初始化

  • 注解方式

    • @WebFilter(value="/*",initParams= {@WebInitParam(name=“version”, value=“1.0”)})
  • web.xml方式

    <!--过滤器的xml配置  -->
    <filter>
        <filter-name>myfilter</filter-name>
        <filter-class>com.qf.web.filter.SecondFilter</filter-class>
    <!--过滤器的初始化参数  -->
        <init-param>
          <param-name>version</param-name>
          <param-value>1.0</param-value>
        </init-param>
    </filter>
    <filter-mapping>
          <filter-name>myfilter</filter-name>
          <url-pattern>/*</url-pattern>
    </filter-mapping>
    
  • Filter初始化调用

public void init(FilterConfigfConfig) throws ServletException {
    // TODO Auto-generated method stub
    System.out.println("init......初始化");
    System.out.println("初始化参数:版本号:"+fConfig.getInitParameter("version"));
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章