JavaWeb三大组件之-Filter详述

什么是过滤器

过滤器JavaWeb三大组件之一,它与Servlet很相似!不它过滤器是用来拦截请求的,而不是处理请求的。

  • 当用户请求某个Servlet时,会先执行部署在这个请求上的Filter,如果Filter“放行”,那么会继承执行用户请求的Servlet;如果Filter不“放行”,那么就不会执行用户请求的Servlet。
  • 其实可以这样理解,当用户请求某个Servlet时,Tomcat会去执行注册在这个请求上的Filter,然后是否“放行”由Filter来决定。可以理解为,Filter来决定是否调用Servlet!当执行完成Servlet的代码后,还会执行Filter后面的代码。

在这里插入图片描述

过滤器实现

Filter接口

public class HelloFilter implements Filter {

	初始化:创建后马上执行 --- Filter在服务器启动时创建
	public void init (FilterConfig filterConfig) throws ServletException {}
	
	
	每次过滤时执行
	public void doFilter (ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		System.out.println("Hello Filter");
	}
	
	销毁前 --- 服务器关闭时销毁
	public void destroy () {}
}

FilterConfig参数

  • 获取初始化参数:getInitParameter()
  • 获取过滤器名称:getFilterName()
  • 获取appliction:getServletContext()

FilterChain参数

  • doFilter(ServletRequest, ServletResponse):放行!
    放行,就相当于调用了目标Servlet的service()方法!

Filter配置

  <filter>
  	<filter-name>helloFilter</filter-name>
  	<filter-class>cn.itcast.filter.HelloFilter</filter-class>
  </filter>
  
  <filter-mapping>
  	<filter-name>helloFilter</filter-name>
  	<url-pattern>/index.jsp </url-pattern>  /*通配符
  </filter-mapping>

 

多个过滤器的执行顺序

<filter-mapping>的配置顺序决定了过滤器的执行顺序!
 
 

四种拦截方式

其实过滤器有四种拦截方式!分别是:REQUEST、FORWARD、INCLUDE、ERROR。

  可配置多个
  <dispatcher>REQUEST</dispatcher>默认的!
  <dispatcher>FORWARD</dispatcher>
  <dispatcher>INCLUDE</dispatcher>
  <dispatcher>ERROR</dispatcher><filter-mapping>中进行配置!
  • REQUEST:直接访问目标资源时执行过滤器。包括:在地址栏中直接访问、表单提交、超链接、重定向,只要在地址栏中可以看到目标资源的路径,就是REQUEST;
  • FORWARD:转发访问执行过滤器。包括RequestDispatcher#forward()方法、<jsp:forward>标签都是转发访问;
  • INCLUDE:包含访问执行过滤器。包括RequestDispatcher#include()方法、<jsp:include>标签都是包含访问;
  • ERROR:当目标资源在web.xml中配置为<error-page>时,并且真的出现了异常,转发到目标资源时,会执行过滤器。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值