關(guān)于jar包與war包的區(qū)別及說明
1. jar 包
JAR(Java Archive),是與平臺無關(guān)的文件格式。
它允許將多個文件組合成要給壓縮文件。
其實可以對比一下:jar
與 rar
,j 可以理解成 java。
jar 包其實就是 java 項目壓縮包,是通過 java 程序壓縮產(chǎn)生的壓縮包。
jar 包是通過 JavaSE 程序打成的包。
jar 與 zip 異同
jar
文件格式以流行的
zip
文件格式為基礎(chǔ)。
同:jar
、zip
用于壓縮和發(fā)布異:jar
還用于
- 部署
- 封裝庫、組件、插件程序
- 可被編譯器、jvm 等工具直接使用
另外 jar 包還含有特殊的文件,如 manifest 和部署描述符,用來指示工具如何處理特定的 jar。
jar 包目錄結(jié)構(gòu)如下:
根目錄 | |---- 該包的 java 類文件目錄 | |---- META-INF 目錄 // 存放該包和擴展的配置數(shù)據(jù)
jar 包主要用途
在 jar 包中包含已經(jīng)寫好的一些類,這些類打包到一起便于存放管理。
將 jar 包引入到自己的項目中,就可以直接使用這些 jar 包中的類和屬性(從前這些 jar 包都會被扔到 lib/
目錄下)。
2. war 包
war 包就是 web 項目壓縮包。war 是一個可以直接運行的 web 模塊,一個 war 包可以理解成就是一個 web 項目,通常用于網(wǎng)站,打成包部署到容器(如 tomcat)中。
以 Tomcat 為例,war 包放置在其\webapps\
目錄下,然后啟動 Tomcat,這個包就會自動解壓,就相當(dāng)于發(fā)布了。
war 包是 Sun 公司提出的一種 web 應(yīng)用程序格式,與 jar 類似,也是很多文件的壓縮包。
war 包是 JavaWeb 程序打的包。,包含了項目的所有東西,包括:
- 代碼編譯成的 class 文件
- 依賴包
- 配置文件
- 網(wǎng)站頁面(html、jsp、servlet、圖片文件等)
war 包中文件按照一定目錄結(jié)構(gòu)來組織。
根目錄 | |---- .html、.jsp (或包含這兩種文件的目錄) | |---- WEB-INF 目錄 // 存放 .class 文件和配置文件 | | | |---- web.xml // 該應(yīng)用的配置文件 | | | |---- classes 目錄 | | | | | |---- 編譯好的 servlet 類和 js | | | | | |---- servlet 所依賴的其他類(如 JavaBean) | |----- lib // 存放該包的依賴 jar 包 | |---- META-INF 目錄 // 存放該包和擴展的配置數(shù)據(jù)
其中,servlet 所依賴的類也可以打包成 jar 包放在 WEB-INF
下的lib
目錄下。
war 包部署優(yōu)勢
一個 Web 應(yīng)用程序的目錄和文件可能會非常多,將這個 Web 應(yīng)用程序部署到另一臺機器上,會不太方便,因此,可以將這個 Web 應(yīng)用程序打包成 Web 歸檔文件(war),過程和把 java 類文件打包成 jar 相似。
利用 war 文件,可以把 servlet 類文件和相關(guān)的資源集中在一起進行發(fā)布。
這樣一來,Web 應(yīng)用程序不再是按照目錄層次結(jié)構(gòu)來進行部署,而是把 war 文件作為部署單元來使用。
開發(fā)階段不適合使用 war 的原因
開發(fā)階段經(jīng)常需要添加或刪除 web 應(yīng)用程序的內(nèi)容、更新 Servlet 類文件,而每一次改動后,重新建立 war 包將很浪費時間。
在開發(fā)階段,我們通常將Servlet源文件放到Web應(yīng)用程序目錄的 src 子目錄下,以便和Web資源文件區(qū)分。在建立 war 文件時,只需要將 src 目錄從 Web 應(yīng)用程序目錄中移走,就可以打包了。
在產(chǎn)品發(fā)布階段,使用 war 包比較合適,因為這個時候,幾乎不需要再做什么改動了。
部署 war 包到 tomcat
1.開發(fā)人員打 war 包給測試,現(xiàn)在測試拿到一個 war 包:test.war
2.打開 tomcat 的安裝路徑 ,假設(shè)是D:\Tomcat\apache-tomcat-7.0.68
,然后進入到 webapps 文件夾中,把 test.war 放到 webapps 文件夾。
3.啟動Tomcat
如果不需要更改配置文件:到這一步就可以了。
在瀏覽器輸入
http://localhost:tomcat_port/test
即可打開 test 項目的 index.jsp 頁面( tomcat_port 是自己的端口號)。如果 test 項目沒有 index.jsp 頁面,那就需要打開其他相應(yīng)的頁面。
如果需要更改配置文件:
4.關(guān)閉 tomcat。
5.刪除 test.war文件(因為 tomcat 啟動后會自動解壓 test.war,如果在 tomcat 啟動的狀態(tài)下去刪除 war 包,解壓好的文件夾也會被一并刪除,所以需要停止 tomcat, 然后刪掉 war 包,之后再啟動。項目文件夾就不會被認為是 war 解壓而來的)。
6.由于剛剛啟動過 tomcat,tomcat會自動解壓縮 test.war 為 test 文件夾。所以我們在 webapps 下面可以看到 test 文件夾。打開 test 文件夾更改配置文件即可。
7.更新完配置之后,啟動 tomcat。
8.瀏覽器打開即可。
3. jar 包 vs. war 包
jar 包 | war 包 | |
---|---|---|
定位 | 類的歸檔文件 | web 應(yīng)用程序/ Web 歸檔文件 |
查看內(nèi)容方式 | WinRaR 可以直接打開 | 需要先把后綴名改為.rar,再用 WinRaR 打開;或者保留后綴名不變,手動選擇打開方式時,手動選出 WinRaR.exe(推薦打開方式中不能自動識別 WinRaR) |
內(nèi)容 | java類、配置文件 | Servlet、html頁面、java類、圖像文件以及組成 web 應(yīng)用程序的其他資源 |
目錄結(jié)構(gòu) | META-INF目錄:存放包和擴展的配置數(shù)據(jù),如:安全性、版本信息 | WEB-INF目錄:存放 .class 文件和配置文件;META-INF目錄:存放包和擴展的配置數(shù)據(jù),如:安全性、版本信息 |
應(yīng)用 | 部署、封裝庫、組件和插件程序 | 部署/發(fā)布 |
部署項目區(qū)別 | SpringBoot項目(因為SpringBoot 內(nèi)置了 tomcat) | Spring項目 |
SpringBoot 打包方式區(qū)別
其實 SpringBoot 項目既可以打成 jar 包,也可以打成 war 包發(fā)布。
打成 jar 包 | 打成 war 包 | |
---|---|---|
運行 | 直接通過內(nèi)置 tomcat 運行 | 需要安裝 tomcat(可以靈活選擇 tomcat 版本),然后將 war 包放到 tomcat 的 webapps/ 目錄下 |
tomcat 配置變更 | 在 SpringBoot 的配置文件中設(shè)置 | 直接對 tomcat 配置修改 |
日志 | 內(nèi)置 tomcat 沒有日志輸出,得靠 jar 包應(yīng)用輸出日志 | tomcat 有自己的日志輸出 |
SpringBoot 適宜打成 war 包的場景
SpringBoot 打成的 jar 包自帶 tomcat 容器,適用于單個項目。
但若要把多個項目部署到同一個 tomcat 容器上,則需要分別打成 war 包。
再將多個 war 包部署到同一個 tomcat 容器上,以達到節(jié)省資源目的。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
使用Spring注解@EventListener實現(xiàn)監(jiān)聽原理
這篇文章主要介紹了使用Spring注解@EventListener實現(xiàn)監(jiān)聽原理,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-08-08Java8中forEach語句循環(huán)一個List和Map
這篇文章主要給大家介紹了關(guān)于Java8中forEach語句循環(huán)一個List和Map的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02關(guān)于MyBatis通用Mapper@Table注解使用的注意點
這篇文章主要介紹了關(guān)于MyBatis通用Mapper@Table注解使用的注意點,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-11-11mybatisPlus 實體類與數(shù)據(jù)庫表映射關(guān)系詳解
這篇文章主要介紹了mybatisPlus 實體類與數(shù)據(jù)庫表映射關(guān)系詳解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教。2022-01-01java的springboot實現(xiàn)將base64編碼轉(zhuǎn)換pdf
在Spring Boot中,將Base64編碼的字符串轉(zhuǎn)換為PDF文件并導(dǎo)出到客戶端,通常涉及幾個步驟:首先將Base64字符串解碼為字節(jié)數(shù)組,然后使用這些字節(jié)數(shù)據(jù)來創(chuàng)建PDF文件,并最終通過HTTP響應(yīng)將其發(fā)送給客戶端2024-08-08