`

程序实现启动和停止嵌入式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();
 }
}






分享到:
评论

相关推荐

    嵌入式tomcat虚拟目录服务器应用程序源代码

    在这个源代码中,开发者已经实现了将Tomcat的关键组件封装起来,使其可以随应用程序一起启动和关闭。 虚拟目录在服务器环境中是一个重要的概念。它允许我们在同一个Web服务器上创建多个逻辑上的“目录”,这些目录...

    嵌入式tomcat

    嵌入式Tomcat的工作原理是将Tomcat的核心组件打包到应用程序中,通过编程的方式启动和管理Tomcat实例。这使得开发者能够在程序启动时自动启动Tomcat服务器,处理HTTP请求,并在程序关闭时关闭服务器,无需额外的配置...

    手写嵌入式Tomcat

    嵌入式Tomcat的核心思想是将Tomcat服务器的功能打包进你的应用程序中,使得在运行时可以随应用程序一起启动和停止。这与传统的Tomcat部署方式不同,传统方式通常是在操作系统级别作为单独的服务进行管理。嵌入式...

    嵌入式tomcat,带例子。

    嵌入式Tomcat是Apache Tomcat服务器的一种轻量级实现,它被设计为可以直接集成到应用程序中,而无需单独部署和管理服务器实例。这个压缩包文件"tomcat-embed"很可能是包含了用于嵌入式Tomcat的相关库和配置文件,...

    嵌入式Tomcat5.5

    总结来说,嵌入式Tomcat5.5是一个强大的开发工具,它的快速启动、热部署和简单的配置使得J2EE-WEB开发变得更加便捷。开发者可以通过理解其核心特性和最佳实践,有效地利用这一工具提高工作效率。

    java嵌入式tomcat[借鉴].pdf

    Java 嵌入式 Tomcat 配置详细说明 Tomcat 是一个流行的 Java Web 服务器,可以作为独立的服务器运行,也可以...通过上述配置和代码,我们就可以在 Java 项目中嵌入 Tomcat 服务器,并实现 Web 应用程序的开发和部署。

    03-嵌入式Tomcat1

    Spring Boot致力于简化Java应用程序的开发,而嵌入式Tomcat作为其默认的Web服务器,使得开发者无需进行复杂的部署配置就能快速运行Web应用。让我们深入探讨一下嵌入式Tomcat及其与Spring Boot的关系。 首先,嵌入式...

    tomcat7 在java程序中启动

    嵌入式Tomcat的主要优点是简化了Web应用程序的测试过程,允许开发者在不依赖外部服务器的情况下快速启动和测试Web组件。此外,通过嵌入式方式使用Tomcat可以增强应用程序的模块性,降低部署的复杂度。 #### 注意...

    Spring 5 MVC演示应用程序,具有嵌入式Tomcat和Jaeger Tracing(不带Spring Boot).zip

    【标题】中的“Spring 5 MVC演示应用程序,具有嵌入式Tomcat和Jaeger Tracing”揭示了这个项目的核心组成部分,让我们深入理解这些关键概念。 **Spring 5 MVC框架** Spring MVC是Spring框架的一个模块,专门用于...

    tomcat-embed5.5.28

    总结起来,嵌入式Tomcat5.5.28提供了一种高效且灵活的方式,使开发者能够更好地集成和管理Web服务器。通过了解其内部结构和使用方式,我们可以优化项目架构,提高开发和运行效率。在实际开发中,结合具体的业务需求...

    使用embeded tomcat进行嵌入式javaee开发-启动tomcat

    在JavaEE开发中,使用内嵌的Tomcat服务器(通常称为embeded Tomcat)是一种常见的实践,它允许开发者在本地环境中快速、方便地测试和调试应用程序,而无需手动配置独立的服务器实例。本文将深入探讨如何使用embeded ...

    JAVA里使用Jetty作为轻量级嵌入式的Web容器

    Java中的Jetty是一个轻量级、高性能且可嵌入式的Web服务器和Servlet容器,它以其简单易用和高效性在开发社区中广受欢迎。本文将深入探讨Jetty的基本概念、特性以及如何在Java项目中使用它。 1. **Jetty简介** - ...

    绿色 移动 Java web 服务器 Tomcat

    - `bin`:包含启动和停止服务器的脚本。 - `conf`:存放服务器配置文件,如`server.xml`、`web.xml`等。 - `lib`:包含运行Tomcat所需的JAR文件。 - `webapps`:默认的Web应用程序部署目录。 - `logs`:服务器日志...

    一个支持servlet的web服务器.rar

    这个压缩包“一个支持servlet的web服务器.rar”很可能包含了实现这一功能的源代码、配置文件或者是一个预编译好的服务器软件,允许开发者在本地环境中运行和测试Servlet应用。下面我们将深入探讨Servlet以及如何在...

    Tomcat开机自启动

    * Tomcat:Apache Tomcat 是一个开源的Web应用服务器,用于运行基于 Java 的 Web 应用程序。 * Linux:Linux 是一种开源的操作系统,常用于服务器和嵌入式系统。 * CentOS:CentOS 是一个基于 Red Hat Enterprise ...

    服务器Tomcat7.0

    4. **嵌入式模式**:允许在应用程序中直接集成Tomcat,无需独立启动。 5. **JMX改进**:提供了更多的MBeans,方便监控和管理Tomcat的运行状态。 6. **WebSocket支持**:实现了WebSocket协议,允许双向通信,为实时...

    安卓版本下的Web服务器

    2. **NanoHTTPD**: NanoHTTPD是一个轻量级、易于实现的Web服务器,特别适合嵌入式系统,如安卓设备。它的源代码简洁,可以根据需求进行定制。 3. **CherryPy**: CherryPy是一个Python Web服务器和Web框架,虽然主要...

    嵌入tomcat

    - **增强的控制力**:开发者可以直接控制Tomcat的启动、停止及配置,而无需依赖外部的Web服务器。 - **减少部署复杂性**:应用程序可以独立部署,无需额外设置外部Web服务器。 - **提高性能**:由于减少了中间层,...

Global site tag (gtag.js) - Google Analytics