Java EAR和WAR的概念及用法

引言

在Java开发中,我们经常听到EAR和WAR这两个名词。它们是Java企业级应用程序的打包和部署方式。本文将详细介绍EAR和WAR的概念、用法以及示例代码。

EAR和WAR的概念

  • EAR(Enterprise Archive)是一种Java企业级应用程序的打包格式,它包含一个或多个WAR文件、EJB(Enterprise JavaBeans)模块、JAR(Java Archive)文件以及其他资源文件。EAR文件采用ZIP格式,扩展名为.ear。
  • WAR(Web Archive)是一种Java Web应用程序的打包格式,它包含Web应用程序的所有资源,例如HTML、CSS、JavaScript、JSP等文件。WAR文件同样采用ZIP格式,扩展名为.war。

EAR和WAR的用途

  • EAR文件用于打包和部署Java企业级应用程序。它可以包含多个WAR文件,用于部署多个独立的Web应用。
  • WAR文件用于打包和部署Java Web应用程序。它是一种轻量级的打包格式,方便在Web服务器上部署和发布。

EAR和WAR的示例代码

下面是一个使用Maven构建EAR和WAR的示例项目结构:

.
├── ear-example
│   ├── pom.xml
│   └── src
│       └── main
│           └── application
│               └── META-INF
│                   └── application.xml
└── war-example
    ├── pom.xml
    └── src
        └── main
            ├── java
            │   └── com
            │       └── example
            │           └── HelloServlet.java
            ├── resources
            └── webapp
                ├── WEB-INF
                │   └── web.xml
                └── index.jsp

ear-example/pom.xml

<project>
    <modelVersion>4.0.0</modelVersion>
    <packaging>ear</packaging>
    <groupId>com.example</groupId>
    <artifactId>ear-example</artifactId>
    <version>1.0.0</version>
    <dependencies>
        <dependency>
            <groupId>com.example</groupId>
            <artifactId>war-example</artifactId>
            <version>1.0.0</version>
            <type>war</type>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-ear-plugin</artifactId>
                <version>3.1.2</version>
                <configuration>
                    <modules>
                        <webModule>
                            <groupId>com.example</groupId>
                            <artifactId>war-example</artifactId>
                            <contextRoot>/war-example</contextRoot>
                        </webModule>
                    </modules>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

war-example/pom.xml

<project>
    <modelVersion>4.0.0</modelVersion>
    <packaging>war</packaging>
    <groupId>com.example</groupId>
    <artifactId>war-example</artifactId>
    <version>1.0.0</version>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>3.3.0</version>
            </plugin>
        </plugins>
    </build>
</project>

HelloServlet.java

package com.example;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

public class HelloServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out.println("<html>");
        out.println("<body>");
        out.println("Hello, World!");
        out.println("</body>");
        out.println("</html>");
    }
}

web.xml

<web-app>
    <servlet>
        <servlet-name>HelloServlet</servlet-name>
        <servlet-class>com.example.HelloServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>HelloServlet</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>
</web-app>

application.xml

<application xmlns="