在WEB端实现监听实质:

  实现一系列的监听接口(实现相应的接口,覆写各接口中相应的方法,在相应的事件触发的时候会执行自己的监听器中的覆写的方法,在各个方法中完成自己想要的操作,从而实现了监听)

  监听--就是在进行某种各个范围(application,session,request)中有相关值的设置、修改、替换的时候,这些操作都会触发事件,而Java中事件的代理机制,事件处理是利用listener机制,所以为了在事件触发的时候能够使自己能够采取相应的措施,就需要---->继承这样的listener,在listener中覆写相应的方法,覆写相应的事件处理方法,在对应的方法中处理对应的事件,也就是进行了监听(网上总结的特别好的)

  总结:主要是用来监听特定对象的创建或销毁、属性的变化,需要实现特定接口的普通类。

相关的接口

一、监听对象创建/销毁的监听器接口

Interface ServletRequestListener    监听request对象的创建或销毁

Interface HttpSessionListener        监听session对象的创建或销毁

Interface ServletContextListener     监听servletContext对象的创建或销毁

二、监听对象属性的变化

Interface ServletRequestAttributeListener 监听request对象属性变化: 添加、移除、修改

Interface HttpSessionAttributeListener    监听session对象属性变化: 添加、移除、修改

   Interface ServletContextAttributeListener  监听servletContext对象属性变化

三、session相关监听器

Interface HttpSessionBindingListener   监听对象绑定到session上的事件

  Interface HttpSessionActivationListener  监听session序列化及反序列化的事件


生命周期

监听器的使用步骤

1、写一个普通的java类,实现先关接口

2、部署xml文件

A、ServletRequestListener(在sevlet中的service方法传入的参数是ServletRequest,在HttpServlet中将其强制转型了,所以没有HttpServletRequestListener相关接口,使用最基本的ServletRequest)

创建对应的实现类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package comgqx.a_life;
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
/**
 * 监听request对象的创建和销毁
 * @author Administrator
 */
public class MyRequestListener implements ServletRequestListener{
    @Override
    public void requestDestroyed(ServletRequestEvent sre) {
        // TODO Auto-generated method stub
        //获取request中的存放的数据
        Object obj=sre.getServletRequest().getAttribute("cn");
        System.out.println(obj);
        System.out.println("MyRequestListener.requestDestoryed()");
    }
    @Override
    public void requestInitialized(ServletRequestEvent sre) {
        // TODO Auto-generated method stub
        //获取request中的存放的数据
                Object obj=sre.getServletRequest().getAttribute("cn");
                System.out.println(obj+"hhhhh");
        System.out.println("MyRequestListener.requestInitialized()");
    }
}

session对象在强制关闭浏览器的时候,不算是session对象的销毁,只能说是不能用了,所以不会触发销毁事件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package comgqx.a_life;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
public class MySessionListener implements HttpSessionListener{
    //创建销毁
    @Override
    public void sessionCreated(HttpSessionEvent se) {
        // TODO Auto-generated method stub
        System.out.println("MySessionListener.sessionCreated()");
    }
    @Override
    public void sessionDestroyed(HttpSessionEvent se) {
        // TODO Auto-generated method stub
        System.out.println("MySessionListener.sessionDestroyed()");
    }
}

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package comgqx.a_life;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class MyServletListener implements ServletContextListener{
    //一般在服务器启动的时候创建,服务器关闭后销毁,用的相对比较多
    @Override
    public void contextDestroyed(ServletContextEvent arg0) {
        // TODO Auto-generated method stub
        System.out.println("MyServletListener.contextDestroyed()");
    }
    @Override
    public void contextInitialized(ServletContextEvent arg0) {
        // TODO Auto-generated method stub
        System.out.println("1........MyServletListener.contextInitialized");
    }
} 

写好配置文件

1
2
3
4
5
6
7
8
9
10
11
12
<!-- 监听request对象的创建 -->
 <listener>
   <listener-class>comgqx.a_life.MyRequestListener</listener-class>
 </listener>
 <!-- 监听servletContext对象的创建 -->
 <listener>
   <listener-class>comgqx.a_life.MyServletListener</listener-class>
 </listener>
 <!-- 监听session对象的创建 -->
 <listener>
   <listener-class>comgqx.a_life.MySessionListener</listener-class>
 </listener>

写一个jsp来试验

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>My JSP 'index.jsp' starting page</title>
  </head>
   
  <body>
    i am coming!
    <%request.setAttribute("cn""china");
      session.invalidate(); //销毁session(session默认最大活跃时间是30分钟)
    %>
  </body>
</html>

在启动服务器的时候会看到servlet对象的创建

然后通过jsp去访问,控制台如下显示

转载于:https://www.cnblogs.com/zhangyubao/p/6973789.html

Java-Web监听器相关推荐

  1. java Web监听器导图详解

    监听器是JAVA Web开发中很重要的内容,其中涉及到的知识,可以参考下面导图: Web监听器 1 什么是web监听器? web监听器是一种Servlet中的特殊的类,它们能帮助开发者监听web中的特 ...

  2. java web 监听器 例子_Java web技术应用---监听器

    监听器的定义 (专门用于对其他对象身上发生的事件或状态改变进行监听和相应处理的对象,当被监视的对象发生变化时,立即采取相应的行动) 定义:Servlet规范中定义的一种特殊的类,用于监听Servlet ...

  3. java web监听器_JavaWeb监听器

    三大组件: Servlet Listener Filter Listener:监听器 * 它是一个接口,内容由我们来实现: * 它需要注册,例如注册在按钮上! * 监听器中的方法,会在特殊事件发生时被 ...

  4. java怎么监听多个组件,java web(五):java web三大组件之另外两个和八大监听器

    java的三大组件指Servlet.Filter.Listener.八大监听器指八个接口.前面介绍了Servlet,现在介绍一下Filter拦截器以及拦截地址的设置, Listener监听那些事件. ...

  5. java web.xml 监听器_【JAVA 核心技术】java web 中的监听器

    为什么要有监听器? 监听器是用来处理一系列事件的java类,可被配置在java web项目中. 既然如此,为什么不用代码直接调用监听器? 这可能是因为J2EE规范规定的项目工程标准,用web.xml指 ...

  6. 【Java Web编程 十一】深入理解Servlet监听器

    上篇Blog详细介绍了Servlet的过滤器,了解到过滤器类似一个AOP的概念,这篇Blog就来学习下Servlet的监听器,了解下Java Web的第三大组件的用处是什么,又是怎么工作的. 监听器基 ...

  7. java王者归来pdf_《JAVA WEB整合开发王者归来》刘京华.pdf

    全书分为9篇,内容层次清晰,难度循序渐进.第1篇为入门篇,内容包括JavaWeb开发概述等:第2篇为基础篇,内容包括Servlet技术.JSP技术.会话跟踪.过滤器Filter.监听器Listener ...

  8. Java Web开发API Boy如何进阶?

    导语 | Java Web后台开发基本都离不开Spring生态这一套,Spring框架功能极其强大,会帮忙做许多工作,我们通常只需要在一个函数(包含request和response两个入参)中写处理逻 ...

  9. JAVA WEB快速入门之从编写一个JSP WEB网站了解JSP WEB网站的基本结构、调试、部署...

    接上篇<JAVA WEB快速入门之环境搭建>,在完成了环境搭建后(JDK.Tomcat.IDE),现在是万事具备,就差写代码了,今天就来从编写一个JSP WEB网站了解JSP WEB网站的 ...

  10. Java Web技术经验总结(二)

    该系列的第一篇在此:Java Web技术经验总结一,主要包含我在日常工作中的经验和心得体会(如有不足之处欢迎指出). Maven的使用经验 依赖的scope有test.provided.compile ...

最新文章

  1. BIEE-CSS样式大全
  2. OEP30W频率响应
  3. 北斗导航 | 多GNSS系统PPP-RTK原型系统及性能分析(2020 CPGPS全球华人导航定位协会年会)
  4. 老BOJ 11 Counting
  5. Vue的响应式及相关问题
  6. asp.net core 中使用 signalR(二)
  7. 160 - 44 defiler.1.exe
  8. python多线程编程(7):线程间通信
  9. [密码学基础][每个信息安全博士生应该知道的52件事][Bristol52]49.描述在IPsec和TLS后的基本想法
  10. rsyslod服务配置
  11. C语言程序密码输入退回,想程序高手求助--用C语言来编辑一个输入密码的程序...
  12. gateway和nginx网关的区别
  13. 腾讯cdn设置 php,教你利用腾讯云 cdn 加速网站静态资源
  14. 计算机考研专业课资料百度云,考研专业课资料(一)
  15. [Excel知识技能] 将数值格式数字转换为文本格式
  16. 单反相机镜头焦距与被摄物体的实际距
  17. Struts2的介绍~~(跟着佟刚老师视频)
  18. 你什么时候放下,什么时候就没有烦恼。
  19. MFC_改变窗口大小,随着鼠标的拖动改变
  20. 将chrome中的收藏夹导入edge

热门文章

  1. 服务器可以划分成虚拟主机,云服务器是虚拟主机吗
  2. php的服务器变量$SERVER以及防止$_SERVER['PHP_SELF']造成的XSS漏洞攻击及其解决方案
  3. linux shell数学计算器,技术|使用 GNU bc 在 Linux Shell 中进行数学运算
  4. mysql 是dos程序_mysql Dos操作
  5. python for循环九九乘法表_python—用for循环、while循环和一句话打印九九乘法表
  6. c++用一级运算比较大小_阿里百度腾讯 C/C++ 面试题总结,我全都告诉你!
  7. js中深拷贝和浅拷贝问题
  8. 浅谈手机网站优化的需要注意哪些事项?
  9. 实现if_如何解决开发中 if...esle 代码过多的问题,强烈推荐!
  10. 电脑能连蓝牙耳机吗_安卓手机延迟最低的蓝牙耳机有吗?超低延迟蓝牙耳机推荐...