Tomcat 启动时加载WEB应用中的后台程序

Tomcat 启动时加载WEB应用中的后台程序

    今天在做项目的时候遇到一个问题。 Tomcat 如何在启动时就能运行那些我web应用中后台的处理线程呢?比如说,定时器,或者是一些具有自动检测功能的代码程序,等等。带着这个问题,我百度了许多解决方法,都没有一个完整的解答方法。后来自己试着用自己的思路去实现这个功能,最后结果还算满意,问题解决。下面我把解决的思路写出来与大家一起分享。
   先要找准程序起步的切入点在哪。在 Java Web 开发中,Web 应用程序本身没有主动权,他依附于它运行的环境,也称容器,WEB 服务器。应用程序本身只有在用户请求到该应用时,才会运行。Servlet Jsp 都是最典型的例子,既然明白这个前提后,就从Servlet Jsp 的运行方式和生存周期上做文章,这也是解决该问题的切入点。有经验的 Java Web 程序员都知道,Servlet 只有在第一次请求时才会被编译,接着才会加载到内存当中执行。如果说我把自己的后台程序写在Servlet 里面的话,好象方向是对了。但接下来的问题是,Servlet只有在第一次请求以后才会编译运行。如果我的后台程序在服务器启动以后,应用被调用以前要开始工作那么用Servlet好象也无济于世,这问题到底该如何解决呢?如果精通 Java Web 的程序员都知道,在 web.xml 这个配置文件关于Servlet配置项中 有这么一项配置 <load-on-startup></load-on-startup> 。这项配置告诉服务器在服务器启动时按优先级加载配置的Servlet。那么,随服务器启动时加载 Servlet 这个问题也随之解决。接下来问题又来了,Servlet 是己经在服务器启动时被加载到内存了,但要运行还得等待客户端的请求到来才行啦,那又该如何呢?要解决这个问题,要首先对 Java 类加载机制有所了解。 关键点在于 static{ } 代码块。Java Jvm 对类进行初始化并加载到内存的过程中,首先 jvm 定位到相应包中的类模块。紧接着,就是先于构造方法之前执行 该类的 static{ } 代码块。接着才调用构造方法对类的对象初始化。知道这些前提以后,问题就迎刃而解了。Servlet 本身就是一个类,当这个类在服务器启动时会被直接实例化到内存中,那么在初始化的过程中,static { }代码块的执行优先级是最高的,不言而遇最终处理后台程序的地方应该在该Servlet的static代码块中。那么到此,问题的全部解决方法都己浮出了水面。
   回顾一下问题从产生到解决的全过程:
   1.产生了一个有关随服务器一起启动后台程序的问题。
   2.了解web 应用运行的基本原理,分析 <load-on-startup></load-on-startup> 对 Servlet 生命周期  产生的重大意义。
   3.了解java 类加载机制中 static 代码块的基本原理,分析 static 块在类初始过程当中的重要地位。
   4.总体思路是:该问题主要的解决方案是利用Servlet技术来解决。因为应用对相应的Servlet做了启动优先级的配置,那么服务器在启动时,会按照配置文件中对该Servlet的相关配置进行编译加载Servlet。在加载的同时 Jvm 会先执行 Servlet 当中的 static 代码块。那么这个代码块就是自己后台程序的入口点。类侯于普通 java 程序的 main 函数。
在手机短信平台时用这个方法初始化串口问题解决~
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值