JavaWeb笔记-21- JavaWeb三大组件之Listener(监听器---八种)

Java三大组件

Servlet  服务程序
Listener  监听器
Filter   过滤器

1、Listenner: 监听器


    1.初次相见:AWT  ActionListener、
    2.二次相见:SAX  xml解析方式
    3.今天内容

监听器特点:
    1)监听器都是接口,接口内的代码内容需要自己实现
    2)需要注册,eg:初注册在按钮上
            btn.addActionListener(new ActionListener() {}
    3)监听器中的方法在特殊事件发生时被调用


观察者:
    1)事件源    eg:button
    2)事件 :监听器内方法的参数对象,用来触发相应方法      
    3)监听器   
        监听器中含有一个或多个方法

    监听器监听事件源,,当事件源引发事件时,监听器会相应触发自身对应方法。
eg:
// btn:为事件源,被监视
        // .addActionListener(); 为注册,将监听器注册在事件源上
        // ( new ActionListener(){} ); :监听器
        btn.addActionListener(new ActionListener() {  
            // actionPerformed :监听器方法
             //ActionEvent : 为事件对象 
            public void actionPerformed(ActionEvent evt) { 
                System.out.println("hello");
            }
        });

Java图形化(使用监听器)代码

public class Frame {
    public static void main(String[] args) {

        //创建图形界面框架
        JFrame frame = new JFrame();

        //设置框架大小
        frame.setSize(300, 200);

        //设置框架位置
        frame.setLocation(200, 200);

        //设定为流式布局管理器
        frame.setLayout(new FlowLayout());

        //设置窗口"❌"默认值为程序关闭,而不是隐藏窗口
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //创建按钮
        JButton btn = new JButton("确定");

        //添加按钮进框架
        frame.add(btn);

        //为按钮设定监听器
        btn.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                System.out.println("hello");
            }
        });

        //显示图形化界面
        frame.setVisible(true);
    }
}

2、JavaWeb中的监听器(共八个):


事件源: 三大域。 
    包含六个监听器(三个生命周期监听,三个属性监听 )。
1)ServletContext
    1.生命周期监听:ServletContextListener   //在ServletContext创建或销毁时完成的
            两个方法:
            1)void contextInitialized(ServletContextEvent sce):
                创建Servletcontext时

            2)void contextDestroyed(ServletContextEvent sce):
                销毁Servletcontext时

    2.属性监听:ServletContextAttributeListener  
            三个方法:
            1)void attributeAdded(ServletContextAttributeEvent event):
                添加属性时调用
            2)void attributeReplaced(ServletContextAttributeEvent event):
                替换属性时调用
            3)void attributeRemoved(ServletContextAttributeEvent event):
                移除属性时调用

2)HttpSession
    3.生命周期监听:HttpSessionListener    //在Session创建或销毁时完成的
            两个方法:
            1)void sessionCreated(HttpSessionEvent se):创建session时调用
            2)void sessionDestroyed(HttpSessionEvent se):销毁session时调用

    4.属性监听-- HttpSessionAttributeListener
            1)void attributeAdded(ServletRequestAttributeEvent srae):添加属性时
            2)void attributeReplaced(ServletRequestAttributeEvent srae):替换属性时
            3)void attributeRemoved(ServletRequestAttributeEvent srae):移除属性时


3)ServletRequest
    5.生命周期监听-- ServletRequestListener      //在Request创建或销毁时完成的
            1)void requestInitialized(ServletRequestEvent sre):创建request时
            2)void requestDestroyed(ServletRequestEvent sre):销毁request时

    6.属性监听-- ServletRequestAttributeListener
            1)void attributeAdded(ServletRequestAttributeEvent srae):添加属性时
            2)void attributeReplaced(ServletRequestAttributeEvent srae):替换属性时
            3)void attributeRemoved(ServletRequestAttributeEvent srae):移除属性时


    三大域中,监听内容相同,方法内容相同。只有方法名不同

    以上所有的属性监听都有的两个方法:
        .getName(); 和 .getValue();

事件对象总结:
    1)ServletContextEvent:  
        .getServletContext();   返回值为ServletContext 
    2)HttpSessionEvent
        .getSession();   返回值为HttpSession
    3)ServeltRequest:
        .getServletContext();   返回值为ServletContext
        .getServletRequest();   返回值为ServletRequest

在JavaWeb中完成编写三大域监听器

步骤:
1)写一个监听器类
    要求:必须实现某个监听器接口

2)注册
    在web.xml中配置完成注册。
    简单示例:
        /**
         * ServletContext生死监听
         * @author 一万年行不行
         *  
         * 可以在此监听器下存放一些tomcat启动时就要完成的代码
         */
        public class AListener implements ServletContextListener {
            //出生后立即调用的方法
            public void contextInitialized(ServletContextEvent arg0) {
                System.out.println("我出生了");
            }
            //销毁前调用的方法
            public void contextDestroyed(ServletContextEvent arg0) {
                System.out.println("我要销毁了");
            }
        }
    //在web.xml中配置
         <listener>
            <listener-class>web.listener.AListener</listener-class>
          </listener>

7.感知监听(都与HttpSession相关):

特点:
    1)是添加在JavaBean上的,而不是三大域 

    2)都不需要在web.xml中注册

    3)两个方法:在对象被添加到或移除出Session时触发

    public class User implements HttpSessionBindingListener {
        重写感知方法。
        @Override   //此方法在对象被添加到Session时触发
        public void valueBound(HttpSessionBindingEvent event) {
            System.out.println("啊~,session添加了我!");
        }
        @Override  //此方法会在对象被移除出Session时触发
        public void valueUnbound(HttpSessionBindingEvent event) {
            System.out.println("啊~,session抛弃了我!");
        }
    }

8.HttpSessionActivationListener

钝化 -- 将实体存储到硬盘中(序列化)

活化 -- 将硬盘中的实体读取到内存中(反序列化)

做法:
1)配置Tomcat钝化session的参数,
//把下面配置文件放到tomcat\conf\catalina\localhost目录下!文件名称为项目名称。
    <Context>
        <Manager className="org.apache.catalina.session.PersistentManager" maxIdleSwap="1">  
                                                            //最大maxIdleSwap=1
            <Store className="org.apache.catalina.session.FileStore" directory="mysession(文件目录)"/>
        </Manager>
    </Context>
2)访问项目的index.jsp页面,这会使Tomcat创建Session对象,然后等待一分钟后(因为maxIdleSwap="1"),

3)查看Tomcat\work\Catalina\localhost\listener\mysession目录下是否会产生文件,
        --- 产生了文件,说明钝化session的配置成功,可以开始下一步了。
4)创建Person类,让Person类实现HttpSessionActivationListener和Serializable接口:
public class Person implements HttpSessionActivationListener, Serializable {

            public void sessionDidActivate(HttpSessionEvent evt) {
                System.out.println("session已经活化");
            }

            public void sessionWillPassivate(HttpSessionEvent evt) {
                System.out.println("session被钝化了!");
            }
        }

猜你喜欢

转载自blog.csdn.net/qq_41307491/article/details/81660268