通常将项目分为两层:服务层和表现层(视图层),一般咱们把服务层打包成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就很清楚的了。