今天奉命写一个监听器监听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();
}
}
}
分享到:
相关推荐
在Servlet规范中,定义了多种类型的监听器,例如ServletContextListener、HttpSessionListener、ServletRequestListener等。这些监听器接口分别用于监听Servlet上下文、HTTP会话和HTTP请求的生命周期事件。 1. ...
2. **Servlet监听器**: 在Web开发中,特别是使用Servlet技术时,监听器(如ServletContextListener、ServletRequestListener和HttpSessionListener)用于监听Servlet容器的特定事件。例如,ServletContextListener...
1. **创建监听器类**:首先,你需要定义一个类并实现相应的监听器接口,例如ServletContextListener。 2. **配置监听器**:然后,在web.xml配置文件中,你需要为监听器类添加相应的配置项,指定当特定事件发生时,...
Web监听器是Java Web应用程序中的一个重要组件,它们允许开发者在特定事件发生时执行代码,比如在Servlet上下文初始化或销毁时、用户会话创建或结束时等。在Java Web开发中,监听器通过实现特定接口并配置在`web.xml...
常见的监听器包括HttpSessionListener、ServletRequestListener、ServletContextListener等,它们分别用于监听会话的创建、销毁,请求的初始化、完成,以及整个Web应用的初始化和销毁。在02.监听器.doc中,可能详述...
通过创建ServletContextListener监听器,socket来实现tcp/ip协议客户端数据的接收功能。这是一个maven项目,直接导入eclipse即可运行,此处监听的是9092端口,将项目运行起后,可以对其端口使用情况进行查看,在...
Servlet监听器是实现了Java Servlet API中特定接口的类,例如`ServletContextListener`、`ServletRequestListener`和`HttpSessionListener`等。当Web应用启动、关闭,或者用户会话创建、销毁等事件发生时,监听器会...
在Java Servlet API中,监听器是通过实现Java的特定接口来创建的,例如`ServletContextListener`、`ServletRequestListener`和`HttpSessionListener`等。这些接口定义了各个生命周期事件的方法,如`context...
- **生命周期监听器**:主要包括`ServletRequestListener`、`HttpSessionListener`、`ServletContextListener`,用于监听`request`、`session`、`servletContext`这三个容器对象的创建与销毁。 - **属性监听器**:...
这些监听器通过实现特定的接口,如javax.servlet.ServletContextListener,来响应这些事件。 1. **监听器的作用** 监听器的主要作用在于提供预处理和后处理功能。它们可以在Web应用程序启动时执行初始化任务,例如...
- **工作原理**:监听器通过实现Servlet规范中的各种监听器接口,如`ServletContextListener`、`HttpSessionListener`、`ServletRequestListener`等,当触发相应事件时,容器会调用相应的监听器方法。 - **应用...
在Java Web开发中,过滤器(Filter)和监听器(Listener)是两个非常重要的组件,它们主要用于增强应用程序的功能和管理应用程序的状态。以下是关于这两个概念的详细说明。 **过滤器(Filter)** 过滤器是Servlet...
监听器是Servlet容器(如Tomcat)中的特殊Java类,它们实现了特定的监听器接口,并在特定事件发生时被调用。在Struts2中,这些监听器主要用于初始化框架、配置拦截器、管理Action实例等任务。 1. **...
### Java的监听器种类 Java中的监听器是一种特殊类型的对象,它们主要负责监听特定的事件并在这些事件发生时执行相应的动作。监听器广泛应用于多种场景,尤其是在Servlet容器中,监听器能够帮助开发者更加灵活地...
监听器.pdf 监听器是Java Web开发中的一种重要机制,用于监听和响应Web应用程序中的事件。下面是监听器的详细知识点: 概念:监听器是一个实现了特定接口的Java类,用于监听另一个Java类的方法调用或者属性改变。 ...
监听器通过实现不同的接口,如`ServletContextListener`, `HttpSessionListener`, `ServletRequestListener`等来响应这些事件。 **常见监听器类型**: 1. `ServletContextListener`: 监听应用的启动和关闭,常用于...
1. **实现监听器接口**:首先需要根据需求选择合适的监听器接口实现,例如`ServletContextListener`等。 2. **编写监听器类**:在该类中重写必要的方法,实现所需的业务逻辑。 3. **在`web.xml`中配置监听器**: - ...
监听器的实现通常需要实现特定接口,如HttpSessionListener、ServletContextListener等,并在web.xml中注册。 使用监听器可以实现以下功能: 1. **会话管理**:通过HttpSessionListener监控会话的创建、过期,可以...
- 编写监听器需要实现如ServletContextListener、HttpSessionListener或ServletRequestListener等接口,并覆盖对应的事件处理方法。 - 完成监听器类的编写后,需要在`web.xml`部署描述符文件中进行配置,声明监听...
在这个“Servlet监听器例子”中,我们将深入探讨如何使用`ServletContextListener`, `HttpSessionListener`, 和 `HttpSessionAttributeListener`来实现不同的功能。 首先,`ServletContextListener`接口用于监听...