关于 springboot 项目的 jar 和 war 两种打包方式部署的区别?

2018-12-14 12:30:36 +08:00
 gransh
1.我的一个 springboot 项目,用 mvn install 打包成 jar,换一台有 jdk 的机器就直接可以用 java -jar 项目名.jar 的方式运行,没任何问题,为什么这里不需要 tomcat 也可以运行了?

2.然后我打包成 war 放进 tomcat 运行,发现端口号变成 tomcat 默认的 8080 (我在 server.port 中设置端口 8090 )项目名称也必须加上了。
也就是说我在原来的机器的 IDEA 中运行,项目接口地址为 ip:8090/listall,打包放进另一台机器的 tomcat 就变成了 ip:8080/项目名 /listall。这又是为什么呢?
7542 次点击
所在节点    Java
27 条回复
svt
2018-12-15 11:40:00 +08:00
借楼一问,,java 的项目,,,除了 tomcat 可以跑以外,还有别的什么的东西能跑 Java 的项目吗????
qq515391365
2018-12-15 17:06:25 +08:00
@svt jetty
themis
2018-12-15 21:56:58 +08:00
@svt jetty, jboss, undertow, weblogic etc...
abcbuzhiming
2018-12-17 23:53:53 +08:00
@svt jetty,Jboss,。建议你去理解一下 servlet 容器服务器的概念,只要实现了 servlet 容器的服务器都能跑基于 servlet 的 java web 程序
abcbuzhiming
2018-12-17 23:54:38 +08:00
@catinred 其实你说的也不对,你一样可以 java -jar war 的方式跑起来,你可以去看看 jenkins。人家就是这么玩的
abcbuzhiming
2018-12-18 00:08:03 +08:00
哎,现在学编程的基本都不会教历史了,也没人有兴趣去钻研。总体来说吧,很多年前,Sun 还在世的那个年代,在度过了早期用 C++写 Html 解析器的蛮荒时期后,有一批最早的脚本程序进入了 cgi 时代,此时的 Sun 决定进军这个领域,为了以示区别并显得自己高大上,于是研发了 servlet 标准,搞出了最早的 jsp。并给自己起了个高大上的称号 JavaEE ( Java 企业级应用标准,我呸,不就是一堆服务器以 http 提供服务吗,吹逼)。既然是企业级标准那自然得有自己的服务器标准。于是 Servlet 标准诞生,以此标准实现的服务器称为 Servle 容器服务器,Tomcat 就是其中代表,被 Sun 捐献给了 Apache 基金会,那个时候的 Web 服务器还是个高大上的概念,当时的 Java Web 程序的标准就是 War 包(其实就是个 Zip 包),这就是 War 包的由来。后来随着服务器领域的屡次进化,人们发现我们为什么要这么笨重的 Web 服务器,还要实现一大堆 Servlet 之外的管理功能,简化一下抽出核心概念 servlet 不是更好吗,最早这么干的似乎是 Jetty,出现了可以内嵌的 Servelet 服务器。去掉了一大堆非核心功能。后来 tomcat 也跟进了,再后来,本来很笨重的传统 JavaEE 服务器 Jboss 也搞了个 undertow 来凑热闹。正好这个时候微服务的概念兴起,“ use Jar,not War ”。要求淘汰传统 Servlet 服务器的呼声就起来了
catinred
2018-12-18 13:32:35 +08:00
@abcbuzhiming 这样的操作还是第一次听说

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/517503

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX