Tomcat5中的Embeded版本,为应用中集成完整的Web服务提供了尽可能大的空间,不仅使开发者容易获得对标准HTTP的处理,还有SSL的通讯处理,使开发者很容易就可以对原有非Web系统进行扩展以支持瘦客户端应用,通向Web大门的钥匙已经放在这里,剩下的就是看你怎样来发挥了。

Tomcat严格意义上不是一个真正的AppServer,只是支持运行Servlet和Jsp的Web容器,此外扩展了一些AppServer的功能,如数据库连接池,JNDI等,如何提炼,或者说把Tomcat整理成一个最小的集合成为Tomcat嵌入版本的关键,从Tomcat5.0开始提供和支持Embeded版本,即最简化Tomcat Server,下面就针对Tomcat Server的Embeded版本进行介绍,怎样把Tomcat集成到Java应用中。

首先可以在http://apache.mirrors.versehost.com/jakarta/tomcat-5/v5.0.28/bin/jakarta-tomcat-5.0.28-embed.tar.gz下载Tomcat的Embeded版本,下载解压后把最里层的jakarta-tomcat-5.0.28-embed目录copy到容易查找的目录,为简易需要更名为EmbeddedTomcat,作为嵌入Tomcat的工作目录。

首先我们需要了解Tomcat在工作时的层次情况,它按照:

上面是Tomcat实现的内部工作结构:

一个Server含有几个Connector,比如non-SSL HTTP/1.1 Connector on port 8080,SSL HTTP/1.1 Connector on port 8443和AJP 1.3 Connector on port 8009。连接器就是接受客户端情况然后封装成request和response对象交给容器处理。

通常是一个Engine,其中Engine里含有1个Host,1个Host 内可以含有多个Context,Context代表Web应用,即1个Host里可以包含多个Web应用,tomcat的webapps目录里面防止的就是一个个web应用。Engine接收Service发过来的请求(通过Connector),交给相应的Host进行处理,然后Host交给具体的Context。

下面是非常简单的创建Embeded tomcat的例子,示意其使用

把tomcat-embed目录下的lib内的所有jar包引入到项目的环境中,即完成了项目的环境搭建。在应用里开发嵌入式Tomcat,需要根据以下步骤:
1)创建org.apache.catalina.startup.Embedded实例,其代表嵌入式Tomcat Server的实例;
2)创建org.apache.catalina.Engine 实例,代表上面XML结构示例中的Engine,作为容器用来包含Host节点;
3)创建org.apache.catalina.Host实例,代表虚拟主机服务,把它加入到2)中产生的Engine;
4)创建一个或多个org.apache.catalina.Context实例,代表Web应用,每个Web应用都需要加入到3)产生的Host中;
5)最后创建org.apache.catalina.Connector实例,把它加入1)创建的tomcat实例中,它用来接收客户发出的请求。

具体和完整的代码如下:

import java.io.File;
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.Logger;
import org.apache.catalina.startup.Embedded;public class TomcatService {public static void main(String[] args) {// 设置Tomcat的工作目录,并启动Tomcat ServerString path = "F:/360云盘/eclipse/eclipse/workspace/EmbeddedTomcat";Embedded tc = createTomcat(path);try {tc.start();System.out.println("---------- Tomcat Server start over. ------------");} catch (Exception e) {e.printStackTrace();}}private static Embedded createTomcat(String path) {// 创建嵌入式Tomcat Server的实例Embedded tomcat = new Embedded();// 设置Tomcat的工作目录// catalina.home就是tomcat的存放路径,例如:D:\360云盘\Tools\apache-tomcat-7.0.39// 这里存放路径就是项目路径F:/360云盘/eclipse/eclipse/workspace/EmbeddedTomcat,因为是内嵌tomcattomcat.setCatalinaHome(path);// 产生Tomcat引擎Engine engine = tomcat.createEngine();engine.setName("EmbededServer");// 创建Host,设置Host的工作目录Host host = tomcat.createHost("localhost", tomcat.getCatalinaHome()+ "/webapps");// 把Host加入Engineengine.addChild(host);engine.setDefaultHost(host.getName());System.out.println("host.getAppBase():" + host.getAppBase());String path1 = host.getAppBase() + "/ROOT";String path2 = host.getAppBase() + "/manager";if (!new File(path1).exists()) {System.err.println("请检查instance1应用的目录以及相关资源是否存在.");return null;}// 创建instance1的Context,并加入Host中Context ctxt = tomcat.createContext("/ROOT", path1);Context ctxt1 = tomcat.createContext("/manager", path2);host.addChild(ctxt);host.addChild(ctxt1);tomcat.addEngine(engine);tomcat.setDebug(Logger.WARNING);try {// Tomcat加入Connector,监听本地(127.0.0.1)的访问System.out.println(InetAddress.getByName("127.0.0.1"));tomcat.addConnector(tomcat.createConnector(InetAddress.getByName("127.0.0.1"), 9999, false));} catch (UnknownHostException e) {System.err.println("绑定Tomcat Server到127.0.0.1:8080失败,请检查端口是否被占用.");e.printStackTrace();tomcat = null;}return tomcat;}
}

以上代码亲测可用,这里我同时启动了两个项目,manager和ROOT,下面是我的工程目录

在浏览器输入http://localhost:9999/ROOT,显示如下:

在浏览器输入http://localhost:9999/manager,显示如下:

在这里需要注意,由于嵌入式版本Tomcat没有common/lib目录,一些需要的Jar包可以复制到JDK的/jre/lib/endorsed目录下进行使用。

在OFBiz中默认使用的embeded tomcat,具体的可以参考里面对于嵌入式启动相关的内容

这里我们讨论了如何使用Embedded Tomcat,并没有提现出使用内嵌Tomcat的好处,我们可以把上面的ROOT和manager项目分开成为两个单独的项目,这样,启动的时候就可以独立启动,配置不同的监听端口的话可以同时启动,主要是避免需要调试多个项目的时候同时在一个Tomcat里面启动,改了一个项目,就要重启Tomcat,浪费时间,分开之后,就可以独立进行发布,各自互不影响,调试、启动方便。

在应用中使用嵌入式Tomcat相关推荐

  1. Spring Boot删除嵌入式Tomcat服务器,启用Jetty服务器

    快速指南,在Spring Boot应用程序中排除嵌入式tomcat服务器并添加Jetty Server. 配置删除tomcat并添加Jetty Server. 1.简介 在本教程中,我们将学习如何从S ...

  2. maven web应用嵌入式tomcat学习笔记

    一 首先创建 maven web 工程 暂无 二 在maven 中添加嵌入式tomcat配置 <build>     <plugins>         <plugin& ...

  3. maven_结合使用嵌入式Tomcat和Maven tomcat插件

    maven 使用Eclipse WTP开发Java Web应用程序时,我们需要在计算机中安装tomcat才能执行该应用程序. 如果在项目上使用Maven,则可以使用tomcat插件运行嵌入式tomca ...

  4. 结合使用嵌入式Tomcat和Maven tomcat插件

    使用Eclipse WTP开发Java Web应用程序时,我们需要在计算机中安装tomcat才能执行该应用程序. 如果在项目上使用Maven,则可以使用tomcat插件运行嵌入式tomcat安装并测试 ...

  5. springboot需要tomcat服务器吗_嵌入式 Tomcat AJP 协议对 SpringBoot 应用的影响

    前言 2020 年 1 月 6 日,国家信息安全漏洞共享平台(CNVD)收录了由北京长亭科技有限公司发现并报送的 Apache Tomcat 文件包含漏洞.Tomcat AJP 协议由于存在实现缺陷导 ...

  6. 嵌入式tomcat的不使用web.xml原理分析

    前言 前面的章节讲了嵌入式tomcat使用web.xml启动,这章说说不使用web.xml启动tomcat.有了这个就明白Spring Boot是如何在没有web.xml的的情况下实现web能力的,以 ...

  7. 嵌入式Tomcat示例

    最近在看李号双老师的<深入拆解Tomcat&Jetty>专栏,思路超清楚,看到源码就怕怕的我也可以看的很欢脱,想看源码一起揭秘呢-- and 老师建议的第一步就是搞个嵌入式的tom ...

  8. 嵌入式Tomcat运行Servlet和JSP

    在本教程中,我们展示了如何使用嵌入式 Tomcat 服务器.Tomcat可以嵌入模式运行:这意味着无需构建 WAR 文件并将其部署在独立的 Tomcat 服务器中.本教程中的示例是使用 Maven 构 ...

  9. Tomcat(二):手写嵌入式tomcat

    一.什么是嵌入式tomcat 嵌入式tomcat:非传统的部署方式,将tomcat嵌入到主程序中进行运行. 二.嵌入式tomcat的优点 灵活部署.任意指定位置.通过复杂的条件判断 三.Maven集成 ...

最新文章

  1. OpenShift — 核心概念
  2. 代码+实例:深度学习中的“轴”全解
  3. jQuery Validate 提交表单验证失败扩展方法
  4. redis scan 效率太慢_Redis 基础、高级特性与性能调优(下)
  5. 小学阅读方法六种_小学数学阅读理解解题技巧,附常见的6种方法
  6. 《仿人机器人原理与实战》一1.2 反射弧与仿人机器人设计
  7. 易管家服装进销存 v1.0 下载
  8. 企业财务报表分析【4】
  9. “任务管理器已被管理员禁用”如何解除?
  10. 网络应用程序的架构:C/S架构、B/S架构的区别与优缺点
  11. houdini中使用vex旋转对象法线方向方法
  12. 工作流与BPM的区别
  13. 解决:未定义标识符 “sleep“ 或 “sleep“:找不到标识符
  14. 什么都学一点系列之鸿蒙开发Java版简易备忘录
  15. docker防止fork炸弹
  16. 如何使excel实现汉字转拼音及获取大写拼音并保存为常用函数
  17. android nfc标签类型,Android NFC标签 开发深度解析 触碰的艺术
  18. SpringBoot2--Spring Security
  19. 终极版C语言(七)-尹成-专题视频课程
  20. 各种数据库的分类和比较

热门文章

  1. 从TVMConf 2020看TVM的生态环境
  2. Linux___安装vundle
  3. 【链块观点02期】面对落后的传统版权保护,区块链都有哪些绝招?
  4. 燕麦云何洋开讲丨知道了这些,你还会用共享充电宝吗?
  5. ヾ(o◕∀◕)ノヾ各种动态规划经典例题(新手向、多类型)
  6. unity shader卡通渲染(描边)+阴影+多光源处理
  7. android Java开发设计模式及在android中的应用解析
  8. 数据挖掘人员工作领域大致可分为三类【转知乎某人的观点】
  9. unity3d 射箭实现
  10. 【Unity3D Shader编程】之四 热带雨林篇 剔除 深度测试 Alpha测试以及基本雾效合辑