文件格式分析 --- 最小war
在格式上,WAR和JAR实际上是完全相同的,它们都是基于ZIP格式的压缩文件。两者的主要区别仅在于扩展名(.war vs .jar)和内部目录结构的约定。
WAR和JAR的主要区别如下:
-
用途不同:
- JAR (Java Archive):用于打包普通的Java应用程序,包含Java类文件、资源文件和元数据
- WAR (Web Archive):专门用于打包Web应用程序,包含Web资源、Servlet、JSP、HTML、JavaScript等
-
目录结构不同:
-
JAR文件:没有严格的目录结构要求,通常只需要包含:
META-INF/ MANIFEST.MF com/ example/ *.class
-
WAR文件:必须遵循固定的Web应用目录结构:
WEB-INF/ web.xml # Web应用配置文件 classes/ # Java类文件 lib/ # 依赖的JAR包 META-INF/ MANIFEST.MF index.html # Web资源文件 *.jsp, *.html等 # 其他Web资源
-
-
部署方式不同:
- JAR文件:通常通过Java命令直接运行:
- WAR文件:需要部署到Web服务器(如Tomcat)中运行:将war文件放入 目录
-
应用场景不同:
- JAR:
- 命令行应用
- 桌面应用
- 库文件
- 可执行的独立应用
- WAR:
- Web应用
- 需要处理HTTP请求的应用
- 需要Web容器支持的应用
- JAR:
-
依赖处理:
- JAR:依赖通常在MANIFEST.MF中声明或使用类路径
- WAR:依赖JAR文件必须放在 目录下
-
访问方式:
- JAR:通常通过main方法或API调用
- WAR:通过HTTP请求访问,如:
就像我们刚才的例子:
- 我们创建了一个WAR文件,包含:
hello.war ├── WEB-INF/ │ ├── web.xml # 配置Servlet映射 │ ├── classes/ │ │ └── com/example/ │ │ └── HelloServlet.class # Servlet类 │ └── lib/ │ └── servlet-api.jar # 依赖 └── index.html # 欢迎页面
- 将其部署到Tomcat的webapps目录
- 通过 访问
如果这是一个普通的Java应用(JAR),我们就不需要web.xml,也不需要遵循这种目录结构,只需要包含必要的类文件和依赖即可。