• Javaweb中的监听器


    1 基本概念

    javaweb中的监听器是Servlet规范中定义的一种特殊的类,它用于监听web应用程序中的ServletContext, HttpSession和 ServletRequest等域对象的创建与销毁事件,以及监听这些域对象中的属性发生修改的事件。

    2 Servlet监听器的分类

    在Servlet规范中定义了多种类型的监听器,它们用于监听的事件源分别为ServletContextHttpSessionServletRequest这三个域对象

    a  监听域对象自身的创建和销毁的事件监听器。

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

    c   监听绑定到HttpSession域中的某个对象的状态的事件监听器。

    3 监听ServletContext,HttpSession,ServletRequest域对象的创建和销毁

    ServletContextListener接口用于监听ServletContext对象的创建和销毁事件。实现了ServletContextListener接口的类都可以对ServletContext对象的创建和销毁进行监听。

    当ServletContext对象被创建时,激发contextInitialized (ServletContextEvent sce)方法。

    当ServletContext对象被销毁时,激发contextDestroyed(ServletContextEvent sce)方法。

    ServletContext域对象创建和销毁时机:
      创建:服务器启动针对每一个Web应用创建ServletContext
      销毁:服务器关闭前先关闭代表每一个web应用的ServletContext

    范例:写一个HelloServletContextListener监听器demo,同时implements(实现)  ServletContextListener,ServletRequestListener,HttpSessionListener接口。

     1 package listener;
     2 
     3 import javax.servlet.ServletContextEvent;
     4 import javax.servlet.ServletContextListener;
     5 import javax.servlet.ServletRequestEvent;
     6 import javax.servlet.ServletRequestListener;
     7 import javax.servlet.http.HttpSessionEvent;
     8 import javax.servlet.http.HttpSessionListener;
     9 
    10 public class HelloServletContextListener  implements ServletContextListener,ServletRequestListener,HttpSessionListener{
    11 
    12     @Override
    13     public void contextDestroyed(ServletContextEvent arg0) {
    14         System.out.println("context被销毁"+arg0.getServletContext());
    15         
    16     }
    17 
    18     @Override
    19     public void contextInitialized(ServletContextEvent arg0) {
    20         System.out.println("context被创建"+arg0.getServletContext());
    21         
    22     }
    23 
    24     @Override
    25     public void sessionCreated(HttpSessionEvent session) {
    26         System.out.println("sesion被创建"+session.getSession().getId());//测试获取的sessionId
    27         
    28     }
    29 
    30     @Override
    31     public void sessionDestroyed(HttpSessionEvent arg0) {
    32         System.out.println("sesiont被销毁");
    33     }
    34 
    35     @Override
    36     public void requestDestroyed(ServletRequestEvent arg0) {
    37         System.out.println("ruquest被销毁");
    38         
    39     }
    40 
    41     @Override
    42     public void requestInitialized(ServletRequestEvent arg0) {
    43         System.out.println("ruquest被创建");
    44         
    45     }
    46 
    47 }

    4 在web.xml注册监听器,配置如下,监听器是所有Servlet配置中最简单的配置,只需要配置全类名就可以直接映射了。

    1 <?xml version="1.0" encoding="UTF-8"?>
    2 <web-app version="3.0"
    3     xmlns="http://java.sun.com/xml/ns/javaee"
    4     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    5     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
    6  <listener>
    7     <listener-class> listener.HelloServletContextListener</listener-class>  
    8  </listener>
    9 </web-app>

    5 经过以上2个步骤,我们完成了监听器的编写和注册,下面进行测试HttpSession,写一个index.jsp页面

     1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
     2 <%
     3 String path = request.getContextPath();
     4 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
     5 %>
     6 
     7 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
     8 <html>
     9   <head>
    10     <base href="<%=basePath%>">
    11     
    12     <title>My JSP 'index.jsp' starting page</title>
    13     <meta http-equiv="pragma" content="no-cache">
    14     <meta http-equiv="cache-control" content="no-cache">
    15     <meta http-equiv="expires" content="0">    
    16     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    17     <meta http-equiv="description" content="This is my page">
    18     <!--
    19     <link rel="stylesheet" type="text/css" href="styles.css">
    20     -->
    21   </head>
    22   
    23   <body>
    24    hello  page<br>
    25    访问页面就创建的id: ${pageContext.session.id }
    26   </body>
    27 </html>

    6 前台页面访问效果以及后台输出的ID值展示

     

    总结,在前台访问一个新的页面,会立即产生一个ID,同时也会调用ServletContext,HttpSession和ServletRequest的创建方法,从而具备监听作用。

  • 相关阅读:
    Linux基础-3.用户、群组和权限
    Linux基础-2.目录文件的浏览、管理及维护
    Linux基础-1.Linux命令及获取帮助
    CentOS6.10安装详解
    有序字典
    根据公历计算农历
    常用模块
    人工智能_2_特征处理.py
    人工智能_1_初识_机器学习介绍_特征工程和文本特征提取
    python-matplotlib
  • 原文地址:https://www.cnblogs.com/wrkjwl/p/9171974.html
Copyright © 2020-2023  润新知