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

监听器ServletContextListener小记

阅读更多
   今天奉命写一个监听器监听tomcat,在tomcat启动后隔半个小时生成一些要求的静态页面,因为没写过监听器,所以在网上看了一些资料后觉得不是很难就很兴奋地开始动手,
   用了ServletContextListener,可没想到监听是监听到了,但是搞得tomcat启动的时候一路在监听,以为是这个监听器不适合就换成了session的,以为快成功的
   时候老大又说不行(后来一想也确实不行),所以又换回ServletContextListener来继续搞,后来上网看来看去原来用这个监听器才是符合要求的,一开始那种
   只不过是因为我把定时器Timer定义在了ServletContextListener的初始化函数里面了,搞得tomcat启动时老是在监听而启动不了,后来我把定时器Timer定义在
   另外一个类里面,再在ServletContextListener的初始化函数里面调用就搞定了。还是没经验啊。

        不过这里还有个问题:如何在这个初始化函数里面获得tomcat的IP和端口呢?也许很难,也许很easy,还不知道!

   Listener:

   
public class GenPagesListener implements ServletContextListener
{
        private DoSomething ds = null;
        
    public void contextInitialized(ServletContextEvent sce) {
            
            String rootPath = new File(sce.getServletContext().getRealPath("/")).getParentFile().toString();
                if(rootPath.contains("\\"))
                {
                        rootPath = rootPath.replace("\\", "/")+"/ROOT";
                }
                String hostPath = AppPropertyUtil.getProperty("webUrl");
                
                
                GlobeContext.setRootPath(rootPath);
                GlobeContext.setHostPath(hostPath);
            
            ds = new DoSomething(1000,1800000);
    }

    public void contextDestroyed(ServletContextEvent sce) {
       ds.destoryTimer();
    }


}


   中间类:

  
 public class DoSomething {

        private java.util.Timer timer;
        public DoSomething(int a,int b)
        {
                timer = new Timer();
                timer.schedule(new GenPageTask(), a,b);
        }
        
        public void destoryTimer(){
            timer.cancel();
            }
}


   要执行的任务:

  
public class GenPageTask extends TimerTask{
        
        public void run()
        {
                ApplicationContext context = GlobeContext.getApplicationContext();
                IChannelManager channelManager = (IChannelManager)context.getBean("channelManager");
                List<Channel> list = channelManager.getObjectList(Restrictions.eq("type", 1));        
                                
                for(Channel ch : list)
                {
                        Long lid = ch.getId();
                        try{
                        publishChannel(lid);
                        }
                        catch(Exception e)
                        {
                           e.printStackTrace();        
                        }
                }
        }
        
        public void publishChannel(Long lid) throws Exception
        {

                String root = GlobeContext.getRootPath();
                String rootpath = GlobeContext.getHostPath();
                ApplicationContext context = GlobeContext.getApplicationContext();
                IChannelManager channelManager = (IChannelManager)context.getBean("channelManager");
                ChannelView chan = channelManager.getView(lid);
                String puppath = root + chan.getFullPath();
                File file = new File(puppath);
                if (!file.exists()) {
                        file.mkdirs();
                }

                int pageSize = Integer.valueOf(AppPropertyUtil
                                .getProperty("listPageSize"));
                if (chan.getPageSize() != null) {
                        pageSize = chan.getPageSize();
                }
                try {
                        List<Criterion> cris = new ArrayList<Criterion>();
                        cris.add(Restrictions.eq("channelId", chan.getId()));
                        cris.add(Restrictions.eq("struts", 1));
                        IDocumentManager documentManager = (IDocumentManager)context.getBean("documentManager");
                        int totalPage = documentManager.getPageObject(0, pageSize, cris)
                                        .getTotalPage();

                        for (int page = 1; page <= totalPage; page++) {
                                String index = "";
                                if (page == 1) {
                                        index = "index";
                                } else {
                                        index = "list_" + page + "";
                                }
                                String url = rootpath
                                                + "admin/channel/docList.htm?data.channelId="
                                                + chan.getId() + "&data.page=" + page;
                                HtmlGenUtil.writeHtml(puppath + index + ".shtml", HtmlGenUtil
                                                .getHtmlCode(url), "YES");
                        }
                } catch (Exception e) {
                        e.printStackTrace();
                }
        }
}


      
4
2
分享到:
评论
2 楼 coreymylife 2008-10-25  
不是问题的问题!~
1 楼 scnujie 2008-07-25  
good example!

相关推荐

    一个简单的监听器案例项目

    在Servlet规范中,定义了多种类型的监听器,例如ServletContextListener、HttpSessionListener、ServletRequestListener等。这些监听器接口分别用于监听Servlet上下文、HTTP会话和HTTP请求的生命周期事件。 1. ...

    监听器源代码.zip

    2. **Servlet监听器**: 在Web开发中,特别是使用Servlet技术时,监听器(如ServletContextListener、ServletRequestListener和HttpSessionListener)用于监听Servlet容器的特定事件。例如,ServletContextListener...

    javaEE监听器

    1. **创建监听器类**:首先,你需要定义一个类并实现相应的监听器接口,例如ServletContextListener。 2. **配置监听器**:然后,在web.xml配置文件中,你需要为监听器类添加相应的配置项,指定当特定事件发生时,...

    web监听器代码--监听servlet

    Web监听器是Java Web应用程序中的一个重要组件,它们允许开发者在特定事件发生时执行代码,比如在Servlet上下文初始化或销毁时、用户会话创建或结束时等。在Java Web开发中,监听器通过实现特定接口并配置在`web.xml...

    过滤器和监听器的使用与区别

    常见的监听器包括HttpSessionListener、ServletRequestListener、ServletContextListener等,它们分别用于监听会话的创建、销毁,请求的初始化、完成,以及整个Web应用的初始化和销毁。在02.监听器.doc中,可能详述...

    ServletContextListener socket实现数据接收

    通过创建ServletContextListener监听器,socket来实现tcp/ip协议客户端数据的接收功能。这是一个maven项目,直接导入eclipse即可运行,此处监听的是9092端口,将项目运行起后,可以对其端口使用情况进行查看,在...

    servlet监听器案例

    Servlet监听器是实现了Java Servlet API中特定接口的类,例如`ServletContextListener`、`ServletRequestListener`和`HttpSessionListener`等。当Web应用启动、关闭,或者用户会话创建、销毁等事件发生时,监听器会...

    servlet监听器技术源码

    在Java Servlet API中,监听器是通过实现Java的特定接口来创建的,例如`ServletContextListener`、`ServletRequestListener`和`HttpSessionListener`等。这些接口定义了各个生命周期事件的方法,如`context...

    java监听器和过滤器详解

    - **生命周期监听器**:主要包括`ServletRequestListener`、`HttpSessionListener`、`ServletContextListener`,用于监听`request`、`session`、`servletContext`这三个容器对象的创建与销毁。 - **属性监听器**:...

    tomcat监听器

    这些监听器通过实现特定的接口,如javax.servlet.ServletContextListener,来响应这些事件。 1. **监听器的作用** 监听器的主要作用在于提供预处理和后处理功能。它们可以在Web应用程序启动时执行初始化任务,例如...

    jsp/servlet中过滤器和监听器的区别

    - **工作原理**:监听器通过实现Servlet规范中的各种监听器接口,如`ServletContextListener`、`HttpSessionListener`、`ServletRequestListener`等,当触发相应事件时,容器会调用相应的监听器方法。 - **应用...

    关于过滤器和监听器的使用模板

    在Java Web开发中,过滤器(Filter)和监听器(Listener)是两个非常重要的组件,它们主要用于增强应用程序的功能和管理应用程序的状态。以下是关于这两个概念的详细说明。 **过滤器(Filter)** 过滤器是Servlet...

    Struts2的监听器的使用

    监听器是Servlet容器(如Tomcat)中的特殊Java类,它们实现了特定的监听器接口,并在特定事件发生时被调用。在Struts2中,这些监听器主要用于初始化框架、配置拦截器、管理Action实例等任务。 1. **...

    Java的监听器种类

    ### Java的监听器种类 Java中的监听器是一种特殊类型的对象,它们主要负责监听特定的事件并在这些事件发生时执行相应的动作。监听器广泛应用于多种场景,尤其是在Servlet容器中,监听器能够帮助开发者更加灵活地...

    监听器.pdf

    监听器.pdf 监听器是Java Web开发中的一种重要机制,用于监听和响应Web应用程序中的事件。下面是监听器的详细知识点: 概念:监听器是一个实现了特定接口的Java类,用于监听另一个Java类的方法调用或者属性改变。 ...

    servlet中的过滤器与监听器

    监听器通过实现不同的接口,如`ServletContextListener`, `HttpSessionListener`, `ServletRequestListener`等来响应这些事件。 **常见监听器类型**: 1. `ServletContextListener`: 监听应用的启动和关闭,常用于...

    servlet监听器总结

    1. **实现监听器接口**:首先需要根据需求选择合适的监听器接口实现,例如`ServletContextListener`等。 2. **编写监听器类**:在该类中重写必要的方法,实现所需的业务逻辑。 3. **在`web.xml`中配置监听器**: - ...

    过滤器和监听器的使用

    监听器的实现通常需要实现特定接口,如HttpSessionListener、ServletContextListener等,并在web.xml中注册。 使用监听器可以实现以下功能: 1. **会话管理**:通过HttpSessionListener监控会话的创建、过期,可以...

    JAVA Servlet监听器listener学习资料

    - 编写监听器需要实现如ServletContextListener、HttpSessionListener或ServletRequestListener等接口,并覆盖对应的事件处理方法。 - 完成监听器类的编写后,需要在`web.xml`部署描述符文件中进行配置,声明监听...

    Servlet监听器例子

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

Global site tag (gtag.js) - Google Analytics