← Назад к вопросам

Для чего нужен war?

1.0 Junior🔥 141 комментариев
#Основы Java

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

# WAR (Web Application Archive)

Определение

WAR (Web Application Archive) — это стандартный формат упаковки веб-приложений на Java для развёртывания на сервере приложений (application server).

Основное назначение

1. Структурированная упаковка

WAR-файл содержит всё необходимое для работы веб-приложения:

  • Java-классы (WEB-INF/classes)
  • JAR-зависимости (WEB-INF/lib)
  • Статические ресурсы (HTML, CSS, JavaScript, изображения)
  • Конфигурационные файлы (web.xml, конфиги приложения)
  • JSP-страницы

2. Стандартизация

WAR — это ZIP-архив со строгой структурой, которую понимают все Java-серверы:

app.war/
├── WEB-INF/
│   ├── classes/        // скомпилированные классы
│   ├── lib/           // JAR-зависимости
│   └── web.xml        // дескриптор развёртывания
├── META-INF/
├── index.jsp          // JSP-страницы
└── css/, js/, img/    // статические ресурсы

3. Развёртывание на серверах приложений

WAR идеален для развёртывания на:

  • Apache Tomcat — просто скопировать в папку webapps/
  • JBoss/WildFly — поддержка горячего развёртывания
  • Jetty, WebLogic, WebSphere
  • Облачные платформы (AWS, Google Cloud)

Пример развёртывания:

# Tomcat автоматически развернёт приложение из war-файла
cp application.war /opt/tomcat/webapps/
# Сервер самостоятельно создаст директорию application/ и распакует файл

4. Контроль жизненного цикла

Файл web.xml определяет:

  • Точки входа (servlets)
  • Фильтры (filters)
  • Listeners
  • Сессионные параметры
  • Security constraints

Пример:

<web-app>
  <servlet>
    <servlet-name>MainServlet</servlet-name>
    <servlet-class>com.example.MainServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>MainServlet</servlet-name>
    <url-pattern>/api/*</url-pattern>
  </servlet-mapping>
</web-app>

5. Изоляция и безопасность

  • Каждый WAR запускается в отдельном контексте приложения
  • Классы из разных WAR не пересекаются (отдельные ClassLoaders)
  • Изоляция данных и сессий между приложениями

WAR vs JAR

ПараметрWARJAR
НазначениеВеб-приложенияБиблиотеки, микросервисы
СтруктураСтрогая, со статикойГибкая
ЗапускНа сервере приложенийКак java -jar
СтатикаВстроена в архивНе предусмотрена
СовременностьУстаревает (Spring Boot)В тренде (микросервисы)

Современная альтернатива

В эпоху Spring Boot WAR стал менее актуален. Spring Boot проекты часто упаковываются как:

<packaging>jar</packaging>

и содержат встроенный Tomcat:

public class Application {
  public static void main(String[] args) {
    SpringApplication.run(Application.class, args);
    // Создаёт встроенный Tomcat автоматически
  }
}

Однако WAR остаётся полезным для:

  • Legacy приложений
  • Корпоративных решений (JBoss, WebLogic)
  • Когда нужна максимальная совместимость с серверами

Выводы

WAR — это стандартный контейнер для Java веб-приложений, обеспечивающий стандартизированное, безопасное развёртывание на серверах приложений. Хотя Spring Boot сместил WAR на второй план, понимание его структуры и назначения остаётся важным для работы с корпоративной Java-архитектурой.