`
jiaxy917
  • 浏览: 31209 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

ServletContextListener使用总结

阅读更多
    在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中使用任务调度三种方式

    总结来说,J2EE中的任务调度可以根据项目需求选择不同的实现方式。对于简单的需求,可以考虑使用Java内置的定时器API;如果需要与Servlet容器生命周期同步,可以选择容器的定时任务;而对于复杂、高可用性的需求,...

    Listener:ServletContextListener,sesson,请求侦听器

    总结来说,`ServletContextListener`、session监听和请求侦听器是Java Web开发中不可或缺的组件,它们使得开发者能够更好地控制应用程序的生命周期,管理用户会话,以及对请求进行细粒度的监控和处理。通过理解和...

    Servlet基础知识总结

    public class MyServletContextListener implements ServletContextListener { @Override public void contextInitialized(ServletContextEvent sce) { // 监听Web应用程序初始化 } @Override public void ...

    J2EE课程总结

    ### J2EE课程总结 #### 数据库:Oracle **1. Oracle SQL基础知识** - **选择行**:通过`SELECT`语句结合`WHERE`子句来实现特定条件下的数据筛选。 - **限制选择行**:利用`LIMIT`或`ROWNUM`来限制返回结果的数量...

    servlet监听器总结

    ### Servlet监听器总结 #### 一、Listener概念与作用 - **定义**:在Java Web开发中,Listener(监听器)是一种特殊的组件,主要用于监听容器内的特定事件,并根据这些事件的发生执行相应的处理逻辑。 - **功能**...

    一个java程序员的经验总结

    ### Java程序员经验总结 #### 一、`java.math.BigDecimal`与`Double`转换问题 在日常开发中,可能会遇到需要将`BigDecimal`转换为`Double`的情况,但是直接尝试进行类型转换时会出现编译错误:“`java.math....

    过滤器filter和监听器listener的应用总结

    - `ServletContextListener`:监听Web应用的初始化和销毁。 3. **监听器接口**:例如,`javax.servlet.http.HttpSessionListener`接口中的`sessionCreated(HttpSessionEvent se)`和`sessionDestroyed...

    JAVA定时执行

    总结来说,Java定时执行可以通过多种方式实现,包括`java.util.Timer`、`ScheduledExecutorService`以及在Web应用上下文中使用`ServletContextListener`。提供的文件`ReloadResourceListener.java`和`...

    Java-Web定时器使用.doc

    总结一下,Java Web定时器的使用主要包括以下步骤: 1. 创建一个继承自`TimerTask`的类,实现`run()`方法。 2. 在Servlet监听器类中创建`Timer`实例,并使用`schedule()`方法设置定时任务。 3. 在`web.xml`配置文件...

    JSP的复习总结

    - **ServletContextListener**: 监听应用级别的事件。 - **HttpSessionListener**: 监听会话级别的事件。 - **ServletRequestListener**: 监听请求级别的事件。 #### 三十七、JSP的内置对象及方法 - **内置对象...

    JSP实现一个网站流量统计器

    在这里,我们将使用`HttpSessionListener`和`ServletContextListener`来跟踪用户访问。`HttpSessionListener`可以监听会话的创建和销毁,而`ServletContextListener`则能监听Web应用的启动和停止。 ### 3. 注册监听...

    Servlet监听器例子

    在这个“Servlet监听器例子”中,我们将深入探讨如何使用`ServletContextListener`, `HttpSessionListener`, 和 `HttpSessionAttributeListener`来实现不同的功能。 首先,`ServletContextListener`接口用于监听...

    Java_Web定时器使用

    #### 五、总结 通过以上步骤,我们可以在Java Web环境中实现定时任务的功能。这种方法不仅适用于简单的定时任务,还可以扩展到更复杂的业务逻辑中。需要注意的是,在实际开发过程中,还需要考虑到定时任务的并发控制...

    Java定时器在Web中的应用.doc

    总结,Java定时器在Web中的应用通过`java.util.Timer`和`ServletContextListener`可以实现Web应用启动时自动执行定时任务的功能。这在诸如数据清理、统计分析、系统监控等场景中非常有用。同时,通过结合Spring等...

    java comet服务器推送使用步骤

    #### 五、总结 通过以上步骤,我们已经成功地使用Comet4J实现了一个简单的服务器到客户端的数据推送功能。这种实现实时通信的方式不仅简单易懂,而且性能高效。在实际项目开发中,可以根据具体需求进行相应的扩展和...

    java定时触发任务

    总结来说,Java Web中的定时任务通常借助`java.util.Timer`类和`ServletContextListener`或`HttpServlet`来实现,通过配置`web.xml`来控制定时器的启动和销毁。这种方式方便灵活,可以适应各种复杂的定时需求,如...

    tomcat监听器

    在Java的Web应用服务器中,...总结起来,Tomcat监听器是控制和扩展Tomcat应用程序行为的关键工具。正确地配置和使用监听器可以极大地提升应用的效率、稳定性和可维护性,是每个Tomcat开发者必须掌握的核心技术之一。

    JAVA定时器word文档

    总结一下,Java定时器(java.util.Timer)和TimerTask配合使用,可以方便地实现定时执行任务的需求。通过结合Servlet监听器,我们可以确保定时器在Web应用启动时启动,并在应用关闭时停止,确保任务的生命周期与Web...

Global site tag (gtag.js) - Google Analytics