查看原文请移步《http://www.yshjava.cn/post/418.html》
Tomcat是Apache 软件基金会(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
相关推荐
在应用中嵌入Tomcat编程开发技术共7页.pdf.zip
Apache Tomcat 5.0.x在Apache Tomcat 4.1的基础上做了很多改动,包括: · 性能优化和减少垃圾回收动作 · 重构程序部署,通过一个可选的独立部署程序,允许在将一个web应用放进产品前验证和编译它 · 基于JMX的...
│ ch17.rar 将Tomcat嵌入到Java中(实例演示) │ ch19(security).rar Tomcat安全(实例演示) │ ch24.rar IIS与Tomcat集成(实例演示) │ ├─ch20 JMeter压力测试实例(实例演示) │ classes12.jar ...
该项目将帮助您运行嵌入到代码中的 Tomcat 服务器并作为应用程序运行。 先决条件: JDK 1.6 或以上 [可选] Gradle 1.x 怎么跑? 下载这个项目 运行gradlew run (如果您的类路径中已经有 Gradle,则运行gradle run...
Alpha / Beta /Stable ...一个新的主要版本的初始...Apache Tomcat 3.1的用户应该更新到3.1.1以关闭安全漏洞,强烈建议他们迁移到当前的生产版本Apache Tomcat 3.3。 的Apache Tomcat 3.0.x的。初始Apache Tomcat版本。
由于Tomcat允许开发者只需通过加入一行致谢,就可以把Tomcat嵌入到它们的应用中。遗憾的是,许多商业应用服务器并没有遵守此规则。 对于开发者来说,如果是为了寻找利用Servlet、JSP、JNDI和JMX技术来生成JavaWeb...
tomcat6学习笔记( 包括和apache2的集成,集群,SSI,SSL,嵌入应用程序,访问控制平台和管理平台)
该存储库专为有兴趣将 PDFTron WebViewer 集成到 Tomcat JSP Web 应用程序中的任何用户设计。初始设置在开始之前,请确保您的开发环境包含 Java 下面介绍的 Node 和 npm 只是为了方便下载和安装 WebViewer。安装 ...
运行时 API 切换器是一个概念证明,即 OSGI 容器可以嵌入到 Web 应用程序中并提供对不同适配器版本的支持。 由于适配器的不同版本,可以在运行时在合约之间切换。 参与规则:因为这是一个 PoC,我只编写了三个测试...
把java开发的war包后更新到linux服务器后,通过本资源的配置nginx+tomcat实现两台服务器负载均衡,并配置了https的访问方式,并同时支持ipv6网络的访问
Tomcat:早期的Tomcat是一个嵌入Apache内的JSP/Servlet解释引擎Apache+Tomcat就相当于IIS+ASP。后来的Tomcat已不再嵌入Apache内,Tomcat进程独立于Apache进程运行。 而且,Tomcat已经是一个独立的Servlet和JSP容器,...
(1)将01、02文件夹拷贝到Tomcat安装路径下的webapps文件夹中。 (2)第1个实例需要将从支付宝获取的接口API打包成jar文件,打包后的目录如图所1.1示,然后将该jar文件与jsf-api.jar、jsf-impl、jstl-1.2.jar以及...
该应用程序确实清除了Spring Boot的基本基础知识,例如如何使用它,如何将其嵌入JPA和外部DB MYSQL。 我使用了的方案,其中 * Users can be fetched from DB * Users can be added in DB * Books can be fetched ...
OA,CRM等管理系统作为内容管理模块等嵌入到java系统中。 技术参数: Struts+hibernate+jsp+struts tags 数据库:mysql 兼容性:tomcat,resin linux windows 编码:utf8 程序语言:中文 推荐开发工具: ...
OA,CRM等管理系统作为内容管理模块等嵌入到java系统中。 技术参数: Struts+hibernate+jsp+struts tags 数据库:mysql 兼容性:tomcat,resin linux windows 编码:utf8 程序语言:中文 推荐开发工具: ...
将其放置在合适的位置,以包含在Docker卷中或直接复制到Web应用程序容器中。 以下示例使用基于Tomcat的Docker容器。 通过docker build步骤将Web应用程序存档复制到映像中。 在示例中,spring配置文件作为docker卷...
使用嵌入式 Tomcat 8 清洁安装带有 websocket 和 Atmosphere 的 Spring Boot 应用程序,运行由 thymeleaf 在 maven 构建的自托管 .jar 文件中生成的角度前端。 带有 Spring Security 的 Spring Boot Tomcat8 气氛...
测试脚本采用纯JavaScript或DHTML写成,你将 Selenium Core 的测试脚本直接放置到你的应用程序所在的 Web 服务器中,就可以在客户端使用任何受支持的浏览器运行测试了。 Selenium 使用 JavaScript 和 Iframe 自动化...
这个章节将用一个可以在你自己的开发环境中使用的例子,逐步介绍各种概念与API。 Flowable可以十分灵活地加入你的应用/服务/构架。可以将JAR形式发布的Flowable库加入应用或服务,来嵌入引擎。 以JAR形式发布使...
(2)嵌入的Tomcat,无需部署WAR文件 (3)简化Maven配置 (4)自动配置Spring (5)提供生产就绪型功能,如指标,健康检查和外部配置 (6)绝对没有代码生成并且对XML也没有配置要求 Springboot跟普通框架的不同之处就是他将...