Что такое WAR-файл в Java?

«Что такое WAR-файл в Java?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

WAR (Web Application Archive) — это стандартный архивный формат (JAR-файл со специальной структурой) для упаковки и развертывания веб-приложений в Java EE/Jakarta EE.

Структура WAR-файла:

myapp.war
├── index.html, welcome.jsp      # Веб-ресурсы (HTML, JSP, CSS, JS, изображения)
├── WEB-INF/
│   ├── web.xml                  # Дескриптор развертывания (конфигурация)
│   ├── classes/                 # Компилированные Java-классы (сервлеты, фильтры)
│   └── lib/                     # Библиотеки зависимостей (JAR-файлы)
└── META-INF/                    # Метаданные архива

Ключевые особенности:

  • Стандартизация: Единый формат для всех серверов приложений (Tomcat, Jetty, WildFly).
  • Самостоятельность: Содержит все необходимое для работы приложения (кроме самого сервера и JRE).
  • Дескриптор развертывания: Файл web.xml (или аннотации) определяет сервлеты, фильтры, параметры.

Пример конфигурации Maven для сборки WAR:

<project>
    <packaging>war</packaging>
    <dependencies>
        <!-- Зависимость для сервлетов (предоставляется сервером) -->
        <dependency>
            <groupId>jakarta.servlet</groupId>
            <artifactId>jakarta.servlet-api</artifactId>
            <version>6.0.0</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>
</project>

Почему WAR? Он обеспечивает портативность и упрощает процесс развертывания — достаточно скопировать один файл на сервер. В современных подходах (например, Spring Boot) часто используется встроенный сервер и упаковка в исполняемый JAR, но WAR остается стандартом для традиционного развертывания на внешних серверах.