Spring MVC Java Config (конфигурация с аннотациями) для web.xml
Пример преобразования дескриптора развертывания web.xml в конфигурацию Spring MVC Java Config (конфигурация с аннотациями).
Обзор приложения Spring MVC + AngularJS + Bootstrap + HTML5
Используемые технологии и библиотеки
1. Описание задачи
Преобразовать дескриптор развертывания web.xml в программную конфигурацию с помощью Java config (POJO класс).
2. Структура проекта
Чтобы поменять xml конфигурации ( web.xml , security-config.xml , mvc-config.xml , application-context.xml ) на вариант Java Config с использованием классов и аннотаций был добавлен пакет javaconfig . В нем содержаться классы, соответствующие xml конфигурации, которые были использованы на протяжении цикла статей этого проекта. WebConfig является аналогом web.xml , ApplicationConfig = application-context.xml , MVCConfig = mvc-config.xml , SpringSecurityInit и SecurityConfig являются аналогом security-config.xml .
3. Важное замечание
Это первая часть из нескольких статей по переходу от xml конфигурации к Java конфгурации. Поэтому просто убрав web.xml и заменив на аналог WebConfig из этой статьи работать приложение у вас не будет. Используйте полную конфигурацию из скачанного проекта или используйте эту статью как справочную информацию по сопоставлению элементов из xml файла с java конфигурацией.
4. web.xml
Т.к. все настройки были описаны в предыдущих статьях, то здесь будет минимум описаний каждого элемента. Код можно легко сравнить сопоставляя названия xml и java класса.
Структура web.xml
Файл web.xml хранит информацию о конфигурации приложения. Он не является обязательной его частью, однако очень широко используется для настройки конфигурации веб-приложения.
Этот файл должен располагаться в папке WEB-INF. При запуске Tomcat считывает его содержимое и использует записанную в нем конфигурацию. Если же файл содержит ошибки, то и Tomcat отображает ошибку.
HelloWorld HelloServlet HelloWorld /welcome index.html
Зеленым цветом тут записан маппинг имя сервлета «HelloWorld» и класса сервлета «HelloServlet» . Синим цветом записан маппинг имя сервлета «HelloWorld» и куска URL «http://localhost/welcome» . Таким образом тут написано, что при обращении к пути /welcome нужно вызвать сервлет HelloServlet.class .
Красным цветом указан файл, который нужно отдать по запросу http://localhost/ — это так называемая welcome page . Если пользователь просто вобьет в браузере имя, соответствующее корню нашего веб-приложения, то ему отдается содержимое файла index.html .
7.2 servlet, servlet-mapping
Один сервлет может обслуживать запросы по разным урлам, поэтому в web-xml сервлет и его маппинг на урлы записываются отдельно. Сначала описываем сервлеты, давая каждому уникальное строковое имя, а затем уже указываем, как каждый сервлет мапится на какой url.
remoting com.javarush.RemotingServlet 1 remoting /remoting/* restapi com.javarush.RestApiServlet 2 restapi /api/*
В этом примере объявлено два сервлета, и каждый замаплен на свой шаблон url. Сервлет RemotingServlet обслуживает все запросы, которые идут на /remoting/* . Сервлет RestApiServlet обслуживает все запросы, которые идут на /api/* . Так же у сервлетов прописан порядок из загрузки — параметр load-on-startup.
7.3 Параметры сервлета
С помощью web.xml сервлету при его инициализации можно передать параметры, они будут доступны через интерфейс ServletConfig . Также можно задать параметры всему веб-приложению, они будут доступны через интерфейс ServletContext .
Server production mode productionMode false appPropertiesConfig classpath:local-app.properties classpath:web-app.properties mainservlet com.javarush.ApplicationServlet application com.javarush.App widgetset com.javarush.WidgetSet ui com.javarush.AppUI
- productionMode со значением false
- appPropertiesConfig с массивом из двух строк:
- classpath:local-app.properties
- classpath:web-app.properties
Синим цветом указаны параметры для сервлета ApplicationServlet , они будут доступны ему через ServletConfig :
- application со значением com.javarush.App
- widgetset со значением com.javarush.WidgetSet
- ui со значением com.javarush.AppUI
7.4 filter, filter-mapping
Веб-приложение может также содержать специальные служебные сервлеты — фильтры . Они выполняют различные служебные задачи: перенаправляют вызовы, проверяют авторизацию и т. д.
remoting RemotingServlet 1 remoting /remoting/* total_filter com.javrush.TotalFilter total_filter /* Прежде чем запрос попадет в сервлет RemotingServlet , он будет обработан фильтром TotalFiler . Этот фильтр настроен так, чтобы перехватывать все запросы , которые идут к нашему веб-приложению. Об это однозначно намекает шаблон урлов, на которые он замаплен: /* .
Больше про сервлеты и фильтры ты прочитаешь в следующих лекциях.