JAVA WEB从入门到精通 day19 Listener监听器

来源:互联网 发布:mac可以玩lol 编辑:程序博客网 时间:2024/04/30 00:28

JAVA监听器

    监听器是一个接口,具体方法由我们实现。属于javaweb三大组件。

JAVAWEB监听器

三大域中,每个域都有两个监听器。分别是生命周期监听器和属性监听器
**ServletContext域            -生命周期监听期:ServletContextListener,它有两个方法。                    *void contextInitialized(ServletContextEvent sce ):出生时调用                    *void contextDestroyed(ServletContextEvent sce):销毁时调用                     事件对象:ServletContextEvent                        主要方法:                        ServletContext getServletContext()              -属性监听器:ServletContextAttributeListener:它有三个方法,一个在添加属性时调用,一个在替换属性时调用,还有一个在移除属性时调用。                    * void attributeAdded(ServletContextAttributeEvent event) :添加属性时调用                    * void attributeRemoved(ServletContextAttributeEvent event) :移除属性时调用                    * void attributeReplaced(ServletContextAttributeEvent event) :替换属性时调用                     事件对象:ServletContextAttributeEvent                        主要方法:                        String getName();获取属性名称                        Object getValue():获取属性值                        ServletContext getServletContext() ; **HttpSession域                -生命周期监听器:HttpSessionListener,它有两个方法。                    *void sessionCreated(HttpSessionEvent se) :创建session时调用                    *void sessionDestroyed(HttpSessionEvent se) :销毁session时调用                        事件对象:HttpSessionEvent                        主要方法:                             HttpSession getSession() ;                 -属性监听器:HttpSessionAttributeListener:它有三个方法,一个在添加属性时调用,一个在替换属性时调用,还有一个在移除属性时调用。                    * void attributeAdded(HttpSessionBindingEvent event):添加属性时调用                    * void attributeRemoved(HttpSessionBindingEvent event)  :移除属性时调用                    * void attributeReplaced(HttpSessionBindingEvent event):替换属性时调用                        事件对象:HttpSessionBindingEvent                        主要方法:                            String getName() ;获取属性名称                            Object getValue() ;获取属性值                            HttpSession getSession() ;获取session对象  **ServletRequest域                -生命周期监听器:ServletRequestListener,它有两个方法。                    *void requestInitialized(ServletRequestEvent sre ):创建request时调用                    *void requestDestroyed(ServletRequestEvent sre) :销毁request时调用                     事件对象:ServletRequestEvent                        主要方法:                        ServletContext getServletContext ();                        ServletRequest getServletRequest()  ;                 -属性监听器:ServletRequestAttributeListener:它有三个方法,一个在添加属性时调用,一个在替换属性时调用,还有一个在移除属性时调用。                    *void attributeAdded(ServletRequestAttributeEvent srae) :添加属性时调用                    *void attributeRemoved(ServletRequestAttributeEvent srae ):移除属性时调用                    *void attributeReplaced(ServletRequestAttributeEvent srae) :替换属性时调用                    事件对象:ServletRequestAttributeEvent                     主要方法:                    String getName();  获取属性名称                    Object getValue() ;获取属性值                    ServletContext getServletContext ();                    ServletRequest getServletRequest()  ;

案例:javaweb使用生命周期监听器

    1.创建一个类实现Servletontext域生命周期监听器接口,方法内容由自己实现。            public class AListener implements ServletContextListener {                @Override                public void contextDestroyed(ServletContextEvent arg0) {                    System.out.println("死亡");                }                @Override                public void contextInitialized(ServletContextEvent arg0) {                    System.out.println("出生");                }            }
    2.在web.xml中注册监听器          <listener>            <listener-class>cn.cad.web.listener.AListener</listener-class>          </listener>
   3.ServletContext对象在服务器开启时就创建,服务器关闭销毁。所以我们开启服务器和关闭服务器时就会看到效果。   出生   死亡

案例:javaweb使用属性监听器

1.编写一个类实现ServletContext域的属性监听器public class BListener implements ServletContextAttributeListener {            //添加属性时被调用            public void attributeAdded(ServletContextAttributeEvent arg0)  {                  System.out.println("你添加了"+arg0.getName()+"属性,值为"+arg0.getValue());            }             //移除属性时被调用            public void attributeRemoved(ServletContextAttributeEvent arg0)  {                  System.out.println("你删除"+arg0.getName()+"属性,值为"+arg0.getValue());            }             //替换属性时被调用            public void attributeReplaced(ServletContextAttributeEvent arg0)  {  //替换属性时的getValue方法获取的是替换之前的值,获得更改后的值可以通过getServletContext.getAttribute()获取                   System.out.println("你更改了"+arg0.getName()+"属性,原值为"+arg0.getValue()+",更改后的值"+arg0.getServletContext().getAttribute("name"));             }        }
2.在web.xml注册监听器
3.我们在jsp页面中添加,替换,删除属性,即可看到效果        <body>            <%                application.setAttribute("name", "zhangsan");            %>            <%                application.setAttribute("name", "lisi");            %>            <%                application.removeAttribute("name");            %>          </body>

感知监听器

        有两个感知监听器。        特性        -与session相关        -用来添加到javaBean上        -不需要在web.xml中注册

HttpSessionBindingListener监听器

用来添加到javaBean上。比如我们有一个User类,实现这个接口,这样当我们user对象放入session中时,user对象就能知道自己被放入session,移除时对象自己也能知道被session移除。
    1.我们创建一个javaBean实现这个接口,并实现他的两个方法        public class User implements HttpSessionBindingListener{                private String name;                private int age;                public String getName() {                    return name;                }                public void setName(String name) {                    this.name = name;                }                public int getAge() {                    return age;                }                public void setAge(int age) {                    this.age = age;                }                @Override                public String toString() {                    return "User [name=" + name + ", age=" + age + "]";                }                @Override                public void valueBound(HttpSessionBindingEvent arg0) {     //与session绑定时调用                    System.out.println("被放入session");                }                @Override                public void valueUnbound(HttpSessionBindingEvent arg0) { //从session移除时被调用                    // TODO Auto-generated method stub                    System.out.println("从session移除");                }            }
    2.我们在jsp测试我们的监听器        <body>            <%                //创建javaBean对象,并将其放入session域                cn.cad.web.listener.User user=new cn.cad.web.listener.User();                session.setAttribute("user", user);            %>            <%                //将javaBean对象从session域中移除                session.removeAttribute("user");            %>        </body>
    3.输出结果        被放入session        从session移除

HttpSessionActivationListener监听器

    HttpSessionActivationListener也是感知监听器,添加在javabean上。    可以让javaBean对象知道自己是否跟随session被序列化或者钝化到了硬盘上。但是javaBean对象必须实现该监听器接口和序列化接口,要不然保存不到硬盘上。

Session的序列化和反序列化

应用场景:         一般来说,网站服务器启动后,就不会再关闭了,但是如果服务器出现问题需要重启,而用户session还在进行相应的操作,例如购物车里添加了很多东西,必须保存session这时就需要使用序列化将session信息保存起来放在硬盘,服务器重启后,又重新加载。这样就保证了用户信息不会丢失,实现永久化保存        序列化就是将信息永久保存,例如保存到硬盘上等。        我们发现我们向session里面设置一个属性,关闭服务器,项目目录会多出一个session.ser的文件,这就是将session序列化了。        这时当我们重新开启服务器,依然可以获取session值。        怎么关闭序列化?        在tomcat的conf目录下的context.xml中添加一句        <Manager pathname="" /> 即可。  

session的钝化和活化

应用场景:    当很多用户访问网站时,服务器会产生大量session,内存可能会承受不了,这时候我们将长时间不活动的session先保存在客户的硬盘上,这叫做钝化。        当用户使用session时,再从硬盘中读取session,这叫做活化。        具体的配置可以参考百度。
0 0
原创粉丝点击