ServletContextListener使用总结

在Servlet API中有这样一个ServletContextListener接口,他能过监听servletContext的生命周期,也就是web应用的生命周期。
servletContextListener接口中定义了两个方法,分别用于监听web应用的创建和销毁,下面分别介绍这两个方法:
[list]
[*]contextInitialized(ServletContextEvent sce):当Servlet容器启动Web应用时调用该方法。在调用完该方法之后,容器再对Filter初始化,并且对那些在Web应用启动时就需要被初始化的Servlet进行初始化。
[*]contextDestroyed(ServletContextEvent sce):当Servlet容器终止Web应用时调用该方法。在调用该方法之前,容器会先销毁所有的Servlet和Filter过滤器。
[/list]
实现此接口,我们就可以在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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值