Listener&&Filter

来源:互联网 发布:c语言随机数头文件 编辑:程序博客网 时间:2024/06/05 05:44

一、监听器

    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定时器类



二、Filter介绍

 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方法,

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

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

FilterConfig介绍

1.FilterConfig功能介绍

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

FilterConfigFilter的配置对象

它的作用:

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

是通过servletname来确定的。

1. 关于dispatcher配置

可以取的值有  REQUEST  FORWARD  ERROR  INCLUDE

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

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

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

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

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












    

原创粉丝点击