有时候,你想让一个ROBOT运行在TOMCAT中,并随TOMCAT启动而启动,怎么办?以下是解决办法:
一、理论
在类中,可以定义static代码,当类被首次加载时,自动执行其中的代码。例如:
- public class Test{
-
static{
-
- }
-
public Test(){
- }
- ...
-
- }
public class Test{
static{
//类被加载时执行的代码
}
public Test(){
}
...
//其他方法
}
在java中,当使用到一个类的时候,该类才会被加载到内存中。因此,如果上面的类Test没有被调用,那么其static部分的代码也不会被执行。
为了让程序代码在tomcat启动时自动运行,需要写一个servlet,在tomcat的web.xml中配置后,可以随tomcat启动而自动运行。在WEB-INFO/web.xml中,配置如下:
- <?xml version="1.0" encoding="GB2312"?>
- <web-app>
- <servlet>
- <servlet-name>InitServlet</servlet-name>
-
<servlet-class>InitServlet</servlet-class>
-
<load-on-startup>25</load-on-startup>
- </servlet>
- <welcome-file-list>
- <welcome-file>login.jsp</welcome-file>
- </welcome-file-list>
- </web-app>
<?xml version="1.0" encoding="GB2312"?>
<web-app>
<servlet>
<servlet-name>InitServlet</servlet-name>
<servlet-class>InitServlet</servlet-class>
<load-on-startup>25</load-on-startup>
</servlet>
<welcome-file-list>
<welcome-file>login.jsp</welcome-file>
</welcome-file-list>
</web-app>
关键是<servlet>与</servlet>之间的参数:<load-on-startup>。加了这个参数后,tomcat启动时,会自动加载类com.ee2ee.servlet.TestAutoRun。在servlet类的init方法中放置需要自动执行的代码即可。
以下是一个样本servlet:
- import javax.servlet.*;
-
import javax.servlet.http.*;
-
import java.io.*;
-
import java.util.*;
-
-
public class InitServlet extends HttpServlet{
-
-
-
-
-
public void init() throws ServletException {
-
-
Thread t=new Thread(){
-
public void run(){
-
try{
-
while(true){
-
System.out.println("init begin");
- System.out.flush();
-
sleep(10000);
- }
-
}catch(Exception ex){}
- }
- };
- t.start();
- }
-
-
-
-
-
-
protected void service(HttpServletRequest arg0, HttpServletResponse arg1)
-
throws ServletException, IOException {
-
-
- }
- }
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
public class InitServlet extends HttpServlet{
/* (non-Javadoc)
* @see javax.servlet.GenericServlet#init()
*/
public void init() throws ServletException {
// TODO Auto-generated method stub
Thread t=new Thread(){
public void run(){
try{
while(true){
System.out.println("init begin");
System.out.flush();
sleep(10000);
}
}catch(Exception ex){}
}
};
t.start();
}
/* (non-Javadoc)
* @see javax.servlet.http.HttpServlet#service(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
protected void service(HttpServletRequest arg0, HttpServletResponse arg1)
throws ServletException, IOException {
// TODO Auto-generated method stub
//System.out.println(" init server begin");
}
}
使用命令提示符下的STARTUP启动TOMCAT,就会显示控制台,在控制台上正确地输出了结果,每隔10秒钟系统自动输出:“init begin”。
二、实践
以下是项目中的ROBOT
- package ql.sbs.tools;
-
-
import quanwen.*;
-
import ql.sbs.bus.*;
-
-
import javax.servlet.*;
-
import javax.servlet.http.*;
-
import java.util.*;
-
import java.io.*;
-
import sun.io.*;
-
import java.sql.*;
-
-
-
-
-
-
-
public class AutoDBServlet extends HttpServlet{
-
-
public LocalLang ll;
-
-
-
-
public void init() throws ServletException {
-
-
try{
-
-
File d=new File("c:/aa");
-
if(!d.exists()){
- d.mkdir();
- }
-
File d1=new File("c:/aa/ini");
-
if(!d1.exists()){
- d1.mkdir();
- }
-
-
String name="/Lang_chi.txt";
-
copyToDisk(name,"c:/aa/ini");
-
name="/Lang_eng.txt";
-
copyToDisk(name,"c:/aa/ini");
-
name="/SBS.ini";
-
copyToDisk(name,"c:/aa/ini");
-
-
-
INIOperate ini=new INIOperate(new File("c:/aa/ini/SBS.ini"),20," ;");
-
String language="c:/aa/ini/"+"Lang_"+ini.getItem("语言/language")+".txt";
-
ll=new LocalLang(language);
-
}catch(Exception ex){
- System.out.println(ex.toString());
- }
-
-
Thread t=new Thread(){
-
BusObject bo=new BusObject();
-
FDBPublic pub=new FDBPublic();
-
String path="c:\\aa\\tmp\\";
-
String strTXTFile="";
-
String strINIFile="";
-
long currentID=0;
-
String sql="";
-
long currentID1=0;
-
public void run(){
-
try{
-
while(true){
-
-
-
sleep(10000);
-
sql="select ID,userID,number,inDay "+
-
"from SBSReceiveFile "+
-
"where endFlag='T'";
-
String usID="";
-
int number=0;
-
String inDay="";
-
MDBClass mdb=new MDBClass();
- mdb.connect();
- ResultSet rs=mdb.executeQuery(sql);
-
if(rs.next()){
-
currentID1=rs.getLong("ID");
-
usID=rs.getString("userID");
-
number=rs.getInt("number");
-
inDay=rs.getString("inDay");
- rs.close();
- mdb.closeAll();
- toDB(usID,number,inDay);
-
}else{
- rs.close();
- mdb.closeAll();
- }
- }
-
}catch(Exception ex){}
- }
-
-
public void toDB(String usID,int number,String daytime){
-
-
-
-
- toArticle(usID,number,daytime);
-
- toPicNews(usID,number,daytime);
-
- toContent(usID,number,daytime);
-
- toPicture(usID,number,daytime);
-
- toPaste(usID,number,daytime);
-
- deleteTXTINIFile(usID,number,daytime);
-
- deleteCurrent();
- }
- ………..
-
-
-
-
protected void service(HttpServletRequest arg0, HttpServletResponse arg1)
-
throws ServletException, IOException {
-
-
- }
- }
package ql.sbs.tools;
import quanwen.*;
import ql.sbs.bus.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
import java.io.*;
import sun.io.*;
import java.sql.*;
/**
* 自动入库工具
* 2005.6.25
* qixiaorui
*/
public class AutoDBServlet extends HttpServlet{
public LocalLang ll;
/* (non-Javadoc)
* @see javax.servlet.GenericServlet#init()
*/
public void init() throws ServletException {
// TODO Auto-generated method stub
try{
//在服务器端建立目录结构
File d=new File("c:/aa");
if(!d.exists()){
d.mkdir();
}
File d1=new File("c:/aa/ini");
if(!d1.exists()){
d1.mkdir();
}
//将JAR中的三个文件拷贝到目录中c aa ini
String name="/Lang_chi.txt";
copyToDisk(name,"c:/aa/ini");
name="/Lang_eng.txt";
copyToDisk(name,"c:/aa/ini");
name="/SBS.ini";
copyToDisk(name,"c:/aa/ini");
//获取语言文件
INIOperate ini=new INIOperate(new File("c:/aa/ini/SBS.ini"),20," ;");
String language="c:/aa/ini/"+"Lang_"+ini.getItem("语言/language")+".txt";
ll=new LocalLang(language);
}catch(Exception ex){
System.out.println(ex.toString());
}
Thread t=new Thread(){
BusObject bo=new BusObject();
FDBPublic pub=new FDBPublic();
String path="c:\\aa\\tmp\\";
String strTXTFile="";
String strINIFile="";
long currentID=0; //记录当前编号
String sql="";
long currentID1=0; //处理的记录在临时表中的编号
public void run(){
try{
while(true){
//这个休眠时间需要通过实践根据实际的处理情况进行修改,但最少要保证在
//这个时间内能处理完一条记录。
sleep(10000);
sql="select ID,userID,number,inDay "+
"from SBSReceiveFile "+
"where endFlag='T'";
String usID="";
int number=0;
String inDay="";
MDBClass mdb=new MDBClass();
mdb.connect();
ResultSet rs=mdb.executeQuery(sql);
if(rs.next()){
currentID1=rs.getLong("ID");
usID=rs.getString("userID");
number=rs.getInt("number");
inDay=rs.getString("inDay");
rs.close();
mdb.closeAll();
toDB(usID,number,inDay);
}else{
rs.close();
mdb.closeAll();
}
}
}catch(Exception ex){}
}
//插入一条记录,记录可以用用户编号+顺号+日期来唯一的区别。
public void toDB(String usID,int number,String daytime){
//注意,不要随便移动语句的处理顺序,因为许多公用变量在第一个函数里被
//赋值,其他紧随的函数使用了这些变量!!
//将记录插入SBSArticle OK!
toArticle(usID,number,daytime);
//如果有主记录,插入到SBSPicNews表
toPicNews(usID,number,daytime);
//处理全文内容
toContent(usID,number,daytime);
//处理图片内容
toPicture(usID,number,daytime);
//处理附件内容
toPaste(usID,number,daytime);
//把相应的文本文件和配置文件删除
deleteTXTINIFile(usID,number,daytime);
//删除掉SBSReceiveFile中相关项目 OK!
deleteCurrent();
}
………..
/* (non-Javadoc)
* @see javax.servlet.http.HttpServlet#service(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
protected void service(HttpServletRequest arg0, HttpServletResponse arg1)
throws ServletException, IOException {
// TODO Auto-generated method stub
//System.out.println(" init server begin");
}
}
- 大小: 163.9 KB
分享到:
相关推荐
介绍了让tomcat自动加载的 代码及文件
在Tomcat中,类加载机制的设计是为了支持多个Web应用程序的隔离运行。每个Web应用都有自己的类加载器,这样可以确保一个应用的类不会意外地与另一个应用的类混淆。默认的类加载器结构包括以下层次: 1. Bootstrap ...
因此,让Tomcat自动加载修改过的类和Servlet成为提高开发效率的关键需求之一。 ### 让Tomcat自动加载修改过的类和Servlet #### 知识点一:理解Tomcat的热部署机制 Tomcat默认情况下并不会自动检测到类或Servlet的...
在网上找了好多关于Nsis打包JavaWeb和tomcat的方法,都没有能让tomcat服务自动重启的,便自己研究编写了一个方法。供大家参考! 1、实现程序一键安装 2、卸载 3、安装时验证密码 4、应用系统快捷方式启动、注册...
Tomcat自动加载是关键,因为我们需要确保Quartz能在Tomcat服务器启动时正确初始化,并且在运行过程中能够响应XML配置文件的变更。在Tomcat中,我们可以使用ContextListener来监听应用的上下文初始化和销毁事件。在上...
动态加载是指在程序运行过程中,根据需要加载相应的类或模块,而不是在程序启动时一次性加载所有内容。在Web开发中,动态加载通常指的是服务器能够自动检测到应用的改动,并实时更新,而无需停止服务。 1. **...
本文将详细介绍如何在Eclipse中配置并使用Tomcat服务器来加载和运行Web项目。 #### 一、配置Tomcat服务器 **1. 添加Tomcat服务器** 在Eclipse中配置Tomcat服务器前,首先需要确保已经正确安装了Java Development...
本文将详细介绍如何在Tomcat6中配置连接池,并实现数据库连接的自动重连功能。 #### 二、Tomcat6连接池配置 **1. 修改`conf/server.xml`文件** 在Tomcat6中配置连接池的第一步是修改`conf/server.xml`文件,增加...
6. **启动服务**:重新启动Tomcat服务,加载新的应用版本。 7. **验证部署**:最后,检查新版本是否成功启动,没有错误或异常,确保所有功能正常工作。 "Tomcat web deploy"可能是指用于此目的的一个特定脚本或...
ssh Tomcat自动部署无需手动重启服务器设置 本文主要介绍了使用ssh实现Tomcat自动部署的方法,以及解决OutOfMemoryError PermGen space系统错误的方法。 一、配置Tomcat server.xml文件 在Tomcat的conf文件夹下...
标题中的“tomcat项目没部署webapps下,如何找”是指在Apache Tomcat服务器中,一个Web应用程序没有按照常规方式部署到`webapps`目录下,用户可能在寻找如何定位和运行这种非标准部署的应用。这通常涉及到对Tomcat...
这会告诉Tomcat在启动时加载指定路径的Web应用,并且设置`reloadable`属性为`true`可以使得Tomcat在源代码更改后自动重新加载应用。 以上三种方法各有优缺点。手动部署简单易行,但不适合频繁的更新;管理工具提供...
"Tomcat自动清理缓存版.rar"这个压缩包文件显然是针对Tomcat服务器的缓存清理功能进行了定制或配置,旨在帮助用户实现自动化的缓存清理,从而保持系统高效、稳定运行。 首先,我们需要了解Tomcat中的缓存机制。...
在Web服务启动时自动加载Servlet是一种常见的优化策略,目的是在应用程序启动时就准备好Servlet实例,以便快速响应用户请求。本例中,我们将讨论如何配置Web服务以在启动时加载Servlet,并利用Spring框架来读取和...
在Java Web开发中,Tomcat是一个广泛使用的应用服务器,用于部署和运行Servlet和JSP应用程序。然而,每次修改代码后,都需要重新启动Tomcat来使更改生效,这无疑降低了开发效率。为了解决这个问题,引入了热加载技术...
标题 "清空Tomcat中的work目录并重启Tomcat.bat" 暗示这是一个批处理脚本,用于自动化清理Apache Tomcat服务器的`work`目录,然后重启服务。这个过程对于Java开发人员来说非常有用,因为它可以帮助他们清理临时编译...
本项目“自动化部署项目_Tomcat”专注于使用Shell脚本来实现Tomcat服务器的自动部署流程,这对于我们理解和掌握现代Web应用程序的发布与管理至关重要。 Tomcat是一款广泛应用的开源Java Servlet容器,它能够解析并...