通常將項目分爲兩層:服務層和表現層(視圖層),一般咱們把服務層打包成jar,而把視圖層的包打成war包。css
仔細對比能夠發現:html
jar包中包含了你寫程序的全部服務或者第三方類庫,它一般是做爲幕後工做者,爲視圖層用戶與之交換數據處理的一個服務者,jar文件格式以Zip文件格式爲基礎,與Zip不一樣的是,它能夠被髮布,並且還能用於部署,它封裝了庫、組件和插件程序,而且能夠被編譯器和jvm使用,在jar中還包含特殊的文件,如mainfests和部署的應用描述,用於指示工具如何處理特定的jar。
前端
war文件能夠當作一個web應用程序。與jar封裝不一樣的是:它內聚了不少頁面,如html、jsp,Servlet,js,css,icon圖片文件等等,固然還包括組成web應用的其餘組件,這些文件基本沒有複雜業務邏輯的處理,基本上僅僅是用來當作程序的門戶負責與使用者交互而已。java
這樣作的好處是:web
第一,這樣作使代碼的井井有條,先後端分離;spring
第二,便於劃清先後端的職責,加快開發進度而且利於維護;後端
第三,那就是對於靠後期維護的項目來講,好比業務複雜多變而又瑣碎的項目,若是僅僅是改變前端的樣式或者進行調整,我沒必要把服務也關掉,只須要停掉web,作完修改後可以立刻部署上線,針對寫過的項目來講,直接調用接口給到的返回結果能夠根據須要只在頁面進行調用就可以顯示,而服務端代碼一點都不須要變化,極大方便了開發。(使用了springboot後,項目都會被打包成jar,或者打包成war部署在外部容器中也能夠)tomcat
從內部看:springboot
war包中的目錄結構中包括WEB-INF,而war是一個能夠直接運行的web模塊,作好一個web項目後,須要打包部署到容器中,通常放置在tomcat的\webapps\目錄下,當啓動tomcat時,這個包將被解壓,即至關於發佈了。app
而jar中通常都是些class文件,聲明瞭Main_cass後就能夠用java命令去運行它。
全部的包都是用jar打的,只不過目標文件的擴展名不同。與jar相似,war也是許多文件的一個壓縮包。這個包中的文件按必定目錄結構來組織:一般其根目錄下包含以前所說的有Html和Jsp文件或者包含這兩種文件的目錄,另外還會有一個WEB-INF目錄,一般在WEB-INF目錄下有一個web.xml文件和一個classes目錄,web.xml是這個應用的配置文件,而classes目錄下則包含編譯好的Servlet類和Jsp或Servlet所依賴的其它類(如JavaBean)。一般這些所依賴的類也能夠打包成JAR放到WEB-INF下的lib目錄下,固然也能夠放到系統的CLASSPATH中,但那樣移植和管理起來不方便。
因此項目打包什麼狀況下使用war,什麼狀況下使用jar就很清楚的了。