使用embeded tomcat进行嵌入式javaee开发-启动tomcat
https://www.iflym.com/index.php/code/use-embeded-tomcat-to-javaee-start-tomcat.html


昨天在网上研究了下关于将tomcat嵌入到主程序中进行运行,而不是像以前将一个web项目copy到tomcat中进行运行。之所以这样做的原 因,即是因为项目部署到客户方,在进行更新的时候,需要手动地进行更新,再把相应代码copy到tomcat,然后再运行。运用embeded tomcat就可以将项目与tomcat分开,在进行更新时,先使用自定义的程序进行自动化更新,待更新完毕之后,再启动tomcat(或其它 javaee容器)进行项目运行。

这样做的最终效果就是修改了项目的运行方式。原先的运行方式是以tomcat为中心,由tomcat来启动和终止项目,现在是由我们的启动程序 为中心,由启动程序来负责启动和终止项目。就相当于现在流行的cs程序一样,有单独的启动脚本,在启动时进行环境预初始化,更新程序以及其它操作,待完成 之后再进行最终的项目启动。

这篇主要讲解如何使用embeded tomcat在代码中进行启动和终止。网上的一般文章均为tomca5.x来做,这里使用了最新的tomcat7,因为tomcat7为embeded开 发,单独发布了org.apache.tomcat.embed包,以进行独立的embed开发。以下是相应的maven包

01
03
05
07
09
11
13
15
17
19
dependency<>org.apache.tomcat.embed</>
artifactIdartifactId<>7.0.2</>
dependency<>
groupIdgroupId<>tomcat-util</>
versionversion</>
dependency<>org.apache.tomcat.embed</>
artifactIdartifactId<>7.0.2</>
dependency<>
groupIdgroupId<>tomcat-embed-logging-juli</>
versionversion</>

使用了embed包中的core包,以及用于编译jsp的jasper包,然后是工具类以及进行上场记录的logging-juli包。开始写代码:

1
3
5
7
//设置工作目录
"d:/"Tomcat tomcat = Tomcat();
"localhost"tomcat.setPort(startPort);
tomcat.setBaseDir(catalina_home);

上面使用了Tomcat类来进行启动类,在tomcat7以前均是使用一个叫Embed类来进行启动,在tomcat7之后,embed类被不建 议使用,而建议使用新的Tomcat类来进行启动了。然后设置主机名,端口,再设置一个工作目录。这个工作目录可以是任意目录,主要是tomcat需要这 个目录来记录一些东西,比如记录word信息,日志信息(如果配置了日志的话),以及临时文件存储等。

1
3
5
7
tomcat.getHost().setAppBase();
StandardServer server = (StandardServer) tomcat.getServer();
new server.addLifecycleListener(listener);
tomcat.getServer().setPort(shutdownPort);

上面的代码,首先设置我们的项目程序所在的appbase,即放项目代码的地方。在通常的tomcat配置中,这个目录一般是webapps。接 着设置一个listener,这个listener主要是负责启动一些比如html native支持程序以及ipv6等信息配置(可以忽略)。接着是配置一个关闭的注册端口,当向这个端口发送信息时,就可以达到关闭tomcat的目的 (后面会讲)。

1
3
5
7
9
//加载上下文
new standardContext.setPath();standardContext.setDocBase();standardContext.addLifecycleListener(Tomcat.DefaultWebXmlListener());
standardContext.addLifecycleListener(Tomcat.FixContextListener());
"t-session"tomcat.getHost().addChild(standardContext);

我们单独使用了一个Context来为这个host添加上下文,tomcat本身提供一个方法tomcat.addWeb方法来添加项目包,不过 由于这里需要单独设置一个tomcat的sessionName,所以使用与与tomcat.addWeb实现类似的方法来添加一个项目包。
    以上代码中有两个需要注意的listener,一个是DefaultWebXmlListener,这个是由tomcat加载一些默认的配置信 息,比如jspServlet,以及一些繁复的mime/type信息;加上这个,就不需要我们自己去写这么多的配置,因为每个项目都需要这些。这个配置 与tomcat目录下的conf/web.xml中的配置一样,只不过这里是代码化了。第二个是FixContextListener,这个主要是在项目 部署完后,将这个上下文设置为configured,表示已经配置好了(不然,tomcat启动时会报错,即相应上下文还未配置好)。
    配置OK了之后,就是启动tomcat了:

1
tomcat.getServer().await();

启动tomcat,并让tomcat在关闭端口上监听。如果没有最后一句,程序将直接结束,保证监听之后,tomcat将一直监听关闭事件,待有关闭事件之后才结束当前程序。所以如果想要关闭当前的tomcat,只需要向关闭端口发送一些信息即可:

1
3
5
7
9
private void throws Socket socket = Socket(, shutdownPort);
forint 0stream.write(shutdown.charAt(i));
stream.close();
}

这样即可达到关闭tomcat的目的。

实际上看整个项目代码,项目代码的运行,就是一个配置一个基础的server.xml(即tomcat目录下的 conf/server.xml),先配置运行端口,关闭监听端口;然后配置运行的host以及添加一个上下文context,最后就开始运行并开始监 听。对照这个程序,再看一下server.xml中的配置信息,就很容易明白以上这段代码了。

其实这是转载博客园的一章文章的

使用embeded tomcat进行嵌入式tomcat-启动tomcat相关推荐

  1. 第4步 tomcat配置中文字符集 启动Tomcat  网页乱码

    第二部:给页面上添加mate标签 <html> <meta http-equiv="Content-Type" content="text/html; ...

  2. SpringBoot启动Tomcat原理与嵌入式Tomcat实践

    导读 作为一个开发,使用Spring Boot 时,和传统的Tomcat 部署相比,我们只需要关注业务的开发,项目的启动和部署变的十分简单, 那么它背后是怎么实现的, 隐藏着什么? 本文先从一个嵌入式 ...

  3. tomcat(17)启动tomcat

    [0]README 1)本文部分文字描述转自"how tomcat works",旨在学习"tomcat(17)启动tomcat"的相关知识: 2)本文重点关注 ...

  4. eclipse启动tomcat不能正常访问问题

    问题:  1.eclipse中配置好tomcat服务器后,启动tomcat查看控制台信息显示启动成功,  但访问tomcat首页报404异常 2.而从tomcat/bin目录中启动后,就能够正常访问首 ...

  5. 安装好tomcat后,启动tomcat点击 startup.bat 窗口一闪而过怎么解决

    文章目录 环境变量配置问题 解决方法: 环境变量配置问题 这是我今天安装tomcat遇到的问题,一开始摸不着头脑,最后想到了可能是没有配置环境变量的问题. 对于免安装的 Tomcat 来说,在启动To ...

  6. Java启动Tomcat

    文章目录 目标: 实现: 一.前期准备 1.加入依赖 2.定义Servlet类 3.定义Servlet类 4.启动Tomcat并测试 总结 流程图 重点及易错点 1.服务器阻塞等待请求 目标:   学 ...

  7. Docker启动Tomcat容器

    1.拉取Tomcat镜像并启动tomcat容器 1.拉取tomcat镜像 [root@localhost /]# docker pull tomcat(#拉取tomcat镜像,不指定TAG,默认表示拉 ...

  8. tomcat linux dump,Linux下Tomcat常用命令与配置

    最近经常用到的Linux下的命令 重启tomcat ps x 查看pid kill -9 pid 杀死进程 /app/tomcat/bin/startup.sh 启动tomcat 追踪日志 tail ...

  9. tomcat设置php root,apache+tomcat+php搭建

    Linux全能web服务器配置方案 纲要: 一,Apache的安装 二,编译安装PHP 三,JSP环境的支持 四,企业虚拟主机配置实战方案 五,Web服务环境支持测试 一,Apache(httpd)的 ...

  10. Tomcat介绍 安装jdk 安装Tomcat

    一.Tomcat介绍 Tomcat Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache.Sun 和其他 ...

最新文章

  1. 深度特征合成与遗传特征生成,两种自动特征生成策略的比较
  2. laravel php配置,PHP Laravel框架路由配置及设置技巧全解
  3. 成功解决FutureWarning: Using a non-tuple sequence for multidimensional indexing is deprecated; use `ar
  4. 新产品孕育记:PM如何把一款产品从0带到1
  5. 日志分析系统分类有哪些_SEO优化中网站日志起到的重要性作用
  6. 励志:读书七年,为了挣钱,我竭尽全力
  7. 向腾讯云windows服务器传输文件,如何上传本地文件到腾讯云Windows服务器上?
  8. 基于华为云的Django网站部署
  9. matlab 图像分割
  10. 机器人体验营笔记(一)概要
  11. 怎样给计算机做屏幕保护,电脑屏保软件如何制作屏保 及如何设置屏幕保护
  12. C语言:使用函数统计指定数字的个数
  13. ae怎么输入竖排文字? ae文字竖排的方法
  14. 读《创业36条军规》(四)创业是最好的武器
  15. 转神经网络压缩提升方法
  16. LeCo-1482.制作 m 束花所需的最少天数
  17. 【linux】利用ssh、sshpass和rsync命令,实现免密同步文件,指定非22端口
  18. Ubuntu18.04 下虚拟机vm16pro 无法连接WIFI问题解决
  19. HDU 5374 模拟俄罗斯方块
  20. PHPExcel设置列宽行高及插入URL

热门文章

  1. 分布式项目-三级分类管理(2)
  2. AutoMake教程
  3. matlab 套期保值,求教利用指数效用函数做期权套期保值的matlab程序
  4. flask+jquery前后台交互之拼接div
  5. hrms系统的服务器名是什么,解读HRMS.doc
  6. [华为机试真题][2015]65.和尚挑水
  7. 电线之间:采访开发商和企业家Guillermo Rauch
  8. 一个沉重的问题:未来已来,软件测试还有价值吗?
  9. jQuery设置网页全屏功能
  10. Linux 配置和安装Oracle DG时遇到的报错及解决方案