Tomcat启动时自动执行jar,或者main 怎么弄啊

时间:2022-04-08 13:16:34
我想让Tomcat启动的时候执行一个jar文件,这个一个小的独立的程序,

或者能执行main方法也行,也能达到效果

再或者用jsp页面执行一个jar文件也可以··不知道这样行不行··

高手指点一二··

18 个解决方案

#1


放到WEB。XML加载吧。。。应该和JBOSS一样的。。

#2


JSP调JAR这个说话太不专来了吧。。

#3


JSP调JAR这个说话太不专业来了吧。。

#4


改下[tomcat]/bin/startup.bat,在里面加两行代码就行了么!

#5


写个监听器就好了,容器启动的时候就执行

#6


同意4楼

#7


startup.bat文件中启动或者写个servlet类,然后load-on-startup配置一下在类里用利用runtime启动

或者你在自己写一个bat文件,启动tomcat和jar。

#8


引用 7 楼 kokobox 的回复:
startup.bat文件中启动或者写个servlet类,然后load-on-startup配置一下在类里用利用runtime启动

或者你在自己写一个bat文件,启动tomcat和jar。


都行

#9


跟着项目启动不行吗?

比如在servlet启动的时候定义一个init-param
类似:
<init-param>
  <param-name>otherApp</...>
  <param-value>package.a.b.c.OtherApp</...>
</...>

然后在servlet的init方法里
用函数(好像叫getInitParameter,lz自己google一下吧)
把“package.a.b.c.OtherApp”读出来,
然后用Class.forName(),newInstance之类的方法来实例化一个类,
然后就想干什么干什么了。

good luck

#10


引用 4 楼 bayougeng 的回复:
改下[tomcat]/bin/startup.bat,在里面加两行代码就行了么!


这个还靠谱一些···


用servlet我也会··
但是现在没法用···

#11


恩,用监听器。我用的就是这个。

#12


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

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class SerialPortListener implements ServletContextListener {

private Log log = LogFactory.getLog(SerialPortListener.class);

public void contextInitialized(ServletContextEvent arg0) {

if (ResetDatabase.checkDBExist()){
int eqListSize =  CommonDataUnit.getEquiList().size();
if (eqListSize > 0){
// 波特率
int baudRateNo = Integer.parseInt(CommonDataUnit.getSysArgsByKey(BeanForSysArgs.BAUDRATE_NUMBER));
// 刷新时间( 单位为秒)
int flashTime = Integer.parseInt(CommonDataUnit.getSysArgsByKey(BeanForSysArgs.DATA_FLASHTIME));
// 3: 测试串口是否可用
Level_First_Serial first_Level = Level_First_Serial.getInstance();
if (first_Level.initForTempHumi(baudRateNo, flashTime) == 1){
log.info("程序启动串口正常...");
first_Level.beginTask(); // 开始运行串口
}else{
log.info("程序无法启动串口.原因:无法连接串口...");
}
}else{

log.info("程序无法启动串口.原因:没有发现仪器列表...");
}
}
}

public void contextDestroyed(ServletContextEvent arg0) {
if (ResetDatabase.checkDBExist()){
Level_First_Serial.getInstance().endTask();
Level_First_Serial.getInstance().clearBarData();
log.info("程序已经关闭串口连接...");
}
}


}

#13


web.xml中加入
 <listener>
  <listener-class>com.htc.listener.SerialPortListener</listener-class>
 </listener>

#14


引用 4 楼 bayougeng 的回复:
改下[tomcat]/bin/startup.bat,在里面加两行代码就行了么!

嗯,这样可以。
或者自己写个servlet,配置到web.xml里面让启动时执行,servlet去调用那个main

#15


你要在服务端的 tomcat 启动执行一个独立的应用程序干嘛?有啥意义所在么?

#16


同意4楼

#17


引用 13 楼 yangzl0123 的回复:
web.xml中加入
<listener>
  <listener-class>com.htc.listener.SerialPortListener </listener-class>
</listener>


我也用过这样的方法

#18


引用 9 楼 villagehead 的回复:
跟着项目启动不行吗?

比如在servlet启动的时候定义一个init-param
类似:
<init-param>
  <param-name>otherApp </...>
  <param-value>package.a.b.c.OtherApp </...>
</...>

然后在servlet的init方法里
用函数(好像叫getInitParameter,lz自己google一下吧)
把“package.a.b.c.OtherApp”读出来,
然后用Class.forName(),newInstance之类的方法来实例化一个类,
然后就想干什么干什么了。

good luck



解决方案
第一:把jar打包成像hibernate一样的可以使用的包
第二:在项目引用它创建jar的对象,使用其里面的方法,写在servlet里的init()
第三:写web。xml的配置文件,使servlet跟着Tomcat一起启动。


注意打包时不可以用fatjar打包。
我使用的NetBeans打的。
大家可以试试,有兴趣的话·

#1


放到WEB。XML加载吧。。。应该和JBOSS一样的。。

#2


JSP调JAR这个说话太不专来了吧。。

#3


JSP调JAR这个说话太不专业来了吧。。

#4


改下[tomcat]/bin/startup.bat,在里面加两行代码就行了么!

#5


写个监听器就好了,容器启动的时候就执行

#6


同意4楼

#7


startup.bat文件中启动或者写个servlet类,然后load-on-startup配置一下在类里用利用runtime启动

或者你在自己写一个bat文件,启动tomcat和jar。

#8


引用 7 楼 kokobox 的回复:
startup.bat文件中启动或者写个servlet类,然后load-on-startup配置一下在类里用利用runtime启动

或者你在自己写一个bat文件,启动tomcat和jar。


都行

#9


跟着项目启动不行吗?

比如在servlet启动的时候定义一个init-param
类似:
<init-param>
  <param-name>otherApp</...>
  <param-value>package.a.b.c.OtherApp</...>
</...>

然后在servlet的init方法里
用函数(好像叫getInitParameter,lz自己google一下吧)
把“package.a.b.c.OtherApp”读出来,
然后用Class.forName(),newInstance之类的方法来实例化一个类,
然后就想干什么干什么了。

good luck

#10


引用 4 楼 bayougeng 的回复:
改下[tomcat]/bin/startup.bat,在里面加两行代码就行了么!


这个还靠谱一些···


用servlet我也会··
但是现在没法用···

#11


恩,用监听器。我用的就是这个。

#12


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

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class SerialPortListener implements ServletContextListener {

private Log log = LogFactory.getLog(SerialPortListener.class);

public void contextInitialized(ServletContextEvent arg0) {

if (ResetDatabase.checkDBExist()){
int eqListSize =  CommonDataUnit.getEquiList().size();
if (eqListSize > 0){
// 波特率
int baudRateNo = Integer.parseInt(CommonDataUnit.getSysArgsByKey(BeanForSysArgs.BAUDRATE_NUMBER));
// 刷新时间( 单位为秒)
int flashTime = Integer.parseInt(CommonDataUnit.getSysArgsByKey(BeanForSysArgs.DATA_FLASHTIME));
// 3: 测试串口是否可用
Level_First_Serial first_Level = Level_First_Serial.getInstance();
if (first_Level.initForTempHumi(baudRateNo, flashTime) == 1){
log.info("程序启动串口正常...");
first_Level.beginTask(); // 开始运行串口
}else{
log.info("程序无法启动串口.原因:无法连接串口...");
}
}else{

log.info("程序无法启动串口.原因:没有发现仪器列表...");
}
}
}

public void contextDestroyed(ServletContextEvent arg0) {
if (ResetDatabase.checkDBExist()){
Level_First_Serial.getInstance().endTask();
Level_First_Serial.getInstance().clearBarData();
log.info("程序已经关闭串口连接...");
}
}


}

#13


web.xml中加入
 <listener>
  <listener-class>com.htc.listener.SerialPortListener</listener-class>
 </listener>

#14


引用 4 楼 bayougeng 的回复:
改下[tomcat]/bin/startup.bat,在里面加两行代码就行了么!

嗯,这样可以。
或者自己写个servlet,配置到web.xml里面让启动时执行,servlet去调用那个main

#15


你要在服务端的 tomcat 启动执行一个独立的应用程序干嘛?有啥意义所在么?

#16


同意4楼

#17


引用 13 楼 yangzl0123 的回复:
web.xml中加入
<listener>
  <listener-class>com.htc.listener.SerialPortListener </listener-class>
</listener>


我也用过这样的方法

#18


引用 9 楼 villagehead 的回复:
跟着项目启动不行吗?

比如在servlet启动的时候定义一个init-param
类似:
<init-param>
  <param-name>otherApp </...>
  <param-value>package.a.b.c.OtherApp </...>
</...>

然后在servlet的init方法里
用函数(好像叫getInitParameter,lz自己google一下吧)
把“package.a.b.c.OtherApp”读出来,
然后用Class.forName(),newInstance之类的方法来实例化一个类,
然后就想干什么干什么了。

good luck



解决方案
第一:把jar打包成像hibernate一样的可以使用的包
第二:在项目引用它创建jar的对象,使用其里面的方法,写在servlet里的init()
第三:写web。xml的配置文件,使servlet跟着Tomcat一起启动。


注意打包时不可以用fatjar打包。
我使用的NetBeans打的。
大家可以试试,有兴趣的话·