转载:http://blog.csdn.net/meng2602956882/article/details/13511587

1、什么是Java监听器

监听器也叫Listener,是Servlet的监听器,它可以监听客户端的请求、服务端的操作等。通过监听器,可以自动激发一些操作,比如监听在线的用户的数量。

2、Listener接口分类

1.1> ServletContextListener监听ServletContext对象

1.2> ServletContextAttributeListener监听对ServletContext属性的操作,比如增加、删除、修改

2.1> HttpSessionListener监听Session对象

2.2> HttpSessionActivationListener监听HTTP会话的active和passivate情况,passivate是指非活动的session被写入持久设备(比如硬盘),active相反。

2.3> HttpSessionAttributeListener监听Session中的属性操作

3.1> ServletRequestListener监听Request对象

3.2> ServletRequestAttributeListener监听Requset中的属性操作

3、Java代码

1.1> ServletContextListener

contextInitialized(ServletContextEvent) 初始化时调用

contextDestoryed(ServletContextEvent) 销毁时调用,即当服务器重新加载时调用

2.1>HttpSessionListener

sessionCreated(HttpSessionEvent) 初始化时调用

sessionDestoryed(HttpSessionEvent) 销毁时调用,即当用户注销时调用

3.1>ServletRequestListener

requestinitialized(ServletRequestEvent) 对实现客户端的请求进行监听

requestDestoryed(ServletRequestEvent) 对销毁客户端进行监听,即当执行request.removeAttribute("XXX")时调用

4、Demo

步骤一:新建CountListener类

  1. package web;
  2. import javax.servlet.ServletContext;
  3. import javax.servlet.http.HttpSession;
  4. import javax.servlet.http.HttpSessionEvent;
  5. import javax.servlet.http.HttpSessionListener;
  6. public class CountListener implements HttpSessionListener {
  7. private int count = 0;
  8. public void sessionCreated(HttpSessionEvent se) {
  9. count++;
  10. HttpSession session = se.getSession();
  11. ServletContext sct = session.getServletContext();
  12. sct.setAttribute("count", count);
  13. }
  14. public void sessionDestroyed(HttpSessionEvent se) {
  15. count--;
  16. HttpSession session = se.getSession();
  17. ServletContext sct = session.getServletContext();
  18. sct.setAttribute("count", count);
  19. }
  20. }

步骤二:配置监听器

  1. <listener>
  2. <listener-class>web.CountListener</listener-class>
  3. </listener>

步骤三:添加index.jsp页面

  1. <%@ page contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <html>
  4. <head>
  5. <title></title>
  6. </head>
  7. <body>
  8. 当前共有<%=application.getAttribute("count").toString()%>人在线<br>
  9. <a href="logout">登出</a>
  10. </body>
  11. </html>

步骤四:添加LogoutServlet类

package web;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class LogoutServlet extends HttpServlet {
public void service(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
HttpSession session = request.getSession();
session.invalidate();
out.close();
}
}

步骤四:配置LogoutServlet

<servlet-name>LogoutServlet</servlet-name>
<servlet-class>web.LogoutServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LogoutServlet</servlet-name>
<url-pattern>/logout</url-pattern>

步骤五:运行查看结果

      

由于Chrome浏览器再打开选项卡也是与第一个窗口共用sessionId,所以使用火狐浏览器来模拟第二个上线的用户

      

回到Chrome浏览器,点击刷新

      

点击火狐浏览器中的登出,然后回到Chrome浏览器刷新页面

补充:ContextLoaderListener的作用就是启动Web容器时,自动装配ApplicationContext的配置信息。因为它实现了ServletContextListener这个接口,在web.xml配置这个监听器,启动容器时,就会默认执行它实现的方法。

<context-param><param-name>contextConfigLocation</param-name>
<param-value>classpath*:applicationContext-*.xml</param-value></context-param><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener>

  

  第一段说明ContextLoader可以由 ContextLoaderListener和ContextLoaderServlet生成。如果查看ContextLoaderServlet的API,可以看到它也关联了ContextLoader这个类而且它实现了HttpServlet这个接口

第二段,ContextLoader创建的是 XmlWebApplicationContext这样一个类,它实现的接口是WebApplicationContext->ConfigurableWebApplicationContext->ApplicationContext->

BeanFactory这样一来spring中的所有bean都由这个类来创建

第三段,讲如何部署applicationContext的xml文件,如果在web.xml中不写任何参数配置信息,默认的路径是"/WEB-INF/applicationContext.xml,在WEB-INF目录下创建的xml文件的名称必须是applicationContext.xml。如果是要自定义文件名可以在web.xml里加入contextConfigLocation这个context参数:

<context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            /WEB-INF/classes/applicationContext-*.xml
        </param-value>
    </context-param>

在<param-value> </param-value>里指定相应的xml文件名,如果有多个xml文件,可以写在一起并一“,”号分隔。上面的applicationContext-*.xml采用通配符,比如这那个目录下有applicationContext-ibatis-base.xml,applicationContext-action.xml,applicationContext-ibatis-dao.xml等文件,都会一同被载入

转载于:https://www.cnblogs.com/liaoyanglong/p/6163492.html

Java监听器Listener使用说明相关推荐

  1. Java监听器Listener入门示例

    GUI的小窗口演示监听器 创建监听器对象

  2. httplistener java_Java监听器listener的介绍

    Java监听器listener的介绍 listener 能做什么 当web中某些动作发生之后,服务器就调用listener中对应的方法. 内部机制 接口回调 Web监听器 步骤 创建需要的监听器类,实 ...

  3. java web自定义监听器_Android自定义监听器Listener(自定义Java Callback回调事件)

    Callback回调事件介绍 Java或Android中创建异步回调最普遍的做法就是使用listener监听器或者observer观察者模式来解决,listener回调事件通常用于实现一个代码去监听另 ...

  4. java监听器(Listener)统计在线人数

    使用java监听器统计在线人数 1. 监听器的简介 监听器就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上述事件后,监听器某个方法 ...

  5. Java 三大器之监听器Listener

    监听器需求原因: 有时候希望不需要用户发起请求而后台定时处理某种事务.如签到功能模块,每天凌晨00:00自动将用户数据库的所有签到状态自动更新为未签到,这是不需要用户发请求的,是后台自动定时触发处理的 ...

  6. 一篇文章教你学会使用SpringBatch 监听器Listener

    文章目录 一.SpringBatch监听器 二.搭建SpringBatch开发环境 三.监听器详细介绍 1.JobExecutionListener 2.StepExecutionListener 3 ...

  7. JAVA——监听器ActionListener与MouseListener执行顺序

    基本概念 监听器(Listener):监听器用于监听web应用中某些对象.信息的创建.销毁.增加,修改,删除等动作的发生,然后作出相应的响应处理.当范围对象的状态发生变化的时候,服务器自动调用监听器对 ...

  8. Java 监听器,国际化

    1. 监听器 1.1 概述 监听器: 主要是用来监听特定对象的创建或销毁.属性的变化的! 是一个实现特定接口的普通java类! 对象: 自己创建自己用 (不用监听) 别人创建自己用 (需要监听) Se ...

  9. 监听器Listener

    监听器Listener Servlet监听器是监听事件发生,在事件发生前后能够做出相应处理的web应用组件. PS:与传统监听直接将监听事件注册在事件源上不同,Servlet的监听器是统一配置在web ...

最新文章

  1. 【ELK】ELK集群搭建(ElasticSearch Logstash Kinaba)
  2. 为何你叫妹子笑,却拍出无数黑照?
  3. Android 面试 - 有关Service的面试题
  4. 解决11g Rac实例状态为Stuck Archiver
  5. Jquery日历编写小练习
  6. css 水平垂直居中那些事
  7. php grepmatch,linux最快的文本搜索神器ripgrep(grep的最好代替者)
  8. Ibatis.Net 各类的作用说明学习(三)
  9. 字典树-大量字符串前缀及出现次数是否存在统计(Trie树-java)算法实现
  10. java字符拼成_Java字符拼成图片(image-ASCII)(非原创)
  11. 电脑桌面天气计算机备忘录,备忘录怎么添加到桌面,桌面备忘录小工具
  12. Scrapy 爬取电影网站开发微信公众号
  13. lg相乘公式_lg的运算法则是什么
  14. 处理vue项目中使用es6模板字符串中\n换行问题
  15. 给IT新人的15个建议:苦逼程序员的辛酸反省与总结!
  16. java sencha_基于SenchaCmd搭建ExtJS 6.2版本开发环境(图文教程)
  17. strcmp()函数详解
  18. 我这些年从来没有用过算法,除了出去面试的时候
  19. SyntaxError: invalid syntax都可能是是什么错!!!(持续更新)
  20. mysql ley_len计算

热门文章

  1. 企鹅手机即将发布,TencentOS会是亮点么?
  2. apache简单安全配置
  3. 蓝桥杯 ALGO-26 算法训练 麦森数
  4. 并发设计模式之Guarded Suspension模式
  5. cin.getline()、getline()、gets()、cin.get(),getchar()的区别
  6. java实现for文件删除_Java 添加、删除、替换、格式化Word中的文本的步骤详解(基于Spire.Cloud.SDK for Java)...
  7. zabbix监控哪些东西_监控系统选型,一篇全搞定
  8. Linux常用的几个监控系统性能的命令
  9. linux 中用vi编辑器替换字符
  10. james邮件服务器的用户信息添加