过滤器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>
<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()方法访问时,那么该过滤器将被调用。除此之外,该过滤器不会被调用