当前位置: 首页 > news >正文

学习笔记_过滤器概述(过滤器JavaWeb三大组件之一)

      

过滤器Filter
Filter和Lister是Servlet规范里的两个高级特性。不同于Servlet,它们不用于处理客户端请求,只用于对request、
response进行修改或者对context、session、request事件进行监听
Filter意为滤镜或者过滤器,用于Servlet之外对request或者response进行修改。Filter提出了滤镜链的概念,一个
Filterchain包括多个F

1 什么是过滤器

  过滤器JavaWeb三大组件之,它与Servlet很相似!不它过滤器是用来拦截请求的,而不是处理请求的。

      当用户请求某个Servlet时,会先执行部署在这个请求上的Filter,如果Filter“放行”,那么会继承执行用户请求的Servlet;如果Filter不“放行”,那么就不会执行用户请求的Servlet。

      其实可以这样理解,当用户请求某个Servlet时,Tomcat会去执行注册在这个请求上的Filter,然后是否“放行”由Filter来决定。可以理解为,Filter来决定是否调用Servlet!当执行完成Servlet的代码后,还会执行Filter后面的代码。

                      

 

2 过滤器之hello world

  其实过滤器与Servlet很相似,我们回忆一下如果写的第一个Servlet应用!写一个类,实现Servlet接口!没错,写过滤器就是写一个类,实现Filter接口。

public class HelloFilter implements Filter {

    public void init[崔1] (FilterConfig filterConfig) throws ServletException {}

    public void doFilter[崔2] (ServletRequest request, ServletResponse response,

           FilterChain chain) throws IOException, ServletException {

       System.out.println("Hello Filter");

    }

    public void destroy[崔3] () {}

}

      

 [崔1]不去理会它 

 [崔2]当访问被拦截资源时,doFilter()方法会被调用!我们先不去管它的参数是什么作用! 

 [崔3]不去理会它 

 [崔4]指定要拦截的路径!当用户访问index.jsp页面时,HelloFilter就会被执行

 

第二步也与Servlet一样,在web.xml文件中部署Filter:

  <filter>

    <filter-name>helloFilter</filter-name>

    <filter-class>cn.itcast.filter.HelloFilter</filter-class>

  </filter>

  <filter-mapping>

    <filter-name>helloFilter</filter-name>

    <url-pattern>/index.jsp[崔4] </url-pattern>

  </filter-mapping>

 

        应该没有问题吧,都可以看懂吧!

         OK了,现在可以尝试去访问index.jsp页面了,看看是什么效果!

         当用户访问index.jsp页面时,会执行HelloFilter的doFilter()方法!在我们的示例中,index.jsp页面是不会被执行的,如果想执行index.jsp页面,那么我们需要放行!

    public void doFilter(ServletRequest request, ServletResponse response,  FilterChain chain) throws IOException, ServletException {

       System.out.println("filter start...");[崔5] 

       chain.doFilter(request, response);[崔6] 

       System.out.println("filter end...");[崔7] 

    }

 

 [崔5]执行index.jsp之前执行 

 [崔6]放行!表示执行index.jsp 

 [崔7]在执行index.jsp后执行这一句 

 

  

        有很多同学总是错误的认为,一个请求在给客户端输出之后就算是结束了,这是不对的!其实很多事情都需要在给客户端响应之后才能完成!

 


 

 

 

转载于:https://www.cnblogs.com/snowwhite/p/4639375.html

相关文章:

  • ldd查询命令或软件共享的函数库(动态)
  • 员工考勤系统
  • C# 打印本地PDF文件
  • javascript的位操作、整数、二进制
  • .net 按比例显示图片的缩略图
  • 线上解决问题分析
  • JavaScript定时机制setTimeout与setInterval研究
  • UVA 11174 Stand in a Line 树dp+算
  • HttpSessionListener的用法
  • JasperReports报表组15
  • BZOJ 1264: [AHOI2006]基因匹配Match( LCS )
  • 用Linux命令对两个文件进行连接操作
  • 一、小按钮和下面板---调试面板
  • memcached全面剖析–5. memcached的应用和兼容程序
  • 常见浏览器的兼容问题
  • 【vuex入门系列02】mutation接收单个参数和多个参数
  • 【附node操作实例】redis简明入门系列—字符串类型
  • 345-反转字符串中的元音字母
  • Angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
  • co模块的前端实现
  • express.js的介绍及使用
  • GraphQL学习过程应该是这样的
  • HTTP中GET与POST的区别 99%的错误认识
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • Magento 1.x 中文订单打印乱码
  • Octave 入门
  • orm2 中文文档 3.1 模型属性
  • react 代码优化(一) ——事件处理
  • Redux 中间件分析
  • SpiderData 2019年2月25日 DApp数据排行榜
  • Spring-boot 启动时碰到的错误
  • SQLServer插入数据
  • webpack入门学习手记(二)
  • 创建一个Struts2项目maven 方式
  • 技术攻略】php设计模式(一):简介及创建型模式
  • 近期前端发展计划
  • 推荐一个React的管理后台框架
  • 微信小程序设置上一页数据
  • 写代码的正确姿势
  • - 转 Ext2.0 form使用实例
  • 字符串匹配基础上
  • Java性能优化之JVM GC(垃圾回收机制)
  • ​520就是要宠粉,你的心头书我买单
  • # 安徽锐锋科技IDMS系统简介
  • (6)【Python/机器学习/深度学习】Machine-Learning模型与算法应用—使用Adaboost建模及工作环境下的数据分析整理
  • (9)YOLO-Pose:使用对象关键点相似性损失增强多人姿态估计的增强版YOLO
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (附源码)springboot高校宿舍交电费系统 毕业设计031552
  • (附源码)小程序儿童艺术培训机构教育管理小程序 毕业设计 201740
  • (黑马C++)L06 重载与继承
  • (六)软件测试分工
  • (免费领源码)Java#ssm#MySQL 创意商城03663-计算机毕业设计项目选题推荐
  • (实战)静默dbca安装创建数据库 --参数说明+举例
  • (已解决)报错:Could not load the Qt platform plugin “xcb“