`

程序实现启动和停止嵌入式Tomcat Web服务器

 
阅读更多

本文系本人原创性实验工作,如若转载,请尊重个人劳动,注明出处。

这阵子,由于实验的需要,需要通过程序启动和停止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();
 }
}






分享到:
评论

相关推荐

    绿色 移动 Java web 服务器 Tomcat

    用嵌入式tomcat改造的一个绿色免安装Javaweb服务器。 特性与嵌入式Tomcat相同。 配置好后直接运行使用,绿色免安。适合演示、调试。 内含配置方法。

    嵌入式系统中移植WEB server--BOA。带CGI编写样例

    相对PC或服务器上运行的Apache、IIS、tomcat等web server,嵌入式系统由于ram和flash空间的限制,只能运行一些对资源要求低的web server,譬如BOA和GOAHEAD。 这里以海思的Hi3516a/d芯片平台为例,对boa的移植做了...

    TongWeb嵌入式版本用户手册-7.0.E.5

    本文档是 TongWeb 嵌入式版产品的用户手册,详细介绍了嵌入式版的安装及配置,...TongWeb 嵌入式版 Web 容器需要结合 Spring Boot 框架应用,TongWeb 应用服务器运行 所需的 jar 资源包,您可以根据不同的场景进行引入

    springboot-angular-atmosphere-quickstart:使用嵌入式 Tomcat 8、websockets 和 Atmosphere 清理 Spring Boot 应用程序的设置,运行由 thymeleaf 在 maven 构建的自托管 .jar 文件中生成的角度前端

    使用嵌入式 Tomcat 8 清洁安装带有 websocket 和 Atmosphere 的 Spring Boot 应用程序,运行由 thymeleaf 在 maven 构建的自托管 .jar 文件中生成的角度前端。 带有 Spring Security 的 Spring Boot Tomcat8 气氛...

    todo-list:待办事项列表 Web 应用程序

    弹簧靴易于部署,带有所有依赖项的 jar 来启动服务器嵌入式tomcat 准备配置 https 通信用于根据应用程序配置(API 端点)提供动态资源AngularJS 动态视图,数据绑定模板嵌入式表单验证器路由(易于实现有关实际登录...

    一个部署在本地Tomcat服务器上的JavaWeb项目.zip

    一个部署在本地Tomcat服务器上的JavaWeb项目(Java+html5+css3+JavaScript+jQuery+Bootstrap+MySql) 软件开发设计:应用软件开发、系统软件开发、移动应用开发、网站开发C++、Java、python、web、C#等语言的项目...

    cxf-testsuite

    欢迎使用演示工具集,其中包含嵌入式tomcat应用程序和Web服务应用程序(SOAP,RESTful)。 应用范围: 嵌入式tomcat应用 jaxrs服务器 jaxrs客户端 jaxws服务器 jaxws客户端 汇编: 在根目录中运行: $ mvn clean ...

    java源码部署-Spoing:库和示例可简化从一个Java源代码库构建和部署跨平台(Windows,Linux,MacOS和Web)应用程序

    用于启动Web应用程序的嵌入式Tomcat服务器() Eclipse.org的SWT桌面UI库() Eclipse.org的RAP / RWT Web UI库() 图书馆抽象出SWT和RAP / RWT之间的差异() 样例应用程序代码 提供的库很容易分离,因此您可以为...

    大学生心理测试系统小程序lw.doc

    2.1 开发环境 ...Java可以编写桌面应用程序、Web应用程序、分布式系统、嵌入式系统应用程序等。 2.3 微信开发者工具 在传统web浏览器中,在加载htm15页面时先加载视图层的html和css,后加载逻辑层的java

    ssm小程序校内二手交易网站.docx

    2.1 开发环境 ...Java可以编写桌面应用程序、Web应用程序、分布式系统、嵌入式系统应用程序等。 2.3 微信开发者工具 在传统web浏览器中,在加载htm15页面时先加载视图层的html和css,后加载逻辑层的java

    Centos部署Yum、JDK、Nginx、Tomcat、MySQL、Emqx、FTP及配置(超详细)

    Nginx是一个高性能的开源Web服务器和反向代理服务器。 Tomcat是一个开源的Java Servlet容器,用于运行Java Web应用程序。 MySQL是一个关系型数据库管理系统,最流行的关系型数据库管理系统之一。 JDK是 Java 语言的...

    一个订餐系统 包括tomcat服务器+android客户端.zip

    硬件与设备:单片机、EDA、proteus、RTOS、包括计算机硬件、服务器、网络设备、存储设备、移动设备等 操作系统:LInux、IOS、树莓派、安卓开发、微机操作系统、网络操作系统、分布式操作系统等。此外,还有嵌入式...

    SpringBoot面试专题

    通过这种依赖关系,您可以节省任何更改,嵌入式 tomcat 将重新启动。Spring Boot 的 DevTools 模块可以帮助开发人员重新加载 Spring Boot 上的更改,而无需重新启动服务器。 Spring Boot 中的监视器是什么? ...

    person-api:简单的RESTful API,提供用于存储,更新,检索和删除Person实体的服务

    您还可以使用./mvnw package构建一个jar并在Java上运行它: java -jar target/person-api-0.0.1-SNAPSHOT.jar 该应用程序在嵌入式Tomcat Web服务器上运行,默认情况下,该服务器在8080端口上进行侦听。认证所有...

    基于Java小区疫情防控系统的设计与实现论文

    2.1 开发环境 ...Java可以编写桌面应用程序、Web应用程序、分布式系统、嵌入式系统应用程序等。 2.3 微信开发者工具 在传统web浏览器中,在加载htm15页面时先加载视图层的html和css,后加载逻辑层的java

    gama.cloud:Gama Cloud-在线建模和仿真平台

    此版本的Gama可以在具有嵌入式Tomcat服务器8.0.48的本地计算机上运行。 步骤1:下载在发布的zip文件 第2步:将其解压缩为4个文件gama.bat gama.sh GamaWeb.war tomcat_launcher.jar 步骤3:Windows用户双击gama....

    markwilliamson-webtest

    markwilliamson-webtest Mark Williamson Web测试提交 服务安装 先决条件 ... 默认情况下,嵌入式Tomcat实例配置为在localhost的端口8080上运行Web服务。 如果要更改端口,请在与MarkWilliamsonWe

    spring:Spring 项目的存储库

    为了使应用程序使用嵌入式 Tomcat(或 Jetty)自动启动,将 spring-boot-starter-web 添加到列表依赖项并使用“com.michir.projects.spring.starup.Application* 主类启动应用程序. 依赖管理 该项目基于 Maven (3.x...

    nginx源码分析-高性能服务器编写

    Apache作为经典的Web服务器,除了慢没有别的缺点了,Apache2对fcgi支持并不好,非常好用的proxy和proxy_ajp(很多人用它作为tomcat的前端),不支持epoll(这年头,epoll几乎是性能的必备)。Lighttpd作为杀手级的...

    Myna Application Server:JavaScript Web应用程序服务器-开源

    Myna是服务器端JavaScript Web应用程序服务器。 尽管应用程序是用JS编写的,但是该引擎是作为Java Servlet编写的,并且可以部署在任何Java Servlet容器中或在其自己的嵌入式Tomcat实例中进行部署

Global site tag (gtag.js) - Google Analytics