设为首页 收藏本站
查看: 391|回复: 0

[经验分享] tomcat定时任务

[复制链接]

尚未签到

发表于 2017-1-19 10:42:47 | 显示全部楼层 |阅读模式
1 tomcat启动后自动加载一个用户的类
  有时候在开发Web应用的时候,需要tomcat启动后自动加载一个用户的类,执行一些初始化方法,如从数据库中加载业务字典到内存中,因此需要在tomcat启动时就自动加载一个类,或运行一个类的方法。 可以采用在WEB-INF/web.xml中添加一个监听程序(ServletContextListener配置项),步骤如下:
1) 增加一个监听程序 MyServletContextListener.java,实现javax.servlet.ServletContextListener接口
package test.startup;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class MyServletContextListener implements ServletContextListener
{

  public void contextDestroyed(ServletContextEvent arg0)
  {

  }

  public void contextInitialized(ServletContextEvent arg0)
  {
   System.out.println("加载业务字典");
   try
   {
    com.eos.common.dict.DictMap.loadData();
   }
   catch(Exception e)
   {
    System.out.println("加载业务字典失败!");
    e.printStackTrace();
   }
  }
}

2) 配置监听器web.xml:

<listener>
  <listener-class>test.startup.MyServletContextListener</listener-class>
</listener>

servlet 规范中为每种事件监听器都定义了相应的接口,在编写事件监听器程序时只需实现这些接口就可以了。一些Servlet事件监听器需要在web应用程序的部署 文件描述符文件(web.xml)中进行注册(注册之后才能发布),一个web.xml可以注册多个servlet事件监听器。web服务器按照它们在web.xml中注册顺序来加载和注册这些servlet事件监听器。servlet事件监听器的注册和调用过程都是由web容器自动完成的,当发生被监听对象被创建,修改,销毁等事件时,web容器将调用与之相关的servlet事件监听器对象的相应方法(所监听到的对象如果在创建、修改、销毁事件触发的时候就会调用这些监听器这就相当于面向事件编程的概念),用户在这些方法中编写的事件处理代码(相当于JS中的事件响应)即被执行。由于在一个web应用程序中只会为每个事件监听器类创建一个实例对象,有可能出现多个线程同时调用一个事件监听对象的情况,所以要注意多线程安全问题。

注意:应用事件监听器程序是建立或修改servlet环境或会话对象时通知的类。它们是servlet规范的版本2.3中的新内容。注册一个监听程序涉及在 web.xml的web-app元素内放置一个listener元素。虽然listener元素的结构很简单,但请不要忘记,必须正确地给出web- app元素内的子元素的次序。listener元素位于所有的servlet 元素之前以及所有filter-mapping元素之后。此外,因为应用生存期监听程序是serlvet规范的2.3版本中的新内容,所以必须使用 web.xml DTD的2.3或以后版本,而不是2.2版本,如下:
<web-app id="WebApp_ID" version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

<filter-mapping>
<filter-name>LoginFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<servlet>
<servlet-name>xsupload</servlet-name>
<servlet-class>com.kge.prj.ams.lineloss.xsmanual.action.XSMeterFileUploadController
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>xsupload</servlet-name>
<url-pattern>/xsfileupload</url-pattern>
</servlet-mapping>

</web-app>


-------------------------------
二、监听器类型
按监听的对象划分:servlet2.4规范定义的事件有三种:
1.用于监听应用程序环境对象(ServletContext)的事件监听器
2.用于监听用户会话对象(HttpSession)的事件监听器
3.用于监听请求消息对象(ServletRequest)的事件监听器

按监听的事件类项划分
1.用于监听域对象自身的创建和销毁的事件监听器
2.用于监听域对象中的属性的增加和删除的事件监听器
3.用于监听绑定到HttpSession域中的某个对象的状态的事件监听器

在一个web应用程序的整个运行周期内,web容器会创建和销毁三个重要的对象,ServletContext,HttpSession,ServletRequest。

PS:其中Context 为JSP页面包装页面的上下文.由容器创建和初始化,管理对属于JSP中特殊可见部分中已命名对象的访问. 该接口用来定义了一个Servlet的环境对象。也可认为这是多个客户端共享的信息,它与session的区别在于应用范围的不同,session只对应于一个用户。
servlet2.4中定义了三个接口:
ServletContextListener,HttpSessionListener,ServletRequestListener。分别实现对应的接口就可以实现对应的监听处理
在ServletContextListener接口中定义了两个事件处理方法,分别是

contextInitialized()和contextDestroyed()
public void contextInitialized(ServletcontextEvent sce)
这个方法接受一个ServletContextEvent类型参数,在contextInitialized可以通过这个参数获得当前被创建的ServletContext对象。
public void contextDestroyed(ServletContextEvent sce)
2.在HttpSessionListneter接口中共定义了两个事件处理方法,分别是sessionCreated()和sessionDestroyed()
public void sessionCreated(HttpSessionEvent se)
这个方法接受一个(HttpSessionEvent 类型参数,在sessionCreated可以通过这个参数获得当前被创建的HttpSession对象。
public void sessionDestroyed(HttpSessionEvent se)
3.在ServletRequestListener接口中定义了两个事件处理方法,分别是requestInitialized()和requestDestroyed()
public void requestInitialized(ServletRequestEvent sre)
这个方法接受一个(ServletRequestEvent 类型参数,在requestInitialized可以通过这个参数获得当前被创建的ServletRequest对象。
public void requestDestroyed(ServletRequestEvent sre)
可 以看出三个监听器接口中定义的方法非常相似,执行原理与应用方式也相似,在web应用程序中可以注册一个或者多个实现了某一接口的事件监听器,web容器 在创建或销毁某一对象(如ServletContext,HttpSession)时就会产生相应的事件对象
(如ServletcontextEvent ,或者HttpSessionEvent),接着依次调用每个事件监听器中的相应处理方法,并将产生的事件对象传递给这些方法。
三、分类及介绍
1. ServletContextListener:用于监听WEB 应用启动和销毁的事件,监听器类需要实现javax.servlet.ServletContextListener 接口。
2. ServletContextAttributeListener:用于监听WEB应用属性改变的事件,包括:增加属性、删除属性、修改属性,监听器类需要实现javax.servlet.ServletContextAttributeListener接口。
3. HttpSessionListener:用于监听Session对象的创建和销毁,监听器类需要实现javax.servlet.http.HttpSessionListener接口或者javax.servlet.http.HttpSessionActivationListener接口,或者两个都实现。
4. HttpSessionActivationListener:用于监听Session对象的钝化/活化事件,监听器类需要实现javax.servlet.http.HttpSessionListener接口或者javax.servlet.http.HttpSessionActivationListener接口,或者两个都实现。
5. HttpSessionAttributeListener:用于监听Session对象属性的改变事件,监听器类需要实现javax.servlet.http.HttpSessionAttributeListener接口。
四、部署
监听器的部署在web.xml文件中配置,在配置文件中,它的位置应该在过滤器的后面Servle的前面
五、示例
第一步:编写监听器类
[html] view plaincopyprint?
package cn.listen;  
  
import javax.servlet.ServletContextEvent;  
  
import javax.servlet.ServletContextListener;  
  
  
public class MyListener implements ServletContextListener {  
  
    public void contextDestroyed(ServletContextEvent sce) {  
  
           System.out.println("die");  
  
    }  
  
    public void contextInitialized(ServletContextEvent sce) {  
  
           System.out.println("init");   
  
    }  
  
}   

第二步:布置安装
<listener>
  <listener-class>cn.listen.MyListener</listener-class>
</listener>
运行服务器会出现
[20:42:38.406] {main} WebApp[http://default] active
init
[20:42:38.437] {main} WebApp[http://default/MyProj] active
监听到了应用启动。

DSC0000.png

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-330652-1-1.html 上篇帖子: TOMCAT自动关闭, 下篇帖子: tomcat 证书配置
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表