博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Listener--ServletContextListener接口的使用详解
阅读量:2442 次
发布时间:2019-05-10

本文共 3577 字,大约阅读时间需要 11 分钟。

ServleContextListener

ServleContextListener监听的是ServletContext域的创建与销毁。

实际上ServeltContextListener是生成ServeltContext对象之后调用的.生成ServeltContext对象之后,这些代码在我们业务实现之前就写好,它怎么知道我们生成类的名字.实际上它并不需要知道我们的类名,类里面有方法.他们提供一个规范,就一个接口,ServeltContextListner,只要继承这个接口就必须实现这个方法.然后这个类在web.xml中Listener节点配置好.Servelt容器先解析web.xml,获取Listener的值.通过反射生成对象放进缓存.然后创建ServeltContext对象和ServletContextEvent对象.然后在调用ServletContextListener的contextInitialized方法,然后方法可以把用户的业务需求写进去.struts和spring框架就是类似这样的实现,我们以后写一些框架也可以在用.

  • ServletContext域的生命周期

    何时创建:服务器启动创建
    何时销毁:服务器关闭销毁

  • 监听器的编写步骤:

  1. 编写一个监听器类去实现监听器接口
  2. 覆盖监听器的方法
  3. 需要在web.xml中进行配置–注册
  • 监听的方法
//创建ServletContext时执行@Overridepublic void contextInitialized(ServletContextEvent sce){
System.out.println("context init...");}//销毁ServletContext时执行@Overridepublic void contextDestroyed(ServletContextEvent sce){
System.out.println("context destory...");}
  • ServletContextListener监听器的主要作用
    1. 初始化工作:初始化对象、初始化数据(加载数据库驱动、连接池的初始化)
    2. 加载一些初始化的配置文件(例如Spring的配置文件)
    3. 任务调度(定时器Timer/TimerTask)

实例1:通过ServletContextListener获得初始化参数并通过控制台输出

配置初始化参数:

testStr
helloWorld

监听器:

package pers.zhang.listener; /** * @author zhang * @date 2019/9/19 - 19:57 */import javax.servlet.ServletContext;import javax.servlet.ServletContextEvent;import javax.servlet.ServletContextListener;import javax.servlet.http.HttpSessionAttributeListener;import javax.servlet.http.HttpSessionEvent;import javax.servlet.http.HttpSessionListener;import javax.servlet.http.HttpSessionBindingEvent;public class MyServletContextListener implements ServletContextListener{
//监听context域对象的创建 public void contextInitialized(ServletContextEvent sce) {
System.out.println("ServletContext创建了..."); //获得ServletContext ServletContext servletContext = sce.getServletContext(); //获得初始化参数 String str = servletContext.getInitParameter("testStr"); //打印 System.out.println(str); } //监听context域对象的销毁 public void contextDestroyed(ServletContextEvent sce) {
System.out.println("ServletContext销毁了..."); }}

注册监听器:

pers.zhang.listener.MyServletContextListener

启动服务器,控制台输出:

ServletContext创建了...helloWorld

关闭服务器,控制台输出:

ServletContext销毁了...

实例2:使用ServletContextListener监听器开启任务调度,每隔5秒在控制台打印当前时间

监听器:

package pers.zhang.listener;/** * @author zhang * @date 2019/9/19 - 19:57 */import javax.servlet.ServletContext;import javax.servlet.ServletContextEvent;import javax.servlet.ServletContextListener;import javax.servlet.http.HttpSessionAttributeListener;import javax.servlet.http.HttpSessionEvent;import javax.servlet.http.HttpSessionListener;import javax.servlet.http.HttpSessionBindingEvent;import java.text.SimpleDateFormat;import java.util.Date;import java.util.Timer;import java.util.TimerTask;public class MyServletContextListener implements ServletContextListener{
//监听context域对象的创建 public void contextInitialized(ServletContextEvent sce) {
Timer timer = new Timer(); timer.scheduleAtFixedRate(new TimerTask() {
@Override public void run() {
//获取当前时间 Date date = new Date(); SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); System.out.println(sf.format(date)); } }, new Date(), 5000); } //监听context域对象的销毁 public void contextDestroyed(ServletContextEvent sce) {
System.out.println("ServletContext销毁了..."); }}

启动服务器,控制台输出:

2019-09-19 21:41:442019-09-19 21:41:492019-09-19 21:41:542019-09-19 21:41:592019-09-19 21:42:04

转载地址:http://zisqb.baihongyu.com/

你可能感兴趣的文章
web设置字体粗细css_Web上使用CSS的可变字体
查看>>
css 垂直对齐_CSS垂直对齐属性
查看>>
为您的网站提供动力的100种Jamstack工具,API和服务
查看>>
api restful_构建RESTful API的13种最佳实践
查看>>
wordpress用途_8个热门WordPress多用途主题及其炫酷功能
查看>>
用于Angular,React和Vue.js的Bootstrap UI库
查看>>
使用MongoDB Stitch在10分钟内构建一个Slack应用
查看>>
struts2 css失效_CSS体系结构和可维护CSS的三大Struts
查看>>
php使用nginx建网站_如何使用预建网站来刷新网站的外观
查看>>
使用React和PHP开发游戏:它们的兼容性如何?
查看>>
哈巴狗入门指南
查看>>
js设置css自定义变量_CSS变量实用指南(自定义属性)
查看>>
http建立个人服务器工具_建立网站和页面的最佳7种工具
查看>>
前端框架浏览器兼容解决方案_前端框架:定制与即用型解决方案
查看>>
驯服Snoo:使用Reddit API
查看>>
php页面不渲染显示源代码_PHP如何执行-从源代码到渲染
查看>>
Sourcehunt 17.1:值得关注的7个有趣PHP软件包
查看>>
使用转发装饰器实现模块化架构
查看>>
旅行者 问题_旅行者-管理员UI可以使Laravel更加平易近人吗?
查看>>
口才配置_快速提示:口才观察者的便捷魔力
查看>>