JavaWeb学习笔记 | Filter简介

本文介绍了JavaWeb中的Filter,其主要功能是对Servlet容器调用Servlet进行拦截,讲解了Filter的三大接口,创建Filter的步骤,并详细阐述了Filter的init、doFilter和destroy方法及其应用场景。

1. Filter简介

  1. Filter的基本功能是对Servlet容器调用Servlet的过程进行拦截,从而在Servlet进行响应处理的前后实现一些特殊的功能。
  2. 在Servlet API中定义了三个接口类来供开发人员编写Filter程序:Filter,FilterChain,FilterConfig
  3. Filter程序是一个实现了Filter接口的Java类,与Servlet程序相似,它由Servlet容器进行调用和执行
  4. Filter程序需要在Web.xml文件中进行配置和映射
  5. 与开发Servlet不同的是,Filter接口并没有相应的实现类可供继承,要开发过滤器,只能直接实现Filter接口

2. 创建一个Filter的过程

  1. 创建一个Filter类,实现Filter接口
  2. 在web.xml文件中配置并映射该Filter类,其中url-pattern指定该Filter可以拦截哪些资源,即可以通过哪些url访问到该Filter

配置的demo:

<!-- 注册Filter -->
<!-- 可以注册和映射多个Filter-->
<filter>
	<filter-name>HelloFilters</filter-name>
	<filter-class>HelloFilter</filter-class>
</filter>
<!-- 映射Filter -->
<filter-mapping>
	<filter-name>HelloFilters</filter-name>   
	<!-- 要拦截的资源 -->
	<url-pattern>/test.jsp</url-pattern>
</filter-mapping>

3. 相关API

(1).init:类似于Servlet的init方法,在创建Filter对象(Filter对象在Servlet容器加载当前WEB应用时即被创建)后,立即被调用,且只被调用一次。该方法用于对当前的Filter进行初始化操作。Filter实例是单例的

//FilterConfig类似于ServletConfig,可以在web.xml文件中配置当前 Filter的初始化参数,配置方式也和Servlet类似
public void init(FilterConfig filterConfig);

在web.xml中配置当前Filter的初始化参数实例如下:

<filter>
	<filter-name>HelloFilters</filter-name>
    <filter-class>HelloFilter</filter-class>
    <init-param>
    	<param-name>name</param-name>
    	<param-value>root</param-value>
    </init-param>
</filter>

(2).doFilter:真正Filter的逻辑代码需要编写在该方法中,每次拦截都会调用该方法

public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain);
    
//FilterChain接口:
//Filter链,多个Filter可以构成一个Filter链
//FilterChain有一个方法:doFilter(ServletRequest request,ServletResponse response):把请求传给Filter链的下一个
//若当前Filter是Filter链的最后一个Filert,则把请求给到目标Servlet(或JSP)
    
//多个Filter拦截的顺序和与他们在应用程序的web.xml中映射的顺序一致(靠前的先被拦截)

demo:

@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
     System.out.println("do");

     //把请求传给Filter链的下一个,如果是最后一个,则把请求给到目标Servlet(或JSP)
     filterChain.doFilter(servletRequest,servletResponse);
}

(3). destroy:释放当前Filter所占用的资源的方法,在Filtet被销毁之前被调用,且只被调用一次。

public void destroy();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值