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

[经验分享] 程序实现启动和停止嵌入式Tomcat Web服务器

[复制链接]

尚未签到

发表于 2017-2-1 10:38:38 | 显示全部楼层 |阅读模式
  本文系本人原创性实验工作,如若转载,请尊重个人劳动,注明出处。

  这阵子,由于实验的需要,需要通过程序启动和停止Tomcat Web Server。很早以前就知道有Embedded tomcat。如果不使用嵌入式服务器,直接调用命令行
  startup.bat, shutdown.bat,将输入输出重定向,是比较容易的,但是这样的tomcat比较臃肿,也不好看。

网上也有一些实例,但只是告诉我们启动tomcat,却没有合适的停止tomcat的示例。

  于是就尝试写一个TomcatServer.java, 用于启动和停止嵌入式的tomcat server。
  原理很简单:
  一个启动线程,一个停止线程。停止线程不断监听$TOMCAT_HOME/tomcat.stop 标志文件,如果有这个文件,直接stop tomcat engine,然后删除这个文件。
  嵌入式tomcat作用还是蛮大的,你可以拿它做一个Web admin console工具,嵌入到你的任何系统当中。

  准备工作:
  1. 下载tomcat5.0.28embed.zip,能google到。总共也就4M的样子:
  http://archive.apache.org/dist/tomcat/tomcat-5/v5.0.28/bin/jakarta-tomcat-5.0.28-embed.zip
  2. 将它解压缩到d:\, 这样得到目录d:\jakarta-tomcat-5.0.28-embed
  3. 准备一个demo.war,将其解压到d:\jakarta-tomcat-5.0.28-embed\webapps\下边,确保有一个demo目录,用作webapp。因为下边的程序要用到。

  4. 在d:\jakarta-tomcat-5.0.28-embed下边编辑一个java源程序TomcatServer.java, 内容如下:
  这个程序使用很简单,TomcatServer.start()启动,TomcatServer.stop()停止。


import java.io.File;
import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import org.apache.catalina.Context;
import org.apache.catalina.Engine;
import org.apache.catalina.Host;
import org.apache.catalina.startup.Embedded;
/***
* A very simple embedded tomcat server, which launches a single webapp: demo.
* The flag file : tomcat.stop locates at $CATALINA_HOME/ is used to notify the
* control thread to stop tomcat engine or noe.
*/
public class TomcatServer
{
public static void stop()
{
final String path = System.getProperty("tomcat.home", "d:/jakarta-tomcat-5.0.28-embed");
try
{
new File(path).createNewFile();
}
catch (IOException ex)
{
throw new RuntimeException(ex);
}
}
public static void start()
{
// set the path for tomcat embed
final String path = System.getProperty("tomcat.home", "d:/jakarta-tomcat-5.0.28-embed");
final Embedded tc = createTomcat(path);
Thread startThread = new Thread()
{
public void run()
{
try
{
tc.start();
System.out.println("Tomcat Server 5.0.28 started .....");
}
catch (Exception e)
{
e.printStackTrace();
throw new RuntimeException(e);
}
}
};
startThread.start();
try
{
startThread.join();
}
catch (Exception ex)
{
ex.printStackTrace();
}
Thread controlThread = new Thread()
{
public void run()
{
for (;;)
{
try
{
Thread.sleep(2000);
File f = new File(path + "/tomcat.stop");
if (f.exists())
{
try
{
tc.stop();
System.out.println("Tomcat Server 5.0.28 stopped .....");
}
catch (Exception e)
{
e.printStackTrace();
throw new RuntimeException(e);
}
f.delete();
break;
}
}
catch (Exception ex)
{
ex.printStackTrace();
}
}
}
};
controlThread.start();
try
{
controlThread.join();
}
catch (Exception ex)
{
ex.printStackTrace();
}
}

private static Embedded createTomcat(String path)
{
// create Tomcat Server Instance
Embedded tomcat = new Embedded();
// set the tomcat home
tomcat.setCatalinaHome(path);
// create the Tomcat engine
Engine engine = tomcat.createEngine();
engine.setName("TomcatServer of ProxyTest");
// create the host
Host host = tomcat.createHost("localhost", tomcat.getCatalinaHome() + "/webapps");
// put the host into engine
engine.addChild(host);
engine.setDefaultHost(host.getName());
String contextPath = host.getAppBase() + "/demo";
if (!new File(contextPath).exists())
{
System.err.println("Please test if the contextPath exists");
return null;
}
System.out.println("contextPath: " + contextPath);
Context context = tomcat.createContext("/demo", contextPath);
host.addChild(context);
tomcat.addEngine(engine);
try
{
tomcat.addConnector(tomcat.createConnector(InetAddress.getByName("127.0.0.1"), 8080,
false));
}
catch (UnknownHostException e)
{
System.err
.println("can not bind tomcat Server to the localhost 127.0.0.1:8080;test the host is free");
e.printStackTrace();
tomcat = null;
throw new RuntimeException(e);
}
return tomcat;
}
public static void main(String[] args)
{
start();
}
}




  

运维网声明 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-336046-1-1.html 上篇帖子: Tomcat学习笔记 -【 虚拟主机与虚拟目录】 下篇帖子: Tomcat负载均衡和集群环境的搭建
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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