JSP监听器的使用

来源:互联网 发布:淘宝主类目怎么修改 编辑:程序博客网 时间:2024/05/18 06:19

监听器(8个监听4个事件)

         在serlvet中定义了多种类型的监听器,它们用于监听的事件源分别为serlvetContext,HttpSession和ServletRequest这三个对象

         servlet规范针对这三个域对象(ServletContext,session,request)上的操作,又把这多种类型的监听器划分为三种类型:

                  监听三个域对象创建和销毁的事件监听器

                   监听域对象中的属性的增加和删除的事件监听器

                  监听绑定到HttpSession域中的某个对象的状态的时间监听器

        

                   每个域对象的监听器中传入的ServletContextEvent类型的参数都可以得到当前的域对象,比如session的监听器可以通过传入的参数获取到当前的session域对象。监听域对象属性(映射关系)的事件监听器还可以通过传入参数的getNamegetValue方法获取当前操作属性(映射关系)keyvalue

 

         servletContext监听器

       servletContext对象的创建,当web应用被发布时创建,当卸载web应用时销毁,并会被实现了ServletContextListener接口的监听器所监听到

       //监听servletContext域对象创建和销毁的监听器

       public class MyServletContextListener implements ServletContextListener{

           //servletContext域对象销毁时此方法会被执行

           @Override

           public void contextDestroyed(ServletContextEvent event) {

               // TODO Auto-generated method stub

             

              System.out.println("servletContext域对象被销毁了");

           }

           //servletContext域对象创建时此方法会被执行

           @Override

           public void contextInitialized(ServletContextEvent arg0) {

              // TODO Auto-generatedmethod stub

              System.out.println("servletContext域对象被创建了");

           }

       }

                  

       //监听servletContext域对象的属性的监听器(当对sevletContext对象域中的映射关系进行增,删,改时,都会被实现了ServletContextAttributeListener接口的监听器所监听到)

       public class MyServletContextAttributeListener implementsServletContextAttributeListener{

           //servletContext域对象中添加了新的映射关系就调用此方法

           @Override

           public void attributeAdded(ServletContextAttributeEvent event) {

              // TODO Auto-generatedmethod stub

              System.out.println("servletContext域中增加了此映射关系:"+event.getName()+"="+event.getValue());

           }

           //servletContext域对象中删除了映射关系就调用此方法

           @Override

           public void attributeRemoved(ServletContextAttributeEvent event) {

              // TODO Auto-generatedmethod stub

              System.out.println("servletContext域中删除了此映射关系:"+event.getName()+"="+event.getValue());

           }

           //servletContext域对象中修改了映射关系的值,就调用此方法

           @Override

           public void attributeReplaced(ServletContextAttributeEvent event) {

              // TODO Auto-generatedmethod stub

              System.out.println("servletContext域中修改了此映射关系:"+event.getName()+"="+event.getValue());

           }

      

       }

 

                   <!—web.xml配置文件中注册监听器 -->

         <listener>

           <listener-class>cn.listener.MyServletContextListener</listener-class>

         </listener>

        

          <listener>

           <listener-class>cn.listener.MyServletContextAttributeListener</listener-class>

         </listener>

 

                   session域对象和erquest对象的监听器和上面的方法都一样,不过需要实现的接口不同

                            监听session对象的创建和销毁需要实现HttpSessionListener接口,监听此域中属性的监听器需要实现HttpSessionAttribteListener接口

              session对象的创建,当第一次调用request.getSession()方法时创建session对象;

                session对象的销毁,手动调用session对象的invalidate()方法和超时(session对象默认不操作情况下存活30分钟)session对象会被销毁,并会被实现了HttpSessionListener接口的监听器所监听到;

              当对session对象域中的映射关系进行 增,删,改时,都会被实现了HttpSessionAttribteListener接口的监听器所监听到

           监听request对象的创建和销毁需要实现ServletRequestListener接口,监听此域中属性的监听器需要实现ServletRequestAttributeListener接口

                                     request对象的创建和销毁,当用户每发送一次请求时,request对象就被创建一次,当服务器返回了response对象后此request对象将被销毁,并会被实现了ServletRequestListener接口的监听器所监听到;

                                     当对request对象域中的映射关系进行 增,删,改 时,都会被实现了ServletRequestAttributeListener接口的监听器所监听到

 

                   监听绑定到HttpSession域中的某个对象的状态的时间监听器

                     感知型监听器,谁实现了这个些接口,就可以获取在session域对象中的状态,这两种监听器不需要注册

                            HttpSessionActivationListener实现了此接口就可以感知自己何时随着HttpSession对象钝化和活化(钝化和活化的意思是当在服务器中暂停了当前的web应用,那么此web应用中的所有域和域中的对象就钝化了。如果继续当前web应用,那么此web应用中的所有域和域中的对象就活化了)

                                     sessionDidActivate(HttpSessionEvent  event);当此对象和session域对象一起化了时就会调用此方法

                                     sessionWillPassivate(HttpSessionEvent  event) ;当此对象和session域对象一起化了时就会调用此方法

                            HttpSessionBindingListener实现了此接口就可以感知自己何时被添加到了session对象,和被session对象删除了

                                     valueBound(HttpSessionBindingEventevent);当自己被添加到了session域中时就会调用此方法

                                     valueUnbound(HttpSessionBindingEventevent);当自己被session域对象移除时就会调用此方法

0 0
原创粉丝点击