tomcat web应用_具有可执行Tomcat的独立Web应用程序

tomcat web应用

在部署应用程序时,简单性是最大的优势。 您将了解到,尤其是在项目发展且需要在环境中进行某些更改时。 将您的整个应用程序打包到一个独立且自足的JAR中似乎是个好主意,特别是与在目标环境中安装和升级Tomcat相比。 过去,我通常将Tomcat JARs包含在Web应用程序中,并使用Tomcat API编写瘦命令行运行程序。 幸运的是,有一个tomcat7:exec-war maven目标可以做到这一点。 它需要您的WAR工件并将其与所有Tomcat依赖项打包在一起。 最后,它还包含要显示的Tomcat7RunnerCli Main-class

想尝试一下吗? 接受您现有的WAR项目并将以下内容添加到pom.xml

<plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.0</version><executions><execution><id>tomcat-run</id><goals><goal>exec-war-only</goal></goals><phase>package</phase><configuration><path>/standalone</path><enableNaming>false</enableNaming><finalName>standalone.jar</finalName><charset>utf-8</charset></configuration></execution></executions>
</plugin>

运行mvn package,几秒钟后,您将在目标目录中找到闪亮的standalone.jar 。 运行您的Web应用程序从未如此简单:

$ java -jar target/standalone.jar

…您可以浏览localhost:8080/standalone 。 尽管path参数的文档说(强调我的):

用于正在运行的Web应用程序的webapp上下文路径。 将Webapp存储在exec jar中的名称。 不要在我们两个人之间使用 /,毕竟<path>/</path>似乎可以工作。 事实证明,内置main类实际上要灵活一些。 例如,您可以说(我希望这是不言而喻的):

$ java -jar standalone.jar -httpPort=7070

这有什么runnable JAR所做的就是第一个解压缩它的WAR文件中的一些目录( extract通过default1 ),并将其部署到Tomcat -所有必需的Tomcat JARs也包括在内。 空的standalone.jar(内部几乎没有KiB WAR)的权重约为8.5 MiB如果您声称将每个版本的整个Tomcat与应用程序一起推送是浪费的,那么就不算多。

在谈论Tomcat JARs ,您应该想知道如何选择此runnable包含的Tomcat版本? 不幸的是,我找不到任何简单的选项,因此我们必须回到显式重新定义插件依赖项(2.0版已将7.0.30 Tomcat硬编码)。 这很无聊,但没有那么复杂,可能对将来的参考很有用:

<properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><tomcat7Version>7.0.33</tomcat7Version>
</properties><build><plugins><plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.0</version><executions><execution><id>tomcat-run</id><goals><goal>exec-war-only</goal></goals><phase>package</phase><configuration><path>/standalone</path><enableNaming>false</enableNaming><finalName>standalone.jar</finalName><charset>utf-8</charset></configuration></execution></executions><dependencies><dependency><groupId>org.apache.tomcat.embed</groupId><artifactId>tomcat-embed-core</artifactId><version>${tomcat7Version}</version></dependency><dependency><groupId>org.apache.tomcat</groupId><artifactId>tomcat-util</artifactId><version>${tomcat7Version}</version></dependency><dependency><groupId>org.apache.tomcat</groupId><artifactId>tomcat-coyote</artifactId><version>${tomcat7Version}</version></dependency><dependency><groupId>org.apache.tomcat</groupId><artifactId>tomcat-api</artifactId><version>${tomcat7Version}</version></dependency><dependency><groupId>org.apache.tomcat</groupId><artifactId>tomcat-jdbc</artifactId><version>${tomcat7Version}</version></dependency><dependency><groupId>org.apache.tomcat</groupId><artifactId>tomcat-dbcp</artifactId><version>${tomcat7Version}</version></dependency><dependency><groupId>org.apache.tomcat</groupId><artifactId>tomcat-servlet-api</artifactId><version>${tomcat7Version}</version></dependency><dependency><groupId>org.apache.tomcat</groupId><artifactId>tomcat-jsp-api</artifactId><version>${tomcat7Version}</version></dependency><dependency><groupId>org.apache.tomcat</groupId><artifactId>tomcat-jasper</artifactId><version>${tomcat7Version}</version></dependency><dependency><groupId>org.apache.tomcat</groupId><artifactId>tomcat-jasper-el</artifactId><version>${tomcat7Version}</version></dependency><dependency><groupId>org.apache.tomcat</groupId><artifactId>tomcat-el-api</artifactId><version>${tomcat7Version}</version></dependency><dependency><groupId>org.apache.tomcat</groupId><artifactId>tomcat-catalina</artifactId><version>${tomcat7Version}</version></dependency><dependency><groupId>org.apache.tomcat</groupId><artifactId>tomcat-tribes</artifactId><version>${tomcat7Version}</version></dependency><dependency><groupId>org.apache.tomcat</groupId><artifactId>tomcat-catalina-ha</artifactId><version>${tomcat7Version}</version></dependency><dependency><groupId>org.apache.tomcat</groupId><artifactId>tomcat-annotations-api</artifactId><version>${tomcat7Version}</version></dependency></dependencies></plugin></plugins>
</build>

在下一篇文章中,我们将学习如何处理出现在终端java.util.logging这些讨厌的Tomcat内部日志( java.util.logging …)。与此同时,我发现并报告了MTOMCAT-186关闭可执行文件JAR不会调用ServletContextListener.contextDestroyed() –看看这是否适合您。

1 -这可能是一个好主意,用指定不同的目录- extractDirectory与每次重新启动前清理- resetExtract

参考: Java和社区博客中来自JCG合作伙伴 Tomasz Nurkiewicz的具有可执行Tomcat的独立Web应用程序 。

翻译自: https://www.javacodegeeks.com/2012/11/standalone-web-application-with-executable-tomcat.html

tomcat web应用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/350945.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

anaconda在ubuntu中添加环境变量

在ubuntu上安装好anaconda后&#xff0c;如果输入conda命令报错&#xff0c;很有可能需要以下修改注册表&#xff08;相当于windows中将路径添加到系统环境变量&#xff09; ~ /anaconda3/bin为.Sh所在home目录路径 在终端输入&#xff1a;sudo gedit ~/.bashrc 打开注册表后…

webpackjsonp 还原_具有催化CO2还原性能的非贵金属配合物的配体设计

Non-noble metal-based molecular complexes for CO2 reduction: From the ligand design perspectiveDong-Cheng Liu, Di-Chang Zhong, Tong-Bu LuEneryChem, 2, 100034 (2020).DOI: https://doi.org/10.1016/j.enchem.2020.100034全文链接https://www.sciencedirect.com/jour…

【数据库系统概论】第3章-关系数据库标准语言SQL(1)

文章目录 3.1 SQL概述3.2 学生-课程数据库3.3 数据定义3.3.1 数据库定义3.3.2 模式的定义3.3.3 基本表的定义3.3.4 索引的建立与删除3.3.5 数据字典 3.1 SQL概述 动词 分类 三级模式 3.2 学生-课程数据库 3.3 数据定义 3.3.1 数据库定义 创建数据库 tips&#xff1a;[ ]表…

适用于Java开发人员的Elasticsearch教程

课程大纲 Elasticsearch是基于Lucene的搜索引擎。 它提供了具有HTTP Web界面和无模式JSON文档的分布式多租户全文搜索引擎。 Elasticsearch是用Java开发的&#xff0c;并根据Apache许可的条款作为开源发布。 Elasticsearch是最受欢迎的企业搜索引擎&#xff0c;紧随其后的也是基…

shell实战之tomcat看门狗

1、脚本简介 tomcat看门狗&#xff0c;在tomcat进程异常退出时会自动拉起tomcat进程并记录tomcat运行的日志。 1 函数说明&#xff1a; 2 log_info&#xff1a;打印日志的函数&#xff0c;入参为需要在日志中打印的msg 3 start_tom&#xff1a;启动tomcat的函数…

tensorflow tf.train.batch()

tf.train.batch([example, label],batch_sizebatch_size, capacitycapacity) [example, label]表示样本和样本标签&#xff0c;这个可以是一个样本和一个样本标签&#xff0c;batch_size是返回的一个batch样本集的样本个数。capacity是队列中的容量。这主要是按顺序组合成一个b…

苹果6s上市时间_iPhone7的A10处理器还能战多长时间?2-3年不成问题!

iPhone 7采用A10 Fusion处理器&#xff0c;简称A10处理器&#xff0c;在2018年依然是处于高端处理器&#xff0c;再加上苹果自己的系统优化和资源调度&#xff0c;流畅度甚至超过其他安卓835机子。16年上市的iPhone7的A10还能再战多长时间&#xff1f;小编今天来分析一下。A10处…

tf.summary.FileWriter

ummary_waiter tf.summary.FileWriter("log",tf.get_default_graph()) log是事件文件所在的目录&#xff0c;这里是工程目录下的log目录。第二个参数是事件文件要记录的图&#xff0c;也就是tensorflow默认的图。

83998 连接服务器出错_服务端 TCP 连接的 TIME_WAIT 问题分析与解决

民工哥技术之路 写在开头&#xff0c;大概 4 年前&#xff0c;听到运维同学提到 TIME_WAIT 状态的 TCP 连接过多的问题&#xff0c;但是当时没有去细琢磨&#xff1b;最近又听人说起&#xff0c;是一个新手进行压测过程中&#xff0c;遇到的问题&#xff0c;因此&#xff0c;花…

SqlServer 时间格式化

select GETDATE() as 当前日期, DateName(year,GetDate()) as 年,DateName(month,GetDate()) as 月,DateName(day,GetDate()) as 日,DateName(dw,GetDate()) as 星期,DateName(week,GetDate()) as 周数,DateName(hour,GetDate()) as 时,DateName(minute,GetDate()) as 分,DateN…

[EBOOK]十大Java性能问题

有兴趣了解更多吗&#xff1f; 然后&#xff0c;您应该在此处下载相关的电子书。 Java中的大多数性能问题都可以归因于一些根本原因。 当然&#xff0c;偶尔会有一些奇怪的极端情况突然出现&#xff0c;并在应用程序中造成了严重破坏&#xff0c;但是在大多数情况下&#xff0…

请上传sku预览图后重新操作_拼多多商家版APP新增商品操作步骤

① 点击右下角“添加商品”按钮&#xff0c;进入创建商品页面&#xff1b;② 快速创建商品&#xff1a;目前手机版支持快速上传商品啦&#xff1a;仅通过上传商品标题、商品轮播图、商品分类、价格和库存&#xff0c;点击创建按钮&#xff0c;即可快速上传您的第一件店…

消息队列概述[幻灯片]

昨天我发表了一个演讲&#xff0c;涉及使用消息队列的所有方面。 我以前曾写过“您可能不需要消息队列” –现在的结论有些细微差别&#xff0c;但我仍然坚持简单性的观点。 演讲探讨了使用消息队列的各种好处和用例&#xff0c;并讨论了典型“消息队列代理”体系结构的替代方…

tf.reshape()

_image tf.reshape(x, [-1,28, 28, 1]) # -1表示任意数量的样本数,大小为28x28深度为一的张量 # 可以忽略(其实是用深度为28的,28x1的张量,来表示28x28深度为1的张量)

面向对象进阶-反射(二)重要知识点

# 面向对象的进阶# 其他常用模块# 作业 考试题# 网络编程 2天# ftp作业# class A:pass# class B(A):pass# a A()# print(isinstance(a,A))返回true&#xff0c;判断a是不是A的对象# print(issubclass(B,A))返回true&#xff0c;判断B是不是A的子类# print(issubclass(A,B))》…

异步过程的自动化测试

自从我开发了具有异步行为的服务器端应用程序以来已经有一段时间了&#xff0c;该行为还不是事件驱动的系统。 异步行为始终是设计和测试中一个有趣的挑战。 通常&#xff0c;异步行为不应该很难进行单元测试-毕竟&#xff0c;动作的行为不一定必须在时间上进行耦合&#xff08…

iphone以旧换新活动_iPhone第3轮降价背后:销售下滑库克甩锅给中国,国产手机崛起分食蛋糕...

排版 | 王科编辑 | 梁夜作者 | 吴晓宇来源 | 财经天下周刊(ID&#xff1a;cjtxzk)曾经吃掉手机行业9成利润的巨无霸公司苹果&#xff0c;不得不“自降身价”。3月5日之后&#xff0c;苏宁易购、京东、拼多多等多家电商平台纷纷宣布&#xff0c;再次对旗舰级iPhone XS系列产品降…

tf.placeholder()

# x 是手写图像的像素值,y是图像对应的标签 x tf.placeholder(tf.float32, [None,784])y tf.placeholder(tf.float32, [None,10])

Docker 搭建pxc集群 + haproxy + keepalived 高可用(二)

上一节我们有了两个分片的pxc集群&#xff0c;这一节我们接着安装haproxy和keepalived的实现集群的高可用 一、先下载haproxy的镜像 [rootlocalhost ~]# docker pull haproxy二、在host主机上写好配置文件&#xff0c;启动容器时候读取haproxy.cfg&#xff0c;vim /usr/local/d…

.net httpwebrequest 并发慢_go语言并发之MPG模型

请记住go并发的真理&#xff1a;Do not communicate by sharing memory; instead, share memory by communicating.不要以共享内存的方式来通信&#xff0c;相反&#xff0c;要通过通信来共享内存。go语言天生的并发大家都知道&#xff0c;可是go是如何实现轻松的构造上万的协程…