概述

  与ServletContext相关的监听器有ServletContextListener与ServletContextAttributeListener。


ServletContextListener

  ServletContextListener是“生命周期监听器”,可以让我们知道Web应用程序的初始化完成或即将销毁的时机。
  在Web应用程序初始化后或即将销毁前,Web容器会调用contextInitialized()或contextDestroyed(),并会传入ServletContextEvent,我们可以通过ServletContextEvent的getServletContext()方法取得ServletContext,再通过ServletContext的getInitParameter()方法来读取web应用程序参数。

demo  

  (1)ServletContextListener可以直接使用@WebListener标注来声明。

package com.test;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener; @WebListener
public class ServletContextListenerTest implements ServletContextListener {
public void contextInitialized(ServletContextEvent sce) {
ServletContext context = sce.getServletContext();
String value = context.getInitParameter("testParam");
System.out.println(value);
}
@Override
public void contextDestroyed(ServletContextEvent servletContextEvent) { }
}

java Code

<?xml version="1.1" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<display-name>Archetype Created Web Application</display-name> <context-param>
<param-name>testParam</param-name>
<param-value>testValue</param-value>
</context-param>
</web-app>

xml Code

  测试方法

  启动web应用控制台会输出:testValue

  (2)在Servlet 3.0之前,ServletContextListener实现类必须在web.xml中使用<listener>与<listener-class>标签来声明。

<?xml version="1.1" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<display-name>Archetype Created Web Application</display-name>
<context-param>
<param-name>testParam</param-name>
<param-value>testValue</param-value>
</context-param>
<listener>
<listener-class>com.test.ServletContextListenerTest</listener-class>
</listener>
</web-app>

应用

  可以在contextInitialized()中实现应用程序资源的准备动作,在contextDestroyed()实现释放应用程序资源的动作。例如,在应用程序初始过程中,准备好数据库连线对象、读取应用程序设置等动作。
  有些应用程序的设置,必须在Web应用程序初始化时进行,例如改变HttpSession的Cookie设置
  方法一、在web.xml中定义。
  方法二、在应用程序初始化时取得ServletContext后,使用getSessionCookieConfig()取得SessionCookieConfig进行设置。

@WebListener()
public class SomeContextListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
ServletContext context = sce.getServletContext();
context.getSessionCookieConfig().setName("caterpillar-sessionId");
}
}

ServletContextAttributeListener 

  ServletContextAttributeListener是“属性改变监听器”。当在ServletContext中添加、移除或替换属性时,可以收到通知,相对应的方法attributeAdded()、attributeRemoved()与attributeReplaced()会被调用。

package com.test;

import javax.servlet.*;
import javax.servlet.annotation.WebListener; @WebListener
public class ServletContextAttributeListenerTest implements ServletContextAttributeListener { @Override
public void attributeAdded(ServletContextAttributeEvent event) {
event.getName();
event.getValue();
} @Override
public void attributeRemoved(ServletContextAttributeEvent event) {
event.getName();
event.getValue();
} @Override
public void attributeReplaced(ServletContextAttributeEvent event) {
event.getName();
event.getValue();
}
}

在web.xml中也可以声明

<?xml version="1.1" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<display-name>Archetype Created Web Application</display-name>
<listener>
<listener-class>com.test.ServletContextAttributeListenerTest</listener-class>
</listener>
</web-app>

xml Code

与ServletContext相关的监听器的更多相关文章

  1. 与HttpSession相关的监听器

    概述 与HttpSession相关的监听器有四个:分别是HttpSessionListener.HttpSessionAttributeListener.HttpSessionBindingListe ...

  2. Servlet 应用程序事件、监听器

    Web容器管理Servlet/JSP相关的生命周期,若对HttpServletRequest对象.HttpSession对象.ServletContxt对象在生成.销毁或相关属性设置发生的时机点有兴趣 ...

  3. 【Servlet】1、Servlet监听器及相关接口

    Servlet监听器用于监听一些重要事件的发生,监听器对象可以在事情发生前.发生后可以做一些必要的处理. 接口: 目前Servlet2.4和JSP2.0总共有8个监听器接口和6个Event类,其中Ht ...

  4. JavaWeb学习笔记八 监听器

    监听器Listener jservlet规范包括三个技术点:servlet :listener :filter:监听器就是监听某个对象的的状态变化的组件.监听器的相关概念事件源: 被监听的对象(三个域 ...

  5. 监听器 Listener

    监听器:监听某个对象状态的变化 被监听的对象:request.session.servletContext 监听对象的创建和销毁/对象属性的变化 ServletContext HttpSession ...

  6. Listener监听器和Filter过滤器

    Listener监听器 WEB中的监听器 WEB 中的 Listener 和 Filter 是属于 Servlet 规范中的高级的技术.WEB中的监听器共有三类八种(监听三个域对象)* 事件源:Ser ...

  7. jsp 监听器

    Servlet API提供了一系列的事件和事件监听接口. 上层的servlet/JSP应用能够通过调用这些API进行事件 驱动的开发.这里监听的所有事件都继承自 java.util.Event对象.监 ...

  8. 【Spring】1、Spring 中的监听器 Listener

    一.接口 1.EventListener 2.HttpSessionAttributeListener   继承EventListener接口 HttpSessionAttributeListener ...

  9. Java中的监听器

    servlet的技术规范包括三个:servlet,listener,filter,今天记录一下listener的学习. 监听器就是监听某个对象的状态变化的技术.监听器包括事件源,监听器,注册监听器以及 ...

随机推荐

  1. (转)Python自动化运维之13、异常处理及反射(__import__,getattr,hasattr,setattr)

    原文:http://www.cnblogs.com/xiaozhiqi/p/5778856.html https://blog.csdn.net/zong596568821xp/article/det ...

  2. Git笔记:Git介绍和常用命令汇总

    Git 是一个开源的分布式版本控制系统,与 CVS, Subversion 等不同,它采用了分布式版本库的方式,不需要服务器端软件支持. 工作流程 Git 的工作流程大致如下: 克隆 Git 资源作为 ...

  3. java入门,学习笔记

    编译 通过javac编译java程序,会编译出一个后缀为class的文件,我们再通过java虚拟机(jvm)执行编译后的java程序. 在java中始终有一个main函数,它作为程序的入口,程序从这个 ...

  4. superset----缓存之redis

    一.概述 Superset使用Flask-Cache进行缓存,Flask-Cache支持redis,memcached,simplecache(内存),或本地文件系统)等缓存后端,如果你打算使用mem ...

  5. java arrayList vector 区别

    1. 关系图 List接口一共有三个实现类,分别是ArrayList.Vector和LinkedList 2. ArrayList.Vector和LinkedList区别 ArrayList是最常用的 ...

  6. JS和Java正则表达式验证

    js代码 <script type="text/javascript"> function SubmitCk() { var reg = /^([a-zA-Z0-9]+ ...

  7. git第四节----git commit message

    @git  commit message 什么是git commit message :git commit -m '每次提交时编辑的内容' git commit message的好处:      1 ...

  8. SpringMvc RequestMappingHandlerMapping

    RequestMappingHandlerMapping是SpringMvc中一个比较核心的类,查看下它的类结构图: InitializingBean是个很神奇的接口,在Spring每个容器的bean ...

  9. 比較C struct 與 C# unsafe struct内存分佈

    昨晚在群裏無意間看到一個朋友有一個需求.他是在C裏面將兩個結構體(HeadStruct,BodyStruct)的内存數據直接通過socket send發給C#寫的服務端來處理.當然他之前所使用的需求基 ...

  10. C/C++编程GUI库比较

    转自:http://blog.csdn.net/lostown/article/details/658654 最强的GUI库当属Qt,毕竟是商业化的东西,功能最完整,什么都好,包括类似java代码风格 ...