zoukankan      html  css  js  c++  java
  • servlet中的8个Listener

    servlet中的8个Listener:

    Xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
        http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
        <display-name>TestBootWeb</display-name>
        <servlet>
            <servlet-name>TestServlet4</servlet-name>
            <servlet-class>com.stono.servlet.TestServlet4</servlet-class>
            <init-param>
                <param-name>testServlet4ParamName</param-name>
                <param-value>testServlet4ParamValue</param-value>
            </init-param>
        </servlet>
        <servlet-mapping>
            <servlet-name>TestServlet4</servlet-name>
            <url-pattern>/test4.do</url-pattern>
        </servlet-mapping>
        <context-param>
            <param-name>contextParamName</param-name>
            <param-value>contextParamValue</param-value>
        </context-param>
        <welcome-file-list>
            <welcome-file>index.jsp</welcome-file>
        </welcome-file-list>
        <listener>
            <listener-class>com.stono.servlet.listeners.MyServletContextListener</listener-class>
            <listener-class>com.stono.servlet.listeners.MyServletContextAttributeListener</listener-class>
            <listener-class>com.stono.servlet.listeners.MyHttpSessionListener</listener-class>
            <listener-class>com.stono.servlet.listeners.MyHttpSessionAttributeListener</listener-class>
            <listener-class>com.stono.servlet.listeners.MyServletRequestListener</listener-class>
            <listener-class>com.stono.servlet.listeners.MyServletRequestAttributeListener</listener-class>
            <!-- 不知道这个Listener是否需要在这里面配置 -->
            <listener-class>com.stono.servlet.listeners.MyHttpSessionActivationListener</listener-class>
        </listener>
    </web-app>

    Listener:

    package com.stono.servlet.listeners;
    import javax.servlet.http.HttpSessionActivationListener;
    import javax.servlet.http.HttpSessionEvent;
    /* 文档中提到进行JVM迁移的时候才能激发此事件; */
    public class MyHttpSessionActivationListener implements HttpSessionActivationListener {
        @Override
        public void sessionDidActivate(HttpSessionEvent arg0) {
            System.out.println("com.stono.servlet.listeners.MyHttpSessionActivationListener.sessionDidActivate(HttpSessionEvent)");
        }
        @Override
        public void sessionWillPassivate(HttpSessionEvent arg0) {
            System.out.println("com.stono.servlet.listeners.MyHttpSessionActivationListener.sessionWillPassivate(HttpSessionEvent)");
        }
    }
    package com.stono.servlet.listeners;
    import javax.servlet.http.HttpSessionAttributeListener;
    import javax.servlet.http.HttpSessionBindingEvent;
    public class MyHttpSessionAttributeListener implements HttpSessionAttributeListener {
        @Override
        /* 调用session.setAttribute的时候触发事件; */
        public void attributeAdded(HttpSessionBindingEvent arg0) {
            System.out.println("com.stono.servlet.listeners.MyHttpSessionAttributeListener.attributeAdded(HttpSessionBindingEvent)");
            String name = arg0.getName();
            Object value = arg0.getValue();
            System.out.println("name:" + name + ";value:" + value);
        }
        @Override
        /* 调用session.invalidate()方法之后触发这个事件; */
        public void attributeRemoved(HttpSessionBindingEvent arg0) {
            System.out.println("com.stono.servlet.listeners.MyHttpSessionAttributeListener.attributeRemoved(HttpSessionBindingEvent)");
            String name = arg0.getName();
            Object value = arg0.getValue();
            System.out.println("name:" + name + ";value:" + value);
        }
        @Override
        /* 第二次调用session.setAttribute的时候会触发此事件,但是arg0.getValue()还是返回之前的值 */
        public void attributeReplaced(HttpSessionBindingEvent arg0) {
            System.out.println("com.stono.servlet.listeners.MyHttpSessionAttributeListener.attributeReplaced(HttpSessionBindingEvent)");
            String name = arg0.getName();
            Object value = arg0.getValue();
            System.out.println("name:" + name + ";value:" + value);
        }
    }
    package com.stono.servlet.listeners;
    import javax.servlet.http.HttpSessionBindingEvent;
    import javax.servlet.http.HttpSessionBindingListener;
    public class MyHttpSessionBindingListener implements HttpSessionBindingListener {
        private String name;
        private String value;
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getValue() {
            return value;
        }
        public void setValue(String value) {
            this.value = value;
        }
        @Override
        /* 将此对象设置到session中的时候触发的事件; */
        public void valueBound(HttpSessionBindingEvent arg0) {
            System.out.println("com.stono.servlet.listeners.MyHttpSessionBindingListener.valueBound(HttpSessionBindingEvent)");
            String name2 = arg0.getName();
            Object value2 = arg0.getValue();
            Object source = arg0.getSource();
            System.out.println("name:" + name2 + ";value:" + value2 + ";source:" + source);
        }
        @Override
        /* session.invalide()的时候触发的事件; */
        public void valueUnbound(HttpSessionBindingEvent arg0) {
            System.out.println("com.stono.servlet.listeners.MyHttpSessionBindingListener.valueUnbound(HttpSessionBindingEvent)");
            String name2 = arg0.getName();
            Object value2 = arg0.getValue();
            Object source = arg0.getSource();
            System.out.println("name:" + name2 + ";value:" + value2 + ";source:" + source);
        }
    }
    package com.stono.servlet.listeners;
    import javax.servlet.http.HttpSessionEvent;
    import javax.servlet.http.HttpSessionListener;
    public class MyHttpSessionListener implements HttpSessionListener {
        @Override
        /* 必须调用一下session.getAttributeNames();才可以激活这个事件; */
        public void sessionCreated(HttpSessionEvent arg0) {
            System.out.println("com.stono.servlet.listeners.MyHttpSessionListener.sessionCreated(HttpSessionEvent)");
        }
        @Override
        /* 调用session.invalidate()的时候激活这个事件; */
        public void sessionDestroyed(HttpSessionEvent arg0) {
            System.out.println("com.stono.servlet.listeners.MyHttpSessionListener.sessionDestroyed(HttpSessionEvent)");
        }
    }
    package com.stono.servlet.listeners;
    import javax.servlet.ServletContextAttributeEvent;
    import javax.servlet.ServletContextAttributeListener;
    public class MyServletContextAttributeListener implements ServletContextAttributeListener {
        @Override
        /* 进行context.setAttribute的时候调用 */
        public void attributeAdded(ServletContextAttributeEvent arg0) {
            System.out.println("com.stono.servlet.listeners.MyServletContextAttributeListener.attributeAdded(ServletContextAttributeEvent)");
            String name = arg0.getName();
            Object value = arg0.getValue();
            System.out.println("name=" + name + ";value=" + value);
        }
        @Override
        /* 进行context.removeAttribute的时候调用 */
        public void attributeRemoved(ServletContextAttributeEvent arg0) {
            System.out.println("com.stono.servlet.listeners.MyServletContextAttributeListener.attributeRemoved(ServletContextAttributeEvent)");
            String name = arg0.getName();
            Object value = arg0.getValue();
            System.out.println("name=" + name + ";value=" + value);
        }
        @Override
        /* 不知何时调用? */
        public void attributeReplaced(ServletContextAttributeEvent arg0) {
            System.out.println("com.stono.servlet.listeners.MyServletContextAttributeListener.attributeReplaced(ServletContextAttributeEvent)");
        }
    }
    package com.stono.servlet.listeners;
    import javax.servlet.ServletContextEvent;
    import javax.servlet.ServletContextListener;
    public class MyServletContextListener implements ServletContextListener {
        @Override
        /* tomcat自动重新Reload Context的时候会调用; */
        public void contextDestroyed(ServletContextEvent arg0) {
            String x = "com.stono.servlet.listeners.MyServletContextListener.contextDestroyed(javax.servlet.ServletContextEvent)";
            System.out.println(x);
        }
        @Override
        /* Context初始化的时候会调用; */
        public void contextInitialized(ServletContextEvent arg0) {
            String x = "com.stono.servlet.listeners.MyServletContextListener.contextInitialized(javax.servlet.ServletContextEvent)";
            System.out.println(x);
        }
    }
    package com.stono.servlet.listeners;
    import javax.servlet.ServletRequestAttributeEvent;
    import javax.servlet.ServletRequestAttributeListener;
    public class MyServletRequestAttributeListener implements ServletRequestAttributeListener {
        @Override
        /* 在request.setAttribute()方法调用的时候触发; */
        public void attributeAdded(ServletRequestAttributeEvent arg0) {
            System.out.println("com.stono.servlet.listeners.MyServletRequestAttributeListener.attributeAdded(ServletRequestAttributeEvent)");
            String name = arg0.getName();
            Object value = arg0.getValue();
            System.out.println("name:" + name + ";value:" + value);
        }
        @Override
        /* 在request.removeAttribute()的时候触发; */
        public void attributeRemoved(ServletRequestAttributeEvent arg0) {
            System.out.println("com.stono.servlet.listeners.MyServletRequestAttributeListener.attributeRemoved(ServletRequestAttributeEvent)");
            String name = arg0.getName();
            Object value = arg0.getValue();
            System.out.println("name:" + name + ";value:" + value);
        }
        @Override
        /* 在第二次调用request.setAttribute()的时候触发此方法; */
        public void attributeReplaced(ServletRequestAttributeEvent arg0) {
            System.out.println("com.stono.servlet.listeners.MyServletRequestAttributeListener.attributeReplaced(ServletRequestAttributeEvent)");
            String name = arg0.getName();
            Object value = arg0.getValue();
            System.out.println("name:" + name + ";value:" + value);
        }
    }
    package com.stono.servlet.listeners;
    import java.util.Enumeration;
    import javax.servlet.ServletRequestEvent;
    import javax.servlet.ServletRequestListener;
    public class MyServletRequestListener implements ServletRequestListener {
        @Override
        /* 请求结束之后调用这个事件 */
        public void requestDestroyed(ServletRequestEvent arg0) {
            System.out.println("com.stono.servlet.listeners.MyServletRequestListener.requestDestroyed(ServletRequestEvent)");
        }
        @Override
        /* 请求到来的时候调用这个事件 */
        public void requestInitialized(ServletRequestEvent arg0) {
            System.out.println("com.stono.servlet.listeners.MyServletRequestListener.requestInitialized(ServletRequestEvent)");
            Enumeration<String> names = arg0.getServletRequest().getParameterNames();
            while(names.hasMoreElements()){
                System.out.println(names.nextElement());
            }
        }
    }

    Servlet:

    package com.stono.servlet;
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.Enumeration;
    import javax.servlet.ServletContext;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    import com.stono.servlet.listeners.MyHttpSessionActivationListener;
    import com.stono.servlet.listeners.MyHttpSessionBindingListener;
    public class TestServlet4 extends HttpServlet {
        private static final long serialVersionUID = 1L;
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            ServletContext context = req.getServletContext();
            Enumeration<String> names = getServletConfig().getInitParameterNames();
            Enumeration<String> names2 = context.getInitParameterNames();
            System.out.println("javax.servlet.ServletConfig.getInitParameterNames()");
            while (names.hasMoreElements()) {
                System.out.println(names.nextElement());
            }
            System.out.println("javax.servlet.ServletContext.getInitParameterNames()");
            while (names2.hasMoreElements()) {
                System.out.println(names2.nextElement());
            }
            context.setAttribute("contextSetAttributeFromSevlet4Name", "contextSetAttributeFromSevlet4Value");
            context.setAttribute("contextParamName", "contextSetAttributeFromSevlet4Value2");
            context.removeAttribute("contextParamName");
            HttpSession session = req.getSession();
            // session.getAttributeNames();
            session.setAttribute("sessionAttrInTestServlet4", "sessionAttrInTestServlet4");
            try {
                // Servlet中可以使用这样的方式进行sleep,一个Servlet只有一个实例,多个线程;
                Thread.sleep(3000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            session.setAttribute("sessionAttrInTestServlet4", "sessionAttrInTestServlet4_2");
            session.invalidate();
            try {
                Thread.sleep(4000);
            } catch (Exception e) {
                e.printStackTrace();
            }
            System.out.println("just before request.setAttribute");
            req.setAttribute("a", "a");
            System.out.println("just after request.setAttribute");
            try {
                Thread.sleep(2000);
            } catch (Exception e) {
                e.printStackTrace();
            }
            req.setAttribute("a", "a2");
            System.out.println("just after request.setAttribute second time");
            try {
                Thread.sleep(2000);
            } catch (Exception e) {
                e.printStackTrace();
            }
            req.removeAttribute("a");
            System.out.println("just after request.removeAttribute");
            session = req.getSession();
            MyHttpSessionBindingListener obj = new MyHttpSessionBindingListener();
            session.setAttribute("obj", obj);
            obj.setName("namename");
            obj.setValue("valuevalue");
            System.out.println("set session object second time");
            session.setAttribute("obj", obj);
            session.invalidate();
            System.out.println("MyHttpSessionActivationListener testing...");
            MyHttpSessionActivationListener activationListener = new MyHttpSessionActivationListener();
            session = req.getSession();
            session.setAttribute("activation", activationListener);
            PrintWriter writer = resp.getWriter();
            writer.println("this is from TestServlet4");
        }
    }
  • 相关阅读:
    Eclipse下载
    RTT之AT命令组件
    RTT之shell
    RTT之内存管理及异常中断
    单片机的图形UI
    RTT学习
    RTT学习之线程管理
    C++学习笔记:
    运放
    关于KEIL下的图形化显示和输出问题
  • 原文地址:https://www.cnblogs.com/stono/p/4846517.html
Copyright © 2011-2022 走看看