首页 - 信息 - SpringBoot打包部署时打包成jar和war有什么区别?

SpringBoot打包部署时打包成jar和war有什么区别?

2023-10-08 07:41

首先给大家说一下我们遇到的一个奇怪的问题:

  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。这就是为什么?

  • 通过jar运行实际上是启动内置的tomcat,所以使用应用配置文件中的端口

  • 直接部署到tomcat后,内置的tomcat将不会启用,所以相关配置基于安装的tomcat,与应用配置文件无关

哎,现在学编程的人大多都不知道怎么教历史,也没人有兴趣去研究历史。

一般来说,很多年前,Sun还活着的时候,在经历了用C++编写Html解析器的野蛮时期之后,一批最早的脚本程序进入了cgi时代。这时,孙本人决定进入这个领域。为了脱颖而出,显得高人一等,我制定了servlet标准,并创建了最早的jsp。并给自己起了一个崇高的称号JavaEE(Java企业级应用标准,其实不就是一堆通过http提供服务的服务器吗,吹牛)。

既然是企业级标准,自然就有自己的服务器标准。于是Servlet标准诞生了,通过这个标准实现的服务器称为Servle容器服务器。 Tomcat就是其中的代表之一,由Sun公司捐赠给Apache基金会。当时,Web 服务器还是一个高层概念,而当时 Java Web 程序的标准是 War 包(实际上是 Zip 包)。这就是War包的由来。

后来,随着服务器领域的反复演进,人们发现为什么我们需要这么庞大的Web服务器,并实现很多Servlet以外的管理功能。简化并提取servlet的核心概念不是更好吗?这是首先要做的事情 Jetty 好像有一个可以嵌入的 Servlet 服务器。

很多非核心功能已被删除。后来tomcat也跟着效仿,再后来原本很笨重的传统JavaEE服务器Jboss也建了个undertow来凑热闹。就在这个时候,微服务的概念出现了,“使用Jar,而不是War”。有人呼吁消除传统的 Servlet 服务器。

jar包和war包的区别

1。 War是一个Web模块,需要包含WEB-INF,这是一个可以直接运行的WEB模块; jar一般只包含一些class文件,声明Main_class后可以用java命令运行。

2。 war包是一个Web应用程序,通常是一个网站,被打包部署到容器中; jar包通常是指开发过程中常用的类,为了便于存储和管理而进行打包。

3。 War是Sun提出的一种Web应用格式,也是很多文件的压缩包。该包中的文件是按照一定的目录结构组织的; classes目录包含编译好的Servlet类和Jsp或者Servlet依赖的其他类(如JavaBean),可以打包成jar放在WEB-INF下的lib目录下。

JAR 文件格式基于流行的 ZIP 文件格式。与ZIP文件不同,JAR文件不仅用于压缩和分发,还用于库、组件和插件的部署和打包,并且可以直接被编译器、JVM等工具使用。

【格式特点】:
  • 「安全」 您可以对 JAR 文件的内容进行数字签名。这样,识别签名的工具就可以选择性地授予您其他文件无法提供的软件安全权限,并且还可以检测代码是否已被篡改。

  • 「减少下载时间」 如果将 applet 捆绑到 JAR 文件中,则浏览器可以在一个 HTTP 事务中下载 applet 的类文件和相关资源,而不是为每个文件打开一个。新连接。

  • 「压缩」 JAR 格式允许您压缩文件以提高存储效率。

  • 「传输平台扩展」 Java 扩展框架提供了向 Java 核心平台添加功能的方法。这些扩展被打包在 JAR 文件中(Java 3D 和 JavaMail 是 Sun 开发的扩展的示例)。