是什么?

一种可以在Servlet处理请求之前和应答之后实现一定功能处理的技术。

能干什么?

能够在一个request到达servlet之前预处理request,也可以在离开servlet时

处理response。通常实现如下功能:

  1.在servlet被调用之前截获请求

  2.在servlet被调用之前检查请求的次数

  3.根据需要修改request头和数据

  4.在servlet呗调用之后截获相应

  5.根据需要修改response头和数据

过滤器Filter_微信公众号

过滤器Filter_xml_02

过滤器Filter_微信公众号_03

一个最最简单的demo

     结构:

  页面请求---->MyFilter---->MyServlet

  页面请求如下:

  过滤器Filter_配置文件_04

  MyFilter如下:

  过滤器Filter_数据_05

  注:前置部分可以写判断语句,符合条件调用chain.doFilter(req,resp);进入下一阶段的servlet!

    如果不满足条件,不调用chain.doFilter(req,resp);则返回到前一阶段!

  MyServlet如下:

  过滤器Filter_xml_06

  配置文件web.xml如下:

  过滤器Filter_大数据_07

  注:filter与servlet的配置极其类似。

    其中,filter中的url-pattern为过滤监控范围;

    /*:表示当前web项目的所有请求。也可以写/a/b/*等

     demo结果如下:

  过滤器Filter_配置文件_08

      注:结果表明MyFilter过滤器监控到页面的请求,并且成功进入到MyServlet

     不调用chain.doFilter(req,resp);

  结果如下:

  过滤器Filter_微信公众号_09

  注:结果表明MyFilter过器监控到页面的请求,由于未调用chain.doFilter(req,resp);

  所以未能到MyServlet!

过滤器示例-替换非法数据

      Filter示例

    功能:根据业务需要,把请求中非法的数据替换成不合法

  RequestWrapper

    request对象的包装器,可以通过它来定制request对象的功能

  ResponseWrapper

    response对象的包装器,可以通过它来定制response对象的功能

  RequestWrapper和ResponseWrapper使用的都是装饰模式,对原始的request和response

  对象进行添加或是替换某些功能!

过滤器Filter_xml_10

 

注:该方法实现将request方法提交的参数值中的"cc"替换为"javass"

 

 

 

过滤器Filter_配置文件_11

过滤器Filter_xml_12

过滤器Filter_数据_13

过滤器Filter_微信公众号_14

过滤器Filter_配置文件_15

 

欢迎关注微信公众号:大数据从业者