Servlet——过滤器(fiter)

什么是过滤器?

过滤器是Servlet的一个组件,是设计模式中过滤器模式(又叫责任链模式)的一种经典实现

是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能————来自某一技术大牛

作用原理如下:

原理图

由此可见,过滤器对于每一个WEB开发人员来说都是一项不容错过的技术

那么,什么是过滤器,过滤器又是如何实现的呢?

过滤器(Filter)是能够为请求和响应的header和内容进行操作的一种特殊的web组件。特殊之处在于其本身并不直接生成web响应,而是拦截过滤web请求和响应。其作用过程如下图所示:

在这里插入图片描述

使用方法:

1. 实现接口:定义一个过滤器需要实现 javax.servlet.filter接口

2.实现接口方法

     (1) doFilter(ServletRequest,ServletResponse,FilterChain) :对请求数据进行拦截处理并使用 即相当于在此过滤器中放行

     (2)FilterChain.doFilter(ServletRequest,ServletResponse) 交由下web容器进行数据处理

    如果有过滤器链,则交由下一个过滤器进行处理

    (3) init(FilterConfig filterConfig); web容器启动时将实例化过滤器,之后将调用此方法读取web.xml 中设置的初始参数

    (4) 进行数据初始化操作

    (5)destroy()->在web容器销毁filter实例前用此方法

3. 在web.xml中注册过滤器或注解方式注册过滤器,如下所示:

1.在web.xml中注册过滤器

<filter>  声明过滤器
      <filter-name>过滤器名称</filter-name> 
      <filter-class>过滤器指向的限定包名以及过滤器类名</filter-class> 
      <init-param>
           <param-name>参数名称</param-name>
          <param-value>参数值</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>过滤器名称</filter-name> 
    <url-pattern>对那些地址进行拦截</url-pattern> 
    <servlet-name>指定要拦截的servlet名称,与web.xml文件定义的servlet命名一致</servlet-name>    
    <dispatcher>对那些请求进行拦截 </dispatcher>  
</filter-mapping>

}

@WebFilter (urlPatterns = "/newsServlet")
//(urlPatterns = "/newsServlet")代表过滤那个servlet实现类
public class NewsFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws 
    ServletException {
 
    }
 
    @Override
    public void doFilter(ServletRequest servletRequest,
     ServletResponse servletResponse, FilterChain filterChain)
     throws IOException, ServletException {
        System.out.println("经过了newsFilter过滤器..........");
        //执行doFilter()方法,则进入到下一个过滤器,即放行
        filterChain.doFilter(servletRequest,servletResponse);
    }
 
    @Override
    public void destroy() {
    }

}

过滤器的作用:

1.   过滤器可以动态地拦截请求和响应,以变换或使用包含在请求或响应中的信息,

也就是说可以监视,修改或以某种方式处理客户端与服务端下在交流的数据

2.过滤器是可用于 Servlet 编程的 Java 类,可以实现以下目的:

  (1)在客户端的请求访问后端资源之前,拦截这些请求。

  (2)在服务器的响应发送回客户端之前,处理这些响应。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

忱遥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值