程序实现启动和停止嵌入式Tomcat Web服务器
2012-04-20 10:30
686 查看
本文系本人原创性实验工作,如若转载,请尊重个人劳动,注明出处。
这阵子,由于实验的需要,需要通过程序启动和停止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()停止。
这阵子,由于实验的需要,需要通过程序启动和停止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(); } }
相关文章推荐
- 部署MyEclipse工具中的Web程序到TomCat服务器并启动Web程序
- Linux下安装MyEclipse和Tomcat服务器详解,以及我安装过程中所出现的问题以及解决办法,并实现一个web小程序
- IIS网站已经停止,提示服务器没有及时响应启动或控制请求!本地计算机法启动 World Wide Web Publishing 服务。提示 “错误127: 找不到指定的程序”或者“错误1721,资源不足,无法启动”
- 启动Linux 的时候实现oracle数据库与Tomcat web服务器与操作系统一同关闭与启动
- IIS网站已经停止,提示服务器没有及时响应启动或控制请求!本地计算机法启动 World Wide Web Publishing 服务。提示 “错误127: 找不到指定的程序”或者“错误1721,资源不足,无法启动
- eclipse 开发web程序,启动tomcat插件服务器的时候。部署目录在那里?
- 使用嵌入式tomcat启动web项目
- Tomcat结合Apache、Nginx实现高性能的web服务器
- Mac上关于tomcat服务器的安装、配置、启动、部署web详细流程
- Cacti监控一台Web服务器上多个Tomcat端口的实现
- Python实现的检测web服务器健康状况的小程序
- 三、Nginx+Tomcat实现Web服务器的负载均衡
- 【Linux运维-集群技术进阶】Nginx+Tomcat实现Web服务器的负载均衡
- [JSP] 设置Tomcat服务器自动加载web程序
- 跟我一起动手实现Tomcat(一):实现静态Web服务器
- 嵌入式web服务器的实现
- goAhead上实现文件上传到嵌入式web服务器上
- SSM项目连接远程Linux服务器的mysql 启动tomcat卡在了 Initializing Spring root WebApplicationContext
- java实现简单的 自定义web容器 tomcatweb服务器
- 一个嵌入式web服务器项目,实现通过手机Android App实现对嵌入式设备的控制