首先看一下他们的区别:
JAR:(扩展名为. Jar,Java Application Archive)包含Java类的普通库、资源(resources)、辅助文件(auxiliary files)等。
WAR:(扩展名为.War,Web Application Archive)包含全部Web应用程序。在这种情形下,一个Web应用程序被定义为单独的一组文件、类和资源,用户可以对jar文件进行封装,并把它作为小型服务程序(servlet)来访问。
参考:http://blog.csdn.net/mashengwang/article/details/6105189。
基于Java的Web应用,其标准打包方式是WAR。WAR和JAR类似,只不过它可以包含更多的内容,如JSP文件、Servlet、Java类、web.xml配置文件、依赖JAR包、静态web资源(如HTML、CSS、JavaScript文件等)。
一个WAR包下至少包含两个子目录:META-INF和WEB-INF。下图为用winrar打开的一个WAR包。
前者包含了一些打包元数据信息,我们一般不用关心;后者是WAR包的核心,WEB-INF下必须包含一个Web资源表述文件web.xml,它的子目录classes包含所有该Web项目的类,而另一个子目录lib则包含所有该Web项目的依赖JAR包,classes和lib目录都会在运行的时候被加入到Classpath中。
当然,除了META-INF和WEB-INF,一般的WAR包还会包含很多Web资源,只不过我上面这个工程里没有,如可以在WAR根目录下看见很多html或jsp文件,此外还会有一些img、css、js等类似的文件夹,它们会包含对应的文件供页面使用。