`
杨胜寒
  • 浏览: 286203 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

将Tomcat嵌入到自己的应用中

阅读更多

查看原文请移步《http://www.yshjava.cn/post/418.html

 

TomcatApache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成,是目前比较流行的Web 应用服务器。

Tomcat运行时占用的系统资源小,扩展性好,支持负载平衡与邮件服务等开发应用系统常用的功能而广受广大程序员的喜欢。Tomcat不仅有独立运行的版本,而且还提供了可以内嵌到JavaEE应用中的Embedded版本,这一点非常实用!

将Tomcat服务器嵌入到自己的应用中,不仅可以大幅缩短搭建Web服务器所消耗的时间,还可以深度控制Tomcat,从而更好地为应用服务器。
下面就以Tomcat6为例,以具体代码方式展示如何将Tomcat服务器嵌入到自己的应用中。

package cn.ysh.studio.tomcat;

import java.io.File;
import java.net.InetAddress;
import java.net.UnknownHostException;
import org.apache.catalina.*;
import org.apache.catalina.connector.Connector;
import org.apache.catalina.realm.MemoryRealm;
import org.apache.catalina.startup.Embedded;

/**
 * 以内嵌的方式启动tomcat服务器
 * 
 * @author www.yshjava.cn
 * 
 */
public class EmbeddedTomcat {

	private EmbeddedTomcat(Embedded tomcat, String listenIP, int listenPort) {
		this.tomcat = tomcat;
		this.listenIP = listenIP;
		this.listenPort = listenPort;
	}

	public static EmbeddedTomcat startup(String catalinaHome, String warFileName, int listenPort, boolean enableRemoteAccess) {
		System.setProperty("catalina.home", catalinaHome);
		// 监听IP获取
		String listenIP;
		try {
			listenIP = (enableRemoteAccess ? InetAddress.getLocalHost().getHostAddress() : "127.0.0.1");
		} catch (UnknownHostException e) {
			throw new RuntimeException(e);
		}
		// war 文件检测
		String contextName;
		int tn = warFileName.lastIndexOf("//");
		if (tn < 0) {
			contextName = warFileName;
			warFileName = catalinaHome + "/webapps/" + warFileName;
		} else {
			contextName = warFileName.substring(tn + 1);
		}
		File warFile = new File(warFileName);
		if (!warFile.exists())
			throw new RuntimeException("File '" + warFileName + "' does'nt exist.");
		if (warFileName.endsWith(".war")) {
			contextName = contextName.substring(0, contextName.lastIndexOf('.'));
		} else {
			if (!warFile.isDirectory()){
				throw new RuntimeException("File '" + warFileName + "' must be a .war file or a folder.");
			}
		}
		//创建一个内嵌的Tomcat服务器
		Embedded tomcat = new Embedded();
		//设置Tomcat的工作目录
		tomcat.setCatalinaHome(catalinaHome);
		// set the memory realm
		MemoryRealm memRealm = new MemoryRealm();
		tomcat.setRealm(memRealm);
		// 创建Tomcat引擎
		Engine engine = tomcat.createEngine();
		//设置默认的虚拟主机
		engine.setDefaultHost("localhost");
		engine.setName("MyEngine");
		//创建虚拟主机
		Host host = tomcat.createHost("localhost", catalinaHome + "/webapps");
		//把Host加入Engine
		engine.addChild(host);
		/*
		 * Create the ROOT context Context rootContext =
		 * tomcat.createContext("", catalinaHome + "/webapps/ROOT");
		 * rootContext.setReloadable(false);
		 * rootContext.addWelcomeFile("index.jsp"); host.addChild(rootContext);
		 */
		Context myContext = tomcat.createContext("/" + contextName, warFileName);
		myContext.setPrivileged(true);
		host.addChild(myContext);
		// Install the assembled container hierarchy
		tomcat.addEngine(engine);
		Connector connector = tomcat.createConnector(listenIP, listenPort, false);
		tomcat.addConnector(connector);
		// Start the embedded server
		try {
			tomcat.start();
		} catch (LifecycleException e) {
			throw new RuntimeException(e);
		}
		EmbeddedTomcat srv = new EmbeddedTomcat(tomcat, listenIP, listenPort);
		return srv;
	}

	private Embedded tomcat;
	private String listenIP;
	private int listenPort;

	public void stop() {
		try {
			tomcat.stop();
		} catch (LifecycleException e) {
			throw new RuntimeException(e);
		}
	}

	public String getListenIP() {
		return listenIP;
	}

	public int getListenPort() {
		return listenPort;
	}

	public static void main(String[] args) {
		//内嵌Tomcat的工作目录
		String tomcathome = "D://Test//TestEmbedTomcat";
		//启动内嵌的Tomcat
		final EmbeddedTomcat tomcat = EmbeddedTomcat.startup(tomcathome, "examples", 8080, true);
		//打印启动信息
		System.out.println("Tomcat started at " + tomcat.getListenIP() + ":" + tomcat.getListenPort());
		//在JVM中添加一个Hook,这样可以在虚拟机退出时关闭tomcat以释放相关资源
		Runtime.getRuntime().addShutdownHook(new Thread() {
			public void run() {
				tomcat.stop();
			}
		});
	}
}

 

从上述代码来看,将Tomcat内嵌到自己的应用中还是比较简单和方便的,如果你了解Tomcat的目录结构或者是工作原理,那么上述代码就更加容易理解了。

 

原创文章,转载请注明出处:http://www.yshjava.cn/post/418.html

 

3
4
分享到:
评论

相关推荐

    tomcat嵌入OSGI容器

    标题中的“tomcat嵌入OSGI容器”是指在Apache Tomcat服务器中集成OSGI(Open Service Gateway Initiative)框架,使得Tomcat能够支持模块化的应用程序部署和管理。OSGI是一种Java平台上的服务导向架构,它允许动态地...

    嵌入tomcat

    ### 嵌入Tomcat:理解与实践 #### 引言 嵌入Tomcat是一种将Apache Tomcat服务器直接集成到Java应用程序中的...通过遵循上述步骤,你可以轻松地将Tomcat集成到你的Java应用中,从而充分利用其提供的强大功能和灵活性。

    tomcat7部署应用

    - 对于“tomcat7部署应用”,可能是指将应用文件直接放到`webapps`目录,或者创建一个WAR文件后上传。 4. **应用目录结构**: - `index.html`通常是Web应用的默认入口页面。 - `hello.jsp`是一个JSP文件,用于...

    tomcat5.5嵌入版

    Tomcat 5.5 嵌入版是一个轻量级的Java Servlet容器,它被设计为可嵌入到其他应用程序中,以便在开发和部署Java Web应用时提供便捷性。这个版本是Apache Tomcat服务器的一个特定构建,允许开发者在不安装完整服务器的...

    在应用中嵌入Tomcat编程开发技术共7页.pdf.zip

    【标题】中的“在应用中嵌入Tomcat编程开发技术”指的是将Apache Tomcat服务器集成到应用程序中,以便为Web应用程序提供运行环境。Tomcat是一个开源的Java Servlet容器,它实现了Java EE(现在称为Jakarta EE)的Web...

    tomcat连接池应用例子

    描述中提到的“简单的通过Tomcat连接池访问mysql数据库的jsp程序例子”,意味着这是一个教学或演示性质的项目,旨在展示如何在JSP页面中通过Tomcat的连接池连接到MySQL数据库并执行查询。JSP(JavaServer Pages)是...

    《JSP+Servlet+Tomcat应用开发从零开始学》┊林龙

    过滤器可以拦截请求和响应,执行预处理或后处理任务,而监听器则可以监听Web应用中的各种事件,如会话的创建和销毁。 总之,《JSP+Servlet+Tomcat应用开发从零开始学》是一本全面介绍Java Web开发基础的教程,通过...

    tomcat-embed5.5.28

    在“tomcat-embed5.5.28”这个版本中,Tomcat被设计为可嵌入的模块,可以无缝集成到任何Java应用中,无论是桌面应用还是服务端应用。 使用嵌入式Tomcat的好处在于: 1. **灵活性**:由于Tomcat被内置于项目中,...

    tomcat7 在java程序中启动

    在Java程序中嵌入Tomcat7意味着可以在Java应用程序内部直接启动和使用Tomcat服务器,而不是将应用程序部署到独立的Tomcat服务器上。这种嵌入式使用场景允许开发者更方便地在应用程序中集成Web服务器功能,尤其是在...

    tomcat7.0.19 应用服务器

    部署Web应用到Tomcat 7.0.19时,可以将WAR文件直接复制到`webapps`目录下,Tomcat会自动解压并部署;或者创建一个`context.xml`文件放入`conf/Catalina/localhost`目录下,定义应用的上下文路径和部署位置。 安全性...

    apache-tomcat-7.0.39

    3. **部署和调试应用**:直接将Eclipse中的Java Web项目发布到Tomcat,便于快速调试和测试。 4. **资源同步**:Eclipse会自动将项目中的更改同步到Tomcat,无需手动复制文件。 在Apache Tomcat 7.0.39的压缩包中,...

    Java内嵌式Tomcat-TomcatDemo

    然而,在现代开发环境中,为了简化部署流程和提高灵活性,开发者常选择将Tomcat“内嵌”到Java应用中,即"内嵌式Tomcat"。 内嵌式Tomcat的优势在于,它允许开发者直接在Java应用程序内部启动和管理Tomcat服务器,...

    apache-tomcat-8.5.23.tar.gz 【Tomcat服务器,Tomcat8.5 linux版】

    5. **部署应用**:将你的Web应用程序(WAR文件或解压的目录)复制到`webapps`目录下,Tomcat会自动部署它。 6. **监控和管理**:如果你启用了管理应用,可以通过`http://your_server_ip:8080/manager/html`来管理和...

    springboot部署到外部tomcat容器.rar

    本资源"springboot部署到外部tomcat容器.rar"显然是关于如何将Spring Boot应用部署到外部的Tomcat服务器上的教程。下面,我们将深入探讨这一主题。 首先,了解Spring Boot的内置Tomcat与外置Tomcat的区别至关重要。...

    Tomcat-ROOT.rar

    - 将"ROOT.war"文件复制到Tomcat的webapps目录下,Tomcat会自动解压缩并部署该应用。 - 或者手动创建"ROOT"目录并将所有文件复制到该目录下,然后将目录放在webapps下。 8. **启动与管理**:通过Tomcat的bin目录...

    apache-tomcat-6.0.10

    3. **Web应用程序目录结构**:Tomcat遵循Java EE规范中的标准目录结构,包括WEB-INF目录,其中包含web.xml(部署描述符),classes目录(存放编译后的Java类)和lib目录(存放应用所需的库文件)。 4. **部署与管理...

    JAVA WEB 应用开发:J2EE和TOMCAT

    2. **部署应用**:在Tomcat中,可以通过将WAR(Web ARchive)文件放入webapps目录来快速部署应用。WAR文件是打包好的Web应用,包含了所有的静态资源、JSP和Servlet类文件。 3. **管理工具**:Tomcat提供了一个基于...

    Tomcat开发jsp与servlet总结.pdf

    - JSP(JavaServer Pages)是用于创建动态Web页面的技术,它允许开发者将Java代码嵌入到HTML页面中。 - 一个简单的JSP页面例子为“mywebtest.jsp”,其中包含基本的HTML标签和JSP脚本元素,例如`("firstjspfile");...

    tomcat8.5x64位绿色版

    【描述】"好用的很,给自己留个备份"表明该版本的Tomcat在使用过程中表现出良好的稳定性和效率,用户认为它非常实用,并选择保存一份以备不时之需。这通常意味着Tomcat 8.5在处理Web应用程序时能够提供可靠的服务,...

    tomcat6-apache-tomcat-6.0.35.zip

    在Java Web开发中,Servlet是用于扩展服务器功能的Java类,而JSP则是基于HTML的页面,允许开发者将动态代码嵌入到静态页面中。Tomcat作为Servlet容器和JSP引擎,能够处理HTTP请求,并将这些请求转发给相应的Servlet...

Global site tag (gtag.js) - Google Analytics