Servlet 学习(八)

Filter

1、功能

  • Java Servlet 2.3 中新增加的功能,主要作用是对Servlet 容器的请求和响应进行检查和修改
  • Filter 本身并不生成请求和响应对象,它只提供过滤作用

    在Servlet 被调用之前,检查Request 对象
      »可以对其Request Header 和Request 内容进行审查和修改
    在Servlet 调用结束之后,检查Response 对象
      »可以对其Response Header 和Response 内容进行审查和修改

  • Filter 可以过滤的Web 组件包括Servlet,JSP,HTML等
  • Filter主要负责拦截请求,和放行。
  • Filter 过滤过程

2、接口Filter

  • init( FilterConfig config )

    Filter 的初始化方法
    容器创建Filter 之后将调用这个方法
    使用这个方法可以读取web.xml 文件中定义的初始化参数

  • doFilter(ServletRequest req,ServletResponse resp ,FilterChain chain)

    该方法完成实际的过滤操作
    当客户请求访问与Filter 相关联的URL 时,将调用该方法
    chain 用于访问后续的Filter 或Servlet

  • destroy()

    容器在销毁Filter 实例前调用该方法
    该方法中可以释放该Filter 所占用的资源

  • Filter的生命周期

    Filter的创建和销毁由web服务器控制。

      »服务器启动的时候,web服务器创建Filter的实例对象,并调用其init方法,完成对象的初始化功能。filter对象只会创建一次,init方法也只会执行一次。

      »拦截到请求时,执行doFilter方法。可以执行多次。

      »服务器关闭时,web服务器销毁Filter的实例对象。

3、接口FilterChain

  • 过滤器链
  • 一组过滤器对某些web资源进行拦截,那么这组过滤器就称为过滤器链。过滤器的执行顺序和<filter-mapping>有关

  • 该接口中定义的方法

    doFilter(ServletRequest req,ServletResponse resp )
      »负责把所有的过滤器给串联起来
      »使得一个过滤器执行完后,下一个可以继续执行
      »被串联的多个过滤器按照配置文件中的映射顺序依次执行

4、创建Filter

  • 实现Filter
package ecut.filter.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class HelloFilter implements Filter {
    
    public void init(FilterConfig config) throws ServletException {
    }

    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException {
        // place your code here
        System.out.println( "hello" );
        
        // pass the request along the filter chain
        chain.doFilter( req, resp ); 
        
        System.out.println( "world" );
    }

    public void destroy() {
    }

}
  • 注册Filter
<filter>
    <filter-name>HelloFilter</filter-name>
    <filter-class>ecut.filter.filter.HelloFilter</filter-class>
</filter>
  • 发布Filter

    同Servlet 一样,url-pattern 可以写多个

    url-mapping匹配规则有三种:

      »精确匹配 —— 如/index.html,只会匹配index.html这个URL

      »路径匹配 —— 如/*,会匹配所有的URL

      »后缀匹配 —— 如*.html,会匹配所有以.html为后缀的URL

<filter-mapping>
    <filter-name>HelloFil
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值