WAR (тип файла)

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
Web ARchive
Расширение .war
MIME-тип application/java-archive
Разработчик Sun Microsystems
Тип формата формат файла
Содержит JSP, Java-сервлеты
Расширен из ZIP

Web Archive или Web Application Resource[1] — формат файла, описывающий, как полное веб-приложение упаковывается в соответствии со спецификацией Java-сервлетов в файл в формате JAR или ZIP.[2] Такие файлы имеют расширение «.war» и поэтому называются ещё «WAR-файлами».

Преимущества WAR-файлов:

  • лёгкость разработки, тестирования и развёртывания
  • версию развёрнутого приложения легко идентифицировать
  • Все J2EE-контейнеры поддерживают WAR-файлы

Структура[править | править код]

Следующий пример показывает структуру Web-Архива.

/index.html
/guestbook.jsp
/images/logo.png
/WEB-INF/web.xml
/WEB-INF/classes/org/wikipedia/Util.class
/WEB-INF/classes/org/wikipedia/MainServlet.class
/WEB-INF/lib/util.jar
/META-INF/MANIFEST.MF

Обратите внимание, что в каталоге «WEB-INF» находится так называемый дескриптор развёртывания (Deployment Descriptor) по имени «web.xml», определяющий все сервлеты и другие свойства Web-приложения. Если приложение содержит только JSP-файлы, этот файл не строго обязателен.

Пример дескриптора развёртывания web.xml, демонстрирующий спецификацию сервлетов:

 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE web-app
     PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
     "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
 
 <web-app>
     <servlet>
         <servlet-name>HelloServlet</servlet-name>
         <servlet-class>mypackage.HelloServlet</servlet-class>
     </servlet>
 
     <servlet-mapping>
         <servlet-name>HelloServlet</servlet-name>
         <url-pattern>/HelloServlet</url-pattern>
     </servlet-mapping>
 
     <resource-ref>
         <description>
             Resource reference to a factory for javax.mail.Session
             instances that may be used for sending electronic mail messages,
             preconfigured to connect to the appropriate SMTP server.
         </description>
         <res-ref-name>mail/Session</res-ref-name>
         <res-type>javax.mail.Session</res-type>
         <res-auth>Container</res-auth>
     </resource-ref>
 </web-app>

Каталог /WEB-INF/classes находится в classpath ClassLoader. Эти java-файлы с расширением .class будут загружены, когда веб-приложение загрузится и начнёт выполняться. Любые файлы JAR, находящиеся в каталоге /WEB-INF/lib, также будут помещены в classpath.

Создание[править | править код]

Создать WAR-архив можно:

  • паковщиком, входящим в состав J2EE SDK.
  • Выполнив в Apache Ant задачу «war».
  • Выполнив в Apache Maven команду «mvn clean install».
  • JAR-утилитой, входящей в J2SE. Вы должны только сами позаботиться о том, чтобы структура каталогов вашего приложения соответствовала требуемой для формата WAR. Просто выполните следующую команду в корневом каталоге вашего приложения:
jar cvf archiveName.war .

Применение[править | править код]

Все J2EE-контейнеры поддерживают WAR-файлы.

Чтобы веб-контейнер (веб-сервер) смог прочитать дескриптор развёртывания и начал перенаправлять запросы на данное приложение, необходимо развернуть (deploy) WAR-файл в контейнер. Одним из вариантов выполнения развёртывания является копирование WAR-файла в autodeploy-каталог веб-контейнера.

WAR может быть подписан электронной цифровой подписью так же, как и JAR-файл, чтобы подтвердить аутентичность кода.

Приложения, установленные из WAR-файлов на один сервер, не могут пользоваться ресурсами друг друга, их выполнение изолировано. Однако они могут пользоваться общими библиотеками сервера (например, у Tomcat они расположены в ${catalina.base}/lib), но такие библиотеки с помощью war-файла установлены быть не могут.

Примечания[править | править код]

  1. Apache Tomcat 9 - Tomcat Web Application Deployment. Дата обращения: 2 июня 2019. Архивировано 2 июня 2019 года.
  2. Danny Coward, Yutaka Yoshida: Java™ Servlet Specification, Version 2.4. Архивировано 7 января 2010 года. 24. November 2003

См. также[править | править код]