在Servlet API中有这样一个ServletContextListener接口,他能过监听servletContext的生命周期,也就是web应用的生命周期。
servletContextListener接口中定义了两个方法,分别用于监听web应用的创建和销毁,下面分别介绍这两个方法:
- contextInitialized(ServletContextEvent sce):当Servlet容器启动Web应用时调用该方法。在调用完该方法之后,容器再对Filter初始化,并且对那些在Web应用启动时就需要被初始化的Servlet进行初始化。
- contextDestroyed(ServletContextEvent sce):当Servlet容器终止Web应用时调用该方法。在调用该方法之前,容器会先销毁所有的Servlet和Filter过滤器。
实现此接口,我们就可以在web应用启动时,去执行某一项后台任务,例如初始化缓存。监听消息队列等。下面是我实现的一个在web应用启动时去监听一个weblogic队列的实例。
import org.dom4j.io.SAXReader;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.springframework.context.ApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
import javax.jms.*;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.ServletContext;
import java.util.Hashtable;
import java.util.Date;
import java.io.StringReader;
import com.zhengxin.eoms.uip.core.util.DateTools;
/**
* Created by IntelliJ IDEA.
* User: jiaxy
* Date: 2009-11-11
* Time: 16:51:31
* DESC:
*/
public class ReceiveMessageListener implements ServletContextListener, MessageListener {
private boolean flag = true;
private QueueReceiver reciver; //消息接收器
private QueueSender sender; //消息发送器
private QueueConnection con;
private QueueSession session;
private ServletContext servletContext;
public void contextInitialized(ServletContextEvent servletContextEvent) {
servletContext=servletContextEvent.getServletContext();
Hashtable hash = new Hashtable();
hash.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
hash.put(Context.PROVIDER_URL, "t3://132.33.2.88:8008");
try {
InitialContext ic = new InitialContext(hash);
//第一步.得到一个连接工厂.
QueueConnectionFactory factory = (QueueConnectionFactory) ic.lookup("esb_eoms_ConnectionFactory_1");
//第二步.从这个连接工厂里创建连接
con = factory.createQueueConnection();
//第三步.创建Session.
session = con.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
//第四步.查询我们的jms Destination
Queue receiveQueue = (javax.jms.Queue) ic.lookup("ha_eoms_receive");//修改这里的queue jndi
Queue sendQueue = (javax.jms.Queue) ic.lookup("common_send");//修改这里的queue jndi
//第五步.创建发布者或者接收者.
reciver = session.createReceiver(receiveQueue);
sender=session.createSender(sendQueue);
//第六步.接收或者发送
ReceiveMessageListener qrrs = new ReceiveMessageListener();
reciver.setMessageListener(qrrs);
con.start();//接收端需要打开连接这样才可以接收..不难理解吧..而发送仅仅是发送到中间件
while (flag) {
Thread.sleep(50000);
}
con.close();
} catch (Exception e) {
System.out.println("监听消息出错!");
}
}
public void contextDestroyed(ServletContextEvent servletContextEvent) {
try {
con.close();
} catch (JMSException e) {
e.printStackTrace();
}
}
/**
* 当队列中有消息时会调用此方法
* @param message
*/
public void onMessage(Message message) {
try {
TextMessage m = (TextMessage) message;
String result = m.getText();
System.out.println(result);
} catch (Exception e) {
e.printStackTrace();
}
}
在web.xml中配置如下:
<listener>
<listener-class>ReceiveMessageListener</listener-class>
</listener>
分享到:
相关推荐
总结来说,J2EE中的任务调度可以根据项目需求选择不同的实现方式。对于简单的需求,可以考虑使用Java内置的定时器API;如果需要与Servlet容器生命周期同步,可以选择容器的定时任务;而对于复杂、高可用性的需求,...
总结来说,`ServletContextListener`、session监听和请求侦听器是Java Web开发中不可或缺的组件,它们使得开发者能够更好地控制应用程序的生命周期,管理用户会话,以及对请求进行细粒度的监控和处理。通过理解和...
public class MyServletContextListener implements ServletContextListener { @Override public void contextInitialized(ServletContextEvent sce) { // 监听Web应用程序初始化 } @Override public void ...
### J2EE课程总结 #### 数据库:Oracle **1. Oracle SQL基础知识** - **选择行**:通过`SELECT`语句结合`WHERE`子句来实现特定条件下的数据筛选。 - **限制选择行**:利用`LIMIT`或`ROWNUM`来限制返回结果的数量...
### Servlet监听器总结 #### 一、Listener概念与作用 - **定义**:在Java Web开发中,Listener(监听器)是一种特殊的组件,主要用于监听容器内的特定事件,并根据这些事件的发生执行相应的处理逻辑。 - **功能**...
### Java程序员经验总结 #### 一、`java.math.BigDecimal`与`Double`转换问题 在日常开发中,可能会遇到需要将`BigDecimal`转换为`Double`的情况,但是直接尝试进行类型转换时会出现编译错误:“`java.math....
- `ServletContextListener`:监听Web应用的初始化和销毁。 3. **监听器接口**:例如,`javax.servlet.http.HttpSessionListener`接口中的`sessionCreated(HttpSessionEvent se)`和`sessionDestroyed...
总结来说,Java定时执行可以通过多种方式实现,包括`java.util.Timer`、`ScheduledExecutorService`以及在Web应用上下文中使用`ServletContextListener`。提供的文件`ReloadResourceListener.java`和`...
总结一下,Java Web定时器的使用主要包括以下步骤: 1. 创建一个继承自`TimerTask`的类,实现`run()`方法。 2. 在Servlet监听器类中创建`Timer`实例,并使用`schedule()`方法设置定时任务。 3. 在`web.xml`配置文件...
- **ServletContextListener**: 监听应用级别的事件。 - **HttpSessionListener**: 监听会话级别的事件。 - **ServletRequestListener**: 监听请求级别的事件。 #### 三十七、JSP的内置对象及方法 - **内置对象...
在这里,我们将使用`HttpSessionListener`和`ServletContextListener`来跟踪用户访问。`HttpSessionListener`可以监听会话的创建和销毁,而`ServletContextListener`则能监听Web应用的启动和停止。 ### 3. 注册监听...
在这个“Servlet监听器例子”中,我们将深入探讨如何使用`ServletContextListener`, `HttpSessionListener`, 和 `HttpSessionAttributeListener`来实现不同的功能。 首先,`ServletContextListener`接口用于监听...
#### 五、总结 通过以上步骤,我们可以在Java Web环境中实现定时任务的功能。这种方法不仅适用于简单的定时任务,还可以扩展到更复杂的业务逻辑中。需要注意的是,在实际开发过程中,还需要考虑到定时任务的并发控制...
总结,Java定时器在Web中的应用通过`java.util.Timer`和`ServletContextListener`可以实现Web应用启动时自动执行定时任务的功能。这在诸如数据清理、统计分析、系统监控等场景中非常有用。同时,通过结合Spring等...
#### 五、总结 通过以上步骤,我们已经成功地使用Comet4J实现了一个简单的服务器到客户端的数据推送功能。这种实现实时通信的方式不仅简单易懂,而且性能高效。在实际项目开发中,可以根据具体需求进行相应的扩展和...
总结来说,Java Web中的定时任务通常借助`java.util.Timer`类和`ServletContextListener`或`HttpServlet`来实现,通过配置`web.xml`来控制定时器的启动和销毁。这种方式方便灵活,可以适应各种复杂的定时需求,如...
在Java的Web应用服务器中,...总结起来,Tomcat监听器是控制和扩展Tomcat应用程序行为的关键工具。正确地配置和使用监听器可以极大地提升应用的效率、稳定性和可维护性,是每个Tomcat开发者必须掌握的核心技术之一。
总结一下,Java定时器(java.util.Timer)和TimerTask配合使用,可以方便地实现定时执行任务的需求。通过结合Servlet监听器,我们可以确保定时器在Web应用启动时启动,并在应用关闭时停止,确保任务的生命周期与Web...