Filter过滤器入门

来源:互联网 发布:迪昂维特斯数据 编辑:程序博客网 时间:2024/04/30 00:31
1、编写类 实现 Filter接口
2、在服务器端注册 Filter (配置拦截哪个web资源) ----- web.xml 
  <!-- 注册过滤器 -->
  <filter>
  <filter-name>Filter1</filter-name>
  <filter-class>cn.itcast.filter.Filter1</filter-class>
  </filter>
  <!-- 配置过滤器去拦截哪个资源 -->
  <filter-mapping>
  <filter-name>Filter1</filter-name>
  <url-pattern>/hello.jsp</url-pattern>
  </filter-mapping>


3、客户端访问被拦截目标资源之前,服务器调用Filter的doFilter方法 ,执行过滤
4、Filter的doFilter方法中传入 FilterChain, 如果调用FilterChain的doFilter 就会执行目标资源,否则目标资源不会执行 
chain.doFilter(request, response);


FilterChain
在客户端访问服务器web资源时,服务器端为一个web资源,配置多个过滤器拦截 ,这多个过滤器,就会组成过滤器链 FilterChain, 调用FilterChain的doFilter 表示要执行过滤器链下一个资源,如果当前过滤器已经是链上最后一个过滤器,就会执行目标资源 


* web服务器根据Filter在web.xml文件中的注册顺序<mapping>,决定先调用哪个Filter


Filter生命周期 init(FilterConfig) doFilter(request,response,filterChain) destroy() 
1、Filter对象在tomcat服务器启动时 创建,调用init方法  (只会创建一个对象,init方法执行一次)
2、doFilter 每次拦截目标资源时,执行
3、destroy 服务器关闭时执行 


FilterConfig 作用和 ServletConfig 类似,用来在Filter初始化阶段,将参数传递给过滤器
1、通过  String getInitParameter(String name)  获得过滤器初始化参数 
2、通过 ServletContext getServletContext() 获得ServletContext对象 
* FilterConfig 提供参数,是Filter类私有参数,Filter2的初始化参数,不能在Filter1 中进行获取 
* 配置全局参数,<context-param> 进行配置,通过ServletContext 获得 


<filter-mapping> 过滤器拦截配置
1、如果连接目标资源是一个Servlet,可以选择url和servlet名称两种配置方式 
<!-- 拦截/hello是Servlet 路径 -->
<url-pattern>/hello</url-pattern>
<!-- 拦截Servlet 还可以通过Servlet 名称进行拦截 -->
<servlet-name>HelloServlet</servlet-name>
2、url-pattern 和 Servlet中路径写法一样,有三种 : 完全匹配、目录匹配、扩展名匹配
3、<dispatcher>指定过滤器所拦截的资源被 Servlet 容器调用的方式
容器调用服务器端资源 有四种方式 
REQUEST、FORWARD、INCLUDE、ERROR
0 0