您的位置:首页 > 编程语言 > Java开发

JavaWeb笔记之快速了解Filter过滤器

2017-11-25 10:01 363 查看
   过滤器Filter

Filter介绍

1.什么是Filter及其作用介绍

Filter是sun公司中servlet2.3后增加的一个新功能.                 

Servlet规范中三个技术 Servlet  Listener  Filter

在javaEE中定义了一个接口 javax.servlet.Filter来描述过滤器

通过Filter可以拦截访问web资源的请求与响应操作.

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

2.Filter API介绍 

Filter是javax.servlet包下的一个接口主要有以下三个方法   

                    

destroy()----销毁方法

doFilter(ServletRequestrequest,ServletResponse response,FilterChain chain)----放行方法

init(FilterConfigfilterConfig)-----初始化方法

Filter的快速入门

1.Filter创建步骤介绍

                     Filter创建步骤:

                            1.创建一个类实现javax.servlet.Filter接口

                            2.得写接口方法

                            3.在web.xml文件中配置Filter  
(跟servlet类似哦)

Filter在web.xml文件中配置的目的:

                            1.配置拦截什么样的资源。

                            2.Filter初始化

<filter>

       <filter-name>demo1Filter</filter-name>

       <filter-class>cn.itcast.web.filter.Demo1Filter</filter-class>

</filter>

<filter-mapping>

4000
       <filter-name>demo1Filter</filter-name>

       <url-pattern>/demo1</url-pattern>

</filter-mapping>

2.演示Filter拦截操作

                    

注意:在Filter的doFilter方法内如果没有执行 chain.doFilter(request,response)

那么资源是不会被访问到的。

 

3.FilterChain功能介绍

FilterChain 是servlet 容器为开发人员提供的对象,它提供了对某一资源的已过滤请求调用链的视图。过滤器使用 FilterChain 调用链中的下一个过滤器,如果调用的过滤器是链中的最后一个过滤器,则调用链末尾的资源。

 

Filter链与Filter生命周期

1.Filter链介绍

多个Filter对同一个资源进行了拦截,那么当我们在开始的Filter中执行

       chain.doFilter(request,response)时,是访问下一下Filter,直到最后一个Filter执行

       时,它后面没有了Filter,才会访问web资源。

关于多个FIlter的访问顺序问题

如果有多个Filter形成了Filter链,那么它们的执行顺序是怎样确定的?

它们的执行顺序取决于<filter-mapping>在web.xml文件中配置的先后顺序(也可以说上下顺序)。

2.Filter生命周期

                     当服务器启动,会创建Filter对象,并调用init方法,只调用一次.

                     当访问资源时,路径与Filter的拦截路径匹配,会执行Filter中的doFilter方法,

                     这个方法是真正拦截操作的方法.

                     当服务器关闭时,会调用Filter的destroy方法来进行销毁操作.

FilterConfig介绍

1.FilterConfig功能介绍

                            在Filter中的init方法上有一个参数叫FilterConfig                     

                            FilterConfig是Filter的配置对象                     

                            它的作用:

                                   1.获取Filter的名称  

                                   2.获取初始化参数
                           

                                   3.获取ServletContext对象                              

2.FilterConfig常用API

             

              String     getFilterName()-----获取监听器名称

              String    getInitParameter(Stringname)-----获取指定初始参数

              Enumeration getInitParameterNames()------获取所有初始参数名称

              ServletContext              getServletContext()------获取ServletContext对象

3.FilterConfig功能演示

                    

Filter配置详解

1.       Filter基本配置介绍

 

                            <filter>

                                   <filter-name>filter名称</filter-name>

                                   <filter-class>filter类全名</filter-class>

                            </filter>

                            <filter-mapping>

                                   <filter-name>filter名称</filter-name>

                                   <url-pattern>映射路径</url-pattern>

                            </filter-mapping>

2.关于url-pattern配置-----即映射路径配置

                     1.完全匹配

                            要求必须以"/"开始.

                     2.目录匹配

                            要求必须以"/"开始,以*结束.                                      

                     3.扩展名匹配

                            不能以"/"开始,以*.xxx结束.

3.关于servlet-name配置

                     针对于servlet拦截的配置  <servlet-name>配置

                     在Filter中它的配置项上有一个标签

                     <servlet-name>它用于设置当前Filter拦截哪一个servlet。

                     是通过servlet的name来确定的。

关于dispatcher配置

可以取的值有  REQUEST  FORWARD ERROR  INCLUDE                               

它的作用是:当以什么方式去访问web资源时,进行拦截操作.                             

1.REQUEST当是从浏览器直接访问资源,或是重定向到某个资源时进行拦截方式配置的 它也是默认值

2.FORWARD它描述的是请求转发的拦截方式配置

3.ERROR 如果目标资源是通过声明式异常处理机制调用时,那么该过滤器将被调用。除此之外,过滤器不会被调用。

4.INCLUDE如果目标资源是通过RequestDispatcher的include()方法访问时,那么该过滤器将被调用。除此之外,该过滤器不会被调用

             

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: