1. Filter简介:
             Filter翻译为中文是过滤器的意思。
             Filter是JavaWeb的三大web组件之一:Servlet、Filter、Listener
             Filter的作用是在请求到达WEB资源(HTML、CSS、Servlet、JSP)之前进行拦截
             Filter需要交给Tomcat访问器管理
     Filter的作用:
             1.Filter可以在请求到达目标资源之前进行拦截
             2.Filter也可以放行请求
             3.Filter可以在响应到达浏览器之前做一个预处理(和servlet不一样的地方)
  2. 配置Filter:
             1.创建一个类实现Filter接口
             2.在web.xml文件中对Filter进行配置
              
  3. Filter的生命周期
                一个请求的发送,到响应返回是一个线程。
                Filter的生命周期,指的是Filter对象由被创建到被销毁的过程
                Filter的生命周期方法:
                    构造器:Filter的构造器在服务器启动时调用。 构造器只会调用一次,说明Filter也是单例多线程的。
                    init():在构造器被调用后,紧接着被调用。作用:用来初始化Filter。
                    doFilter():每一次拦截请求时都会调用。
                            参数:
                                    ServletRequest request  请求报文
                                    ServletResponse respons 响应报文
                                    FilterChain chain  该对象的作用就是放行请求:
                                    可以通过 chain.doFilter(request,response) 放行请求。
                                    当调用chain.doFilter()就相当于调用目标的资源的service方法。

destroy方法在项目停止时调用,用来在对象被销毁前做一些收尾工作。

4.  配置filter时的url-pattern的规则:

(暂时无图)

1.精确匹配:只有当目标资源的地址和url-pattern的地址一模一样时,Filter才会拦截资源
                                                 例子:/2.jsp , 只有当浏览器访问项目根目录下的2.jsp时,才会调用Filter
                           2.路径匹配:当访问的资源在url-pattern配置的路径下时,Filter就会拦截资源。
                                                 例子1:/hello/* , 只要访问项目根目录下hello下的资源,就会调用Filter。
                                                 例子2:/* , 会拦截项目根目录下所有资源
                           3.后缀匹配:只要访问的资源地址和url-pattern的后缀一样就会调用Filter
                                                 例子:*.jsp 只要是以jsp结尾的请求都会拦截
   
                           特殊!!!当使用Filter拦截一个Servlet时,可以将Filter的url-pattern和Servlet的url-pattern一样这样Filter就会拦截发送到Servlet的请求。 也可以通过在

filter-mapping中添加一个servlet-name标签来设置要拦截的Servlet的name

5. Filter的执行顺序
                           我们可以为一个资源设置多个过滤器,当我们为一个资源设置了多个过滤器时,这些过滤器就组成一个Filter链的结构。
                           当我们去掉用chain.doFilter(),如果该过滤器后边还有其他的过滤,相当于调用了下一个过滤器doFilter()方法,如果过滤器后没有其他的过滤器,我们调用chain.doFilter()相当于调用了目标资源的service()方法。
                           多个Filter的执行顺序,有filter-mapping标签的配置顺序决定,filter-mappint靠前,则filter先执行,靠后则后执行。
                           我们可以通过修改filter-mapping的顺序来修改Filter的执行顺序


         6.  HttpFilter
                           仿写HttpFilter,仿写和HttpServlet一致!

(暂时无图)

7.  dispatcher
                            Filter默认只会拦截直接向目标资源发送的请求,而像转发之类的请求不会拦截,但是可以在在filter-mapping的dispatcher标签中来指定过滤器要拦截的请求类型。

<dispatcher>REQUEST</dispatcher>
                            代表拦截发送到目标资源的直接请求,如果不指定dispatcher默认值就是REQUEST
                            <dispatcher>FORWARD</dispatcher>
                            FORWARD代表会拦截通过转发访问目标资源的请求。
                            <dispatcher>INCLUDE</dispatcher>
                            INCLUDE会拦截动态包含的请求。
                            <dispatcher>ERROR</dispatcher>
                            ERROR是拦截在web.xml中声明的错误页面的
                                我们可以在web.xml文件进行一个错误页面的映射,通过如下标签:
                                  <error-page>
                                    <error-code>404</error-code>
                                   <location>/4.jsp</location>
                                 </error-page>
                            error-code指的是发生错误的代码
                            location 发生错误以后去到的页面

170815-关于Filter的知识点的更多相关文章

  1. filter的知识点 和 实例

    一.过滤器Filter 1.filter的简介 filter是对客户端访问资源的过滤,符合条件放行,不符合条件不放行,并且可以对目    标资源访问前后进行逻辑处理 2.快速入门 步骤: 1)编写一个 ...

  2. stark - filter、pop、总结

    一.filter 效果图 知识点 1.配置得显示Filter,不配置就不显示了 list_filter = ['title','publish', 'authors'] 2.前端显示 后端返回 字典 ...

  3. django 操作数据库--orm(object relation mapping)---models

    思想 django为使用一种新的方式,即:关系对象映射(Object Relational Mapping,简称ORM). PHP:activerecord Java:Hibernate C#:Ent ...

  4. servlet filter listener interceptor 知识点

    这篇文章主要介绍 servlet filter listener interceptor 之 知识点.博文主要从 概念,生命周期,使命介绍其区别.详情如下:   概念 生命周期 使命 servlet ...

  5. django查询中模糊的知识点,filter(blog=blog),filter(username=username).first()--这两者只需一招让你分清QuerySet对象,和用户字典对象

    只需一招让你分清QuerySet对象,和用户字典对象 article_list = models.Article.objects.filter(blog=blog) user_obj = models ...

  6. ASP.NET Core 中的那些认证中间件及一些重要知识点

    前言 在读这篇文章之间,建议先看一下我的 ASP.NET Core 之 Identity 入门系列(一,二,三)奠定一下基础. 有关于 Authentication 的知识太广,所以本篇介绍几个在 A ...

  7. ASP.NET MVC开发:Web项目开发必备知识点

    最近加班加点完成一个Web项目,使用Asp.net MVC开发.很久以前接触的Asp.net开发还是Aspx形式,什么Razor引擎,什么MVC还是这次开发才明白,可以算是新手. 对新手而言,那进行A ...

  8. 【干货分享】前端面试知识点锦集02(CSS篇)——附答案

    二.CSS部分 1.解释一下CSS的盒子模型? 回答一:a.标准的css盒子模型:宽度=内容的宽度+边框的宽度+加上内边具的宽度b.网页设计中常听的属性名:内容(content).填充(padding ...

  9. [转]ASP.NET Core 中的那些认证中间件及一些重要知识点

    本文转自:http://www.qingruanit.net/c_all/article_6645.html 在读这篇文章之间,建议先看一下我的 ASP.NET Core 之 Identity 入门系 ...

随机推荐

  1. xmake v2.2.9 发布, 新增c++20 modules的实验性支持

    这个版本没啥太大新特性,主要对c++20 modules进行了实验性支持,目前支持clang/msvc编译器,除此之外改进了不少使用体验,并且提高了一些稳定性. 另外,这个版本新增了socket.io ...

  2. org.apache.ibatis.exceptions.PersistenceException: ### Error querying database. Cause: java.sql.SQLException: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents mor

    今天在用junit测试mybits程序是遇到一个问题,报错为: org.apache.ibatis.exceptions.PersistenceException: ### Error queryin ...

  3. Zookeeper — 应用场景

    大致来说,zookeeper 的使用场景如下,我就举几个简单的,大家能说几个就好了: 分布式协调 分布式锁 元数据/配置信息管理 HA高可用性 分布式协调 这个其实是 zookeeper 很经典的一个 ...

  4. css实现缩放自适应网页--手机web

    一. 允许网页宽度自动调整: "自适应网页设计"到底是怎么做到的? 其实并不难. 首先,在网页代码的头部,加入一行viewport元标签. <meta name=" ...

  5. rabitMQ-centos7安装

    1.安装rabitMq之前需要安装Erlang cd /usr/local/ wget http://erlang.org/download/otp_src_18.3.tar.gz tar -zxvf ...

  6. document.getElementsByTagName()方法的返回值

    在阅读<JS DOM 编程一书>一书时,看到getElementByTagName函数返回值为数组,然后自己验证了下,发现不是数组,而是一个可遍历的HTMLCollection对象 HTM ...

  7. vue.js(20)--vue路由

    后端路由 对于普通的网站,所有的超链接都是url地址,所有的url地址都对应着服务器上的资源 前端路由 对于单页面应用程序来说,主要通过单页面中的hash(#)来进行页面的切换.hash的特点是htt ...

  8. HTTP1.0、HTTP 1.1、HTTP 2.0之间的主要区别

    HTTP1.0与HTTP 1.1的主要区别  长连接 节约带宽 HOST域 HTTP1.1与HTTP 2.0的主要区别  多路复用 二进制分帧 首部压缩 服务器推送 一.HTTP1.0与HTTP 1. ...

  9. PAT Basic 1024 科学计数法 (20 分) Advanced 1073 Scientific Notation (20 分)

    科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式 [+-][1-9].[0-9]+E[+-][0-9]+,即数字的整数部分只有 1 位,小数部分至少有 1 位,该数字及其指 ...

  10. do{}while(0);里面有continue

    do{}while(0);里面有continue,退出的只是do{}while(0);