Listener&&Filter
一、监听器
1.什么是监听器
java web中监听器就是用于监听web常见对象 HttpServletRequest,HttpSession,ServletContext
2.监听器的作用
1.监听web对象创建与销毁
2.监听web对象的属性变化、
3 监听session 绑定javaBean操作
3.监听机制相关概念
1.事件---一件事
2.事件源---产生事件的源头
3.注册监听---将监听与事件绑定,当事件产生时候,监听器可以知道
4.监听器---对某事件进行处理监听一个对象
1.web 监听器介绍
1 监听器web对象创建与销毁的监听器
ServletContextListener
HttpSessionListener
ServletRequstListener
2监听web对象属性变化
servletContextAttributeListener
HttpSessionAttributeListener
ServletRequestAttributeListener
3.监听session绑定javaBean
HttpSessionBindingListener
HttpSessionActivationListener
3.javaweb 监听器创建步骤
1.创建一个类,实现指定的监听器接口
2.重写接口中的方法
3.在web.xml文件中适配器监听
演示监听对象创建爱你与销毁
1.servletContext对象的创建与销毁
ServletContext对象是服务器开启时候创建,服务器关闭时候销毁
监听servletContext对象的创建与销毁
2 监听HttpSession对象的创建与销毁
1 .HttpSession对象的创建与销毁分析
session对象创建取决于请求是否有jsessinid,可能会获取一个已经存在的seesion
对象 如果没有回创建一个新的session对象
销毁 session
1 )默认 30分钟
2 )关闭服务器
3 )invalidate()方法
4.)setMaxInactiveInterval(int interval) 可以设置超时时间
2.监听HttpSession对象的创建与销毁
HttpServletRequest对象的创建与销毁监听
1.HttpServletRequest对象的创建与销毁分析
request对象是发送请求时创建,当响应产生时,销毁.
2.监听HttpServletRequest对象的创建与销毁
监听属性变化
1.javaweb中监听属性变化API介绍
ServletContextAttributeListener
HttpSessionAttributeListener
ServletRequestAttributeListener
1. 演示监听session中属性变化
演示监听session绑定javaBean
1.HttpSessionBindingListener监听器功能介绍
使javaBean对象在被绑定到会话或从会话中取消对它的绑定时得到通知
2.HttpSessionActivationListener监听器功能介绍
绑定到会话的对象可以侦听通知它们会话将被钝化和会话将被**的容器事件
3.注意事项
这两个监听器比较特殊,它是由javaBean来实现的,并且不需要在web.xml文件中注册监听.
javaBean必须是序列化的.
4.演示HttpSessionBindingListener功能
javaBean自动感知绑定到session中以及从session中移除.
public void valueBound(HttpSessionBindingEvent event) {
System.out.println("绑定了user对象到了session");
}
public void valueUnbound(HttpSessionBindingEvent event) {
System.out.println("从session中移除了user对象");
}
5.演示HttpSessionActivationListener功能
1.bean1.jsp中向session存储一个user对象
2.bean2.jsp中从session中获取user对象的name属性
3.User类实现接口HttpSessionActivationListener,可以监听到活化与钝化操作
4.做一个配置文件,来设定当活化与钝化操作时文件的位置.
在meta-inf目录下创建一个context.xml文件
<Context>
<Manager className="org.apache.catalina.session.PersistentManager" maxIdleSwap="1">
<Store className="org.apache.catalina.session.FileStore" directory="it315"/>
</Manager>
</Context>
监听器案例--定时销毁过期session分析
1.功能描述
如果session对象超过五秒没有使用就销毁。
2.分析
怎样可以将每一个创建的session全都保存起来?
我们可以做一个HttpSessionListener,当session对象创建时,就将这个session对象装入到一个集合中.将集合保存到ServletContext域中。
怎样可以判断session过期了?
在HttpSession中有一个方法public long getLastAccessedTime()
它可以得到session对象最后使用的时间。
可以使用invalidate方法销毁。
我们上面的操作需要使用任务调度功能.
在java中有一个Timer定时器类
1. 什么是Filter
Filter:是sun公司增加的一个新功能通过Filter可以拦截访问web资源的请求与响应操作web开发人员通过
Filter技术,对web服务器管理的所有web资源 如jsp Servlet 静态图片文件或html文件进行拦截
从而实现一些特殊 的功能
2. Filter API 介绍
3. Filter快速入门
Filter创建步骤介绍
1.创建一个类实现javax.servlet.Filter接口
2.得写接口方法
3.在web.xml中配置Filter
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的doFilter方法内如果没有执行chain.doFilter(request,respose) 那么资源就不会被访问到
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
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来确定的。
1. 关于dispatcher配置
可以取的值有 REQUEST FORWARD ERROR INCLUDE
它的作用是:当以什么方式去访问web资源时,进行拦截操作.
1.REQUEST 当是从浏览器直接访问资源,或是重定向到某个资源时进行拦截方式配置的 它也是默认值
2.FORWARD 它描述的是请求转发的拦截方式配置
3.ERROR 如果目标资源是通过声明式异常处理机制调用时,那么该过滤器将被调用。除此之外,过滤器不会被调用。
4.INCLUDE 如果目标资源是通过RequestDispatcher的include()方法访问时,那么该过滤器将被调用。除此之外,该过滤器不会被调用