监听器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 operty("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(); } }}