Настройка и описание web.xml в приложении с Spring и JSF

Java веб-приложения используют файл дескриптора развертывания для определения какие URL будут передаваться определенному сервлету, какие URL требуют аутентификации и др. Этот дескриптор развертывания называется web.xml и находится в WAR приложения в  WEB-INF/ директории. Web.xml — часть стандарта сервлета для веб-приложений.

О дескрипторе развертывания

Дескриптор развертывания веб-приложений описывает классы, ресурсы и конфигурацию приложения, а так же как сервер будет использовать их для выполнения веб-запросов. Когда сервер получает запрос для приложения, он использует дескриптор развертывания для отображения URL запроса к коду, который должен этот запрос обработать.

Вот пример простого web.xml отображающего все пути URL (т.е. /*) к классу сервлета mysite.server.ComingSoonServlet:

Сервлеты и пути URL

web.xml определяет соответствие между путями URL и сервлетами, которые эти URL будут обрабатывать. Веб-сервер использует эту конфигурацию, чтоб определить сервлет для обработки данного запроса и вызвать метод класса, который соответствует методу запроса (например метод doGet() для HTTP.GET запросов).

Для привязки («маппинг») URL к сервлету, необходимо определить элементы  <servlet> и <servlet-mapping>.

Элемент <servlet-mapping> определяет шаблон URL и имя сервлета, который будет обрабатывать запросы, соответствующие шаблону. Шаблон должен содержать полный путь URL, включая (/), следующий за именем домена.

В этом примере запрос с URL http://www.example.com/blue/teamProfile будет перехвачен классом сервлета TeamServlet с параметром teamColor=blue и bgColor=#0000CC 

Пример с множеством сервлетов

URL
Servlet
Invoked
http://host:port/mywebapp/fruit/summer/index.html
watermelon
http://host:port/mywebapp/fruit/summer/index.abc
watermelon
http://host:port/mywebapp/seedlist
list
http://host:port/mywebapp/seedlist/index.html
Сервлет по умолчанию (если сконфигурирован), или HTTP 404 File Not Found error message.
Если маппинг сервлета list соответствует /seedlist*, то будет вызван сервлет list
http://host:port/mywebapp/seedlist/pear.abc
kiwi
Если маппинг сервлета list соответствует /seedlist*, то будет вызван сервлет list
http://host:port/mywebapp/seeds
garden
http://host:port/mywebapp/seeds/index.html
garden
http://host:port/mywebapp/index.abc
kiwi

Настройка атрибута <welcome-file-list> в web.xml

Когда URL сайта представляет путь для статичных файлов в вашем WAR, то часто хорошей идеей будет настройка атрибута <welcome-file-list> (например для начальной страницы авторизации). Пользователь находящийся на странице /help/accounts/password.xhtml может попытаться перейти на /help/accounts/ для доступа к закрытой информации. Дескриптор развертывания может задать список имен, которые должен перепробовать сервер, когда пользователь обращается к пути из подкаталога WAR (который неявно обрабатывается сервлетом), прежде чем выдать ошибку URL не найден.

К примеру, если пользователь попытается перейти по пути  /help/accounts/, то следующие настройки <welcome-file-list> заставят сервер проверить  /help/accounts/index.xhtml и  /help/accounts/index.html, прежде чем вывести 404 ошибку:

Настройка начальной страницы c помощью <welcome-file-list>

При запуске приложения можно задать начальную страницу, на которую перейдет браузер. Частая проблема, что при загрузке сервера приложений мы получаем 404 ошибку — страница не найдена. Давайте разберемся как нужно настраивать файл web.xml веб-приложения.

В первую очередь нужно учесть, что папка WEB-INF/ используется для внутренних файлов (те же настройки и т.п.) и НЕ доступна извне. Т.е. начальную страницу можно хранить только вне этой папки. Например в webapp/folder/index.xhtml — можно, а в webapp/WEB-INF/folder/index.xhtml — нельзя.

Теперь собственно к настройкам.

Например у нас есть сервлет с полным именем com.examplecompany.MyCMS. Он будет доступен при перехвате ссылок, соответствующих шаблону /CMS, т.е. http://yoursite.com/CMS.

Теперь определим <welcome-file-list> со списком страниц, которые должен перебрать сервер, прежде чем выдать ошибку путь не найден:

Как это будет работать?

Когда кто-либо переходит на сайт, то происходит следующее

  1. http://yoursite.com превращается в http://yoursite.com/
  2. Сервер не находит ничего полезного для отображения и должен вывести ошибку, но у нас настроен welcome-file-list, значит, как описано выше сначала должен быть обработан этот атрибут.
  3. http://yoursite.com/ — это уже директория и начинается сканирование по welcome-file-list
  4. http://yoursite.com/CMS — первая в списке сканирования и это соответствует URL /CMS сервлета MyCMS, а значит он вступает в работу.

Отмечу что

Важное замечание — в атрибуте <welcome-file> слеш вначале ставить не нужно, т.е. если <url-pattern> /servlet/MyServlet, то нужно писать вот так

 

Полезные ссылки

Google. The Deployment Descriptor: web.xml

Oracle. Creating and Configuring Servlets

Share Button
21
24612 Total Views 4 Views Today

Добавить комментарий