1. jar包
jar包全程JAVA Archive,中文名叫java归档文件,这是一种与平台无关的文件格式,它允许将许多文件组合成一个压缩文件。
(jar包就是一种压缩文件,甚至jar这个单词就有罐子的意思,实际上jar包采用的也是zip的压缩方式,只不过将文件后缀定义为jar)。
jar包是通过JAVASE程序打成的包。
Jar与zip异同
jar文件格式以流行的zip文件格式为基础
相同点:jar、zip都用于压缩和发布
不同点:jar还用于
- 部署
- 封装、组件、插件程序
- 可被编译器、JVM等工具直接使用
简单的讲,zip只是将代码文件压缩,打jar包不仅是文件压缩,还将代码中的类进行打包,这样就可以让别人直接进行引入调用了。
jar包目录结构
jar包主要用途:
在jar包中包含已经写好的一些类,这些类,打包到一起便于存放管理。将jar包引入到自己的项目中,就可以引入到自己的项目中,可以直接使用这些jar包中的类和属性(从前这些jar包会被扔到lib/目录下)
2. war包
war包就是web项目压缩包。war是一个可以直接运行的web模块,一个war包可以理解成就是一个web项目,通常用于网站,打成包部署到容器(如tomcat)中。
以Tomcat为例,war包放置在\webapps\目录下,然后启动Tomcat,这个包就会自动解压,相当于发布了。
war包是sun公司提出的一种web应用程序格式,与jar类相似,也是很多文件的压缩包。
war包是javaWeb程序打的包。包含了项目的所有东西,包括:
- 代码编译成的class文件
- 依赖包
- 配置文件
- 网站页面(html、jsp、servlet、图片文件等)
war包文件按照一定目录结构来组织:
根目录
|
|---- .html、.jsp (或包含这两种文件的目录)
|
|---- WEB-INF 目录 // 存放 .class 文件和配置文件
| |
| |---- web.xml // 该应用的配置文件
| |
| |---- classes 目录
| | |
| | |---- 编译好的 servlet 类和 js
| | |
| | |---- servlet 所依赖的其他类(如 JavaBean)
| |----- lib // 存放该包的依赖 jar 包
|
|---- META-INF 目录 // 存放该包和扩展的配置数据
servlet所依赖的类,也可以打包成jar包放在WEB-INF下的lib目录下
war包部署优势
一个Web应用程序的目录和文件可能会非常多,将这个web应用程序部署到另一台机器上,会不太方便,因此,可以将这个web应用程序打包成Web归档文件(war),这个过程和把java 类文件打包成jar相似。
利用war文件,可以把servlet类文件和相关资源集中在一起进行发布
这样一来,web应用程序不再是按照目录层次结构来进行部署,而是把war文件作为部署单元来使用。
开发阶段不适合使用war的原因
开发阶段经常需要添加或删除web应用程序的内容,更新servlet类文件,而每一次改动后,重新建立war包将浪费时间。
在开发截断能,我们通常将servlet源文件放在web应用程序目录的src子目录下,以便和web资源文件区分。
在建立war文件时,只需要将src目录从web应用程序目录移走,就可以打包了。
部署war包到tomcat
- 开发人员大war包给测试,现在测试拿到一个war包:test.war
- 打开tomcat的安装路径, 假设是D:\Tomcat\apache-tomcat-7.0.68,然后进入到 webapps 文件夹中,把 test.war 放到 webapps 文件夹。
- 启动tomcat
如果不需要更改配置文件:到这一步就ok了
在浏览器输入
http://localhost:tomcat_port/test
即可打开test项目的index.jsp页面(tomcat_port是自己的端口号)
如果需要更改配置文件:
- 关闭tomcat
- 删除test.war文件
因为tomcat启动后会自动解压test.war,如果在tomcat启动的状态下去删除war包,解压好的文件夹也会被一并删除,所以需要停止tomcat,然后删除war包,之后再启动,项目文件文件夹就不会被认为是war解压而来的。
- 由于刚刚启动过tomcat,tomcat会自动解压test.war为test文件夹。所以我们在webapps下面可以看到test文件夹。打开test文件夹更改配置文件即可。
- 更新完配置之后,启动tomcat。
- 浏览器打开即可
3. jar包和war包的区别
Springboot打包方式区别
SpringBoot适宜打成war包的场景
Springboot打成的jar包自带tomcat容器,适用于单个项目
但是若要把多个项目部署到同一个tomacat容器上,则需要分别打成war包,再将多个war包部署到一个tomcat容器上,以达到节省资源目的。