过滤器filter学习

 

/
开发web应用时,可以开发多个filter,
通过这些filter可以实现对一个或一组WEB资源进行访问拦截,
从而实现一些特殊的功能。
例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。


<dispatcher>指定过滤器所拦截的资源被 Servlet 容器调用的方式,
可以是REQUEST,INCLUDE,FORWARD和ERROR之一,默认REQUEST。
用户可以设置多个<dispatcher> 子元素用来指定 Filter 对资源的多种调用方式进行拦截。

<dispatcher> 子元素可以设置的值及其意义:
REQUEST:当用户直接访问页面时,Web容器将会调用过滤器。
 如果目标资源是通过RequestDispatcher的include()或forward()方法访问时,
 那么该过滤器就不会被调用。
 
INCLUDE:如果目标资源是通过RequestDispatcher的include()方法访问时,
 那么该过滤器将被调用。除此之外,该过滤器不会被调用。
 
FORWARD:如果目标资源是通过RequestDispatcher的forward()方法访问时,
 那么该过滤器将被调用,除此之外,该过滤器不会被调用。
 
ERROR:如果目标资源是通过声明式异常处理机制调用时,
 那么该过滤器将被调用。除此之外,过滤器不会被调用


和我们编写的Servlet程序一样,Filter的创建和销毁由WEB服务器负责

///?
 当客户端每次访问filter拦截的资源时,Web容器针对每次访问请求,
 都会调用一次filter对象的doFilter方法。
 doFilter方法是filter接口中最重要的方法,
 应用程序编程人员通常在这个方法内编写代码,体现拦截的目的
 
 //
 /
 应用:
 1.统一全站字符编码的过滤器

 2.禁止浏览器缓存所有动态页面的过滤器:
  response.setDateHeader("Expires",-1);
  response.setHeader("Cache-Control","no-cache");?
  response.setHeader("Pragma","no-cache");

 3.控制浏览器缓存页面中的静态资源的过滤器
  这个tomcat服务器已实现了,当这个页面第二次访问时,这些静态资源是不会再
  往浏览器发这些数据,如js,css等静态资源
 
 4.使用Filter实现URL级别的权限认证
   这样可以对不同权限的用户进行过滤,他是否具有访问某些目录的权限
   
 5.实现对request、response对象进行包装
  使用Decorator模式包装request对象,实现html标签转义功能
  使用Decorator模式包装response对象,响应内容的压缩功能
  
  在自定义的response对象中,重写getOutputStream方法和getWriter方法,
  使目标资源调用此方法输出页面内容时,
  获得的是我们自定义的ServletOutputStream对象。
 在我们自定义的ServletOuputStream对象中,重写write方法,
 使写出的数据写出到一个buffer中。(ByteArrayOutputStream)
///缓存,压缩
 当页面完成输出后,在filter中就可得到页面写出的数据,
 从而我们可以调用GzipOuputStream对数据进行压缩后再写出给浏览器,
 以此完成响应正文件压缩功能。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值