与ServletContext相关的监听器
概述
与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相关的监听器的更多相关文章
- 与HttpSession相关的监听器
概述 与HttpSession相关的监听器有四个:分别是HttpSessionListener.HttpSessionAttributeListener.HttpSessionBindingListe ...
- Servlet 应用程序事件、监听器
Web容器管理Servlet/JSP相关的生命周期,若对HttpServletRequest对象.HttpSession对象.ServletContxt对象在生成.销毁或相关属性设置发生的时机点有兴趣 ...
- 【Servlet】1、Servlet监听器及相关接口
Servlet监听器用于监听一些重要事件的发生,监听器对象可以在事情发生前.发生后可以做一些必要的处理. 接口: 目前Servlet2.4和JSP2.0总共有8个监听器接口和6个Event类,其中Ht ...
- JavaWeb学习笔记八 监听器
监听器Listener jservlet规范包括三个技术点:servlet :listener :filter:监听器就是监听某个对象的的状态变化的组件.监听器的相关概念事件源: 被监听的对象(三个域 ...
- 监听器 Listener
监听器:监听某个对象状态的变化 被监听的对象:request.session.servletContext 监听对象的创建和销毁/对象属性的变化 ServletContext HttpSession ...
- Listener监听器和Filter过滤器
Listener监听器 WEB中的监听器 WEB 中的 Listener 和 Filter 是属于 Servlet 规范中的高级的技术.WEB中的监听器共有三类八种(监听三个域对象)* 事件源:Ser ...
- jsp 监听器
Servlet API提供了一系列的事件和事件监听接口. 上层的servlet/JSP应用能够通过调用这些API进行事件 驱动的开发.这里监听的所有事件都继承自 java.util.Event对象.监 ...
- 【Spring】1、Spring 中的监听器 Listener
一.接口 1.EventListener 2.HttpSessionAttributeListener 继承EventListener接口 HttpSessionAttributeListener ...
- Java中的监听器
servlet的技术规范包括三个:servlet,listener,filter,今天记录一下listener的学习. 监听器就是监听某个对象的状态变化的技术.监听器包括事件源,监听器,注册监听器以及 ...
随机推荐
- 什么是MSI文件?
当你双击`msi`文件时,就会调用`window.installer`程序,接下来就和安装其他程序一样了,但是你要确保你的`window.installer`服务是开启的,你可以在控制面板下的服务中找 ...
- 简单的字母全排列问题—递归法和STL法
问题描述:求全由小写字母组成的不超过200个字符序列的全排列 如输入序列bbjd,排列结果为: bbdj bbjd bdbj bdjb bjbd bjdb dbbj dbjb djbb jbbd jb ...
- centos7 安装配置zookeeper
https://blog.csdn.net/AaronLin6/article/details/78438877 https://www.cnblogs.com/sxdcgaq8080/p/74924 ...
- 【转】Java中堆和栈的区别
Java的堆是一个运行时数据区,类的对象从中分配空间.这些对象通过new.newarray.anewarray和multianewarray等 指令建立,它们不需要程序代码来显式的释放.堆是由垃圾回收 ...
- ObjectOutputStream
public class Test { public static void main(String[] args) throws Exception { //writeObject(); readO ...
- python采用pika库使用rabbitmq总结,多篇笔记和示例
这一段时间学习了下rabbitmq,在学习的过程中,发现国内关于python采用pika库使用rabbitmq的资料很少,官网有这方面的资料,不过是都英文的.于是笔者结合自己的理解,就这方面内容写了一 ...
- 小程序获取地址授权的修改 wx.openSetting需点击
开发者可以通过 wx.openSetting 接口来打开小程序设置界面并返回用户的设置结果.在原来的 wx.openSetting 接口中,我们允许开发者直接调用此接口,但目前我们发现有不少开发者滥用 ...
- 祸害阿里云宕机 3 小时的 IO HANG 究竟是个什么鬼?!
2019年3月3日凌晨,微博炸锅,有网友反映说阿里云疑似出现宕机,华北很多互联网公司受到暴击伤害,APP.网站全部瘫痪,我自己的朋友圈和微信群里也有好友反馈,刚刚从被窝被叫起来去修Bug,结果发现服务 ...
- .19-浅析webpack源码之compile流程-rules参数处理(2)
第一步处理rule为字符串,直接返回一个包装类,很简单看注释就好了. test/include/exclude 然后处理test.include.exclude,如下: if (rule.test | ...
- C# 在webapi项目中配置Swagger(最新版2017)
这篇文章已经过时了: http://www.cnblogs.com/alunchen/p/6888002.html 不用那么繁琐的配置了,直接导入一个包就行了: Install-Package Swa ...