javaweb -- 7、Servlet系列之监听器+案例

目录

 

10.3.2 监听:

1、

2、 ServletRequestListener:监听request对象的创建和销毁

3、添加:ServletRequestAttributeListener:监听request作用域属性的添加,删除和更改

4、添加:ServletContextListener监听servletcontext对象的属性的添加和删除和更改

5、添加:ServletContextAttributeListener监听servletcontext对象的属性的添加和删除和更改

6、添加:HttpSessionListener监听session对象的创建和销毁

7、添加:HttpSessionAttributeListener监听session对象的创建和销毁

监听实现网站在线人数案例:


10.3.2 监听:

Servlet监听器用于监听一些重要事件的发生,监听器对象可以在事情发生前、发生后可以设置一些事件

Servlet2.3提供了对ServletContext和HttpSession对象的状态变化的监听器,Servlet2.4则增加了对ServletRequest对象状态变化的监听器

 

①、ServletContext对象----监听ServletContext对象,可以使web应用得知web组件的加载和卸载等运行情况

②、HttpSession对象----监听HttpSession对象,可以使web应用了解会话期间的状态并做出反应

③、ServletRequest对象----监听ServletRequest对象,可以使web应用控制web请求的生命周期

javaweb -- 7、Servlet系列之监听器+案例_第1张图片

1、

web.xml文件:


    ListenseServlet
    com.mashibing.servlet.ListenseServlet


    ListenseServlet
    /listense


    com.mashibing.listense.MyListense


    com.mashibing.listense.MyListense2

java文件:ListenseServlet(监听程序)

public class ListenseServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request,response);
    }
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");

        System.out.println("listenseservlet逻辑处理");
        request.setAttribute("listense","listense");
        request.removeAttribute("listense"); //被删除的数据(不显示)
========================== 下面对应的5 ===========================
//向servletcontext中添加属值        
        ServletContext sc = this.getServletContext();
        sc.setAttribute("servletContext","servletContext--value");
========================= 对应下面的6、7 =========================
//向session作用域中添加属性
        HttpSession session = request.getSession();
        session.setAttribute("session","session--value");
        session.invalidate();
=====================================================================
        response.getWriter().write("listense study");
    }
}

分为:(通过绿色填充标记)

1、request接口

2、servletcontext接口

3、Session接口

2 ServletRequestListener:监听request对象的创建和销毁

java文件:MyListense(监听器)

public class MyListense implements ServletRequestListener,
ServletRequestAttributeListener,
ServletContextListener,
ServletContextAttributeListener,
HttpSessionListener,
HttpSessionAttributeListener
 {
//请求销毁(request对象销毁时添加的逻辑代码)
    @Override
    public void requestDestroyed(ServletRequestEvent servletRequestEvent) {
        System.out.println("request对象被销毁---" + new Date());
    }
//请求创建(reques对象创建时添加的逻辑代码)
    @Override
    public void requestInitialized(ServletRequestEvent servletRequestEvent) {
        System.out.println("request对象被创建---"+new Date());
    }

web.xml文件:


    com.mashibing.listense.MyListense2

javaweb -- 7、Servlet系列之监听器+案例_第2张图片

3、添加:ServletRequestAttributeListener:监听request作用域属性的添加,删除和更改

 

java文件:MyListense(监听器)

//添加属性(属性添加时要做的事情)
    @Override
    public void attributeAdded(ServletRequestAttributeEvent servletRequestAttributeEvent) {
        System.out.println("向request作用域添加数据");
        System.out.println(servletRequestAttributeEvent.getName());
        System.out.println(servletRequestAttributeEvent.getValue());
    }
//删除属性(属性删除时要做的事情)
    @Override
    public void attributeRemoved(ServletRequestAttributeEvent servletRequestAttributeEvent) {
        System.out.println("request作用域删除数据");
        System.out.println(servletRequestAttributeEvent.getName());
        System.out.println(servletRequestAttributeEvent.getValue());
    }
//替换属性(属性更改时要做的事情)
    @Override
    public void attributeReplaced(ServletRequestAttributeEvent servletRequestAttributeEvent) {
        System.out.println("request作用域属性替换");
        System.out.println(servletRequestAttributeEvent.getName());
        System.out.println(servletRequestAttributeEvent.getValue());
    }

javaweb -- 7、Servlet系列之监听器+案例_第3张图片javaweb -- 7、Servlet系列之监听器+案例_第4张图片

4添加:ServletContextListener监听servletcontext对象的属性的添加和删除和更改

javaweb -- 7、Servlet系列之监听器+案例_第5张图片

java文件:MyListense(监听器

//创建属性(当启动tomcat服务器的时候创建)
    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent) {
        System.out.println("servletContext创建");
    }
//销毁属性(关闭tomcat服务器的时候销毁)
    @Override
    public void contextDestroyed(ServletContextEvent servletContextEvent) {
        System.out.println("servletContext销毁");
    }

下面都是关闭两个无关的:javaweb -- 7、Servlet系列之监听器+案例_第6张图片

javaweb -- 7、Servlet系列之监听器+案例_第7张图片javaweb -- 7、Servlet系列之监听器+案例_第8张图片

//关闭之后:javaweb -- 7、Servlet系列之监听器+案例_第9张图片

5、添加:ServletContextAttributeListener监听servletcontext对象的属性的添加和删除和更改

java文件:MyListense(监听器)

//添加属性
    @Override
    public void attributeAdded(ServletContextAttributeEvent servletContextAttributeEvent) {
        System.out.println("servletContext添加属性");
        System.out.println(servletContextAttributeEvent.getName());
        System.out.println(servletContextAttributeEvent.getValue());
    }
//删除属性
    @Override
    public void attributeRemoved(ServletContextAttributeEvent servletContextAttributeEvent) {
        System.out.println("servletContext删除属性");
        System.out.println(servletContextAttributeEvent.getName());
        System.out.println(servletContextAttributeEvent.getValue());
    }
//修改属性
    @Override
    public void attributeReplaced(ServletContextAttributeEvent servletContextAttributeEvent) {
        System.out.println("servletContext修改属性");
        System.out.println(servletContextAttributeEvent.getName());
        System.out.println(servletContextAttributeEvent.getValue());
    }

javaweb -- 7、Servlet系列之监听器+案例_第10张图片

6、添加:HttpSessionListener监听session对象的创建和销毁

java文件:MyListense(监听器)

(session对象创建的时候执行)
    @Override
    public void sessionCreated(HttpSessionEvent httpSessionEvent) {
        System.out.println("session对象被创建");
    }
(session对象销毁的时候执行)
    @Override
    public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
        System.out.println("session对象被销毁");
    }

javaweb -- 7、Servlet系列之监听器+案例_第11张图片

7添加:HttpSessionAttributeListener监听session对象的创建和销毁

java文件:MyListense(监听器)

(添加属性时被调用)
    @Override
    public void attributeAdded(HttpSessionBindingEvent httpSessionBindingEvent) {
        System.out.println("session添加属性");
        System.out.println(httpSessionBindingEvent.getName());
        System.out.println(httpSessionBindingEvent.getValue());
    }
(删除属性时被调用)
    @Override
    public void attributeRemoved(HttpSessionBindingEvent httpSessionBindingEvent) {
        System.out.println("session删除属性");
        System.out.println(httpSessionBindingEvent.getName());
        System.out.println(httpSessionBindingEvent.getValue());
    }
(修改属性时被调用)
    @Override
    public void attributeReplaced(HttpSessionBindingEvent httpSessionBindingEvent) {
        System.out.println("session修改属性");
        System.out.println(httpSessionBindingEvent.getName());
        System.out.println(httpSessionBindingEvent.getValue());
    }
}

javaweb -- 7、Servlet系列之监听器+案例_第12张图片

javaweb -- 7、Servlet系列之监听器+案例_第13张图片

监听实现网站在线人数案例:

java文件:MyListense2(监听器2)

public class MyListense2 implements HttpSessionListener,ServletContextListener {
    @Override//创建属性(当启动tomcat服务器的时候创建)
    public void contextInitialized(ServletContextEvent servletContextEvent) {
//获取application
        ServletContext sc = servletContextEvent.getServletContext();
//设置网站在线人数的初始值
        sc.setAttribute("count",0);
    }
    @Override//销毁属性(关闭tomcat服务器的时候销毁)
    public void contextDestroyed(ServletContextEvent servletContextEvent) {
        System.out.println("servletContext被销毁");
    }
    @Override(session对象创建的时候执行)
    public void sessionCreated(HttpSessionEvent httpSessionEvent) {
//获取application对象
       ServletContext sc =  httpSessionEvent.getSession().getServletContext();
        int count = (int)sc.getAttribute("count"); //强制转换
        sc.setAttribute("count",++count);
    }
    @Override(session对象销毁的时候执行)
    public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
//获取application对象
        ServletContext sc =  httpSessionEvent.getSession().getServletContext();
        int count = (int)sc.getAttribute("count"); //强制转换
        sc.setAttribute("count",--count);
    }
}

jsp文件:main

添加:


当前在线的人数是:${applicationScope.count}

web.xml文件:


  com.mashibing.listense.MyListense2

javaweb -- 7、Servlet系列之监听器+案例_第14张图片

你可能感兴趣的:(javaweb,java)