与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的学习. 监听器就是监听某个对象的状态变化的技术.监听器包括事件源,监听器,注册监听器以及 ...
随机推荐
- java单例类的几种实现
一,最简单的方式 public class Singleton{ private Singleton(){}; private static Singleton instance = new Sing ...
- Linux发邮件
一.mail命令 1.配置 vim /etc/mail.rc 文件尾增加以下内容 set from=1968089885@qq.com smtp="smtp.qq.com"set ...
- Ruby:Net::HTTP
待续... Github上有几个关于Net::HTTP的使用例子:Ruby Net::HTTP cheat sheet Net::HTTP的官方文档 Ruby net/http example这篇文章 ...
- mysql基础知识(3)
十六.组合查询 使用 union 来组合查询,如果第一个查询返回M行,第二个查询返回N行,那么组合查询的结果一般为 M+N 行. 注意:每个查询必须包含相同的行.表达式的聚集函数:默认会去除相同行.表 ...
- sqlserver暂时禁用触发器进行update
--1.禁用某个表上的所有触发器 ALTER TABLE tbname DISABLE TRIGGER all go --2.执行update语句 update tbname set .... go ...
- 有意思的App
掘金 javadoop 专业相机也羡慕奖 – Focos 说个睡前故事 so easy 奖 – 洪恩双语绘本 效率蹭蹭上升奖 – Sorted³ 时光隧道走一回奖 – NOMO 相机 设计师也爱用奖 ...
- js便签笔记(7)——style、currentStyle、getComputedStyle区别介绍【转载】
转者语: 今天看jQuery源码CSS部分,里面用到了currentStyle和getComputedStyle来获取外部样式. 因为elem.style.width只能获取elem的style属性里 ...
- 记一次使用mybatis进行like 模糊查询遇到的问题
"bdate like '#{date}%' and ..." 最开始这样写的· 将传入的参数和%用单引号包起来,但是这会报错 java.sql.SQLException: Par ...
- epoll 触发模式
Edge Triggered (ET):边缘触发只有数据到来,才触发,不管缓存区中是否还有数据.Level Triggered (LT):水平触发只要有数据都会触发. LT(level trigger ...
- 利用VS(Visual Studio)自带的工具查看DLL文件的信息
装完VS后,就可以使用其自带的dumpbin命令来查看DLL文件的信息, 首先要打开VS的Developer Command Prompt命令窗口,打开不同版本的VS可能略有不同, 请参考:http: ...