战争文件结构

每个 Web 应用程序在上传到 Web 服务器时都被打包到一个 .war 文件中。WAR 现在代表 Web Application Resources,尽管它以前是 Web ARchive。事实上,这是一个包含打包 Web 应用程序的 zip 存档。

war 文件的典型内容如下所示:

/index.html
/guestbook.jsp
/images/logo.png
/js/jquery.js
/WEB-INF/web.xml
/WEB-INF/classes/com/codegym/Util.class
/WEB-INF/classes/com/codegym/MainServlet.class
/WEB-INF/classes/application.properties
/WEB-INF/lib/util.jar
/META-INF/MANIFEST.MF

war文件里面是.html、.css、.js文件等静态web资源。也可以有图片、视频和一般的任何文件。它们可以位于根目录或子文件夹中,这无关紧要。如果需要,Tomcat 将简单地提供它们。

假设您的 Web 应用程序以名称 apple 加载到 Web 服务器上,然后当请求http://localhost/apple/images/logo.png时,Tomcat 将返回文件/images/logo.png

另外,值得注意的是WEB-INF 文件夹。它旨在将 Java 代码存储在其中。Tomcat不会给出其内容。

/WEB-INF/类/ 已编译的非 JAR Java 类的目录,包括运行应用程序之前加载器所需的 servlet 类和资源文件
/WEB-INF/lib/ 存放jar库的地方
/WEB-INF/web.xml 部署描述符

war文件结构和maven项目

现在让我们转到 Maven 项目的目录层次结构。您可以在官方手册中看到完整的目录布局。在这里,我们将以略微简化的版本熟悉它,不包括测试资源。因此,标准的 Maven 目录层次结构如下所示:

源码/主/java 根据普遍接受的包层次结构的应用程序类和库的源代码
源代码/主要/资源 应用程序资源文件:数据库设置、本地化文件等。
源代码/主/网络应用程序 Web 应用程序资源(JSP 文件、文本文件、脚本等)

如您所见,它与您所知道的 WAR 文件的结构有很大不同。但编译 Web 应用程序时实际发生的只是将文件移动和连接到 Java EE 规范中定义的结构中。

src/main/webapp目录定义了 Web 应用程序的上下文根(当部署到服务器时,上下文根与 WAR 文件的名称相同)并且其中已经包含 WEB-INF 目录。即src/main/webapp的内容全部转移到 web application 中。

您所有的 Java 类都被编译成类文件,并在保持其包结构的情况下被移动到/WEB-INF/classes/目录中。我们上面定义的 Maven pom.xml 依赖项中定义的包含库的 JAR 被移动到/WEB-INF/lib/目录。

应用程序资源src/main/resources被移动到应用程序的类路径,特别是相同的/WEB-INF/classes/目录。

为了完全清楚,请查看此图,这将帮助您了解构建项目时的方式和内容:

war文件设备