Рубрики
Без рубрики

веб.xml против инициализатора с весной

Быстрое и практичное руководство по XML и Java config весной.

Автор оригинала: baeldung.

1. Обзор

В этой статье мы будем охватывать три различных подхода к настройке Диспетчер Сервлет доступны в последних версиях Весенние рамки:

  1. Начнем с XML конфигурации и веб.xml файл
  2. Затем мы перечтем декларацию Сервлета из веб.xml файл на Java конфигурацию, но мы оставим любую другую конфигурацию в XML
  3. Наконец, на третьем и заключительном этапе рефакторинга у нас будет 100% Java-настроенный проект

2. Диспетчер Сервлет

Одна из основных концепций Весенний MVC является Диспетчер Сервлет . Весенняя документация определяет его как:

Центральный диспетчер обработчиков/контролеров запросов HTTP, например, для контроллеров веб-интерфейса или экспортеров удаленных услуг на основе HTTP. Отправка зарегистрированным обработчикам для обработки веб-запроса, обеспечивая удобные средства отображения и обработки исключений.

В основном Диспетчер Сервлет является точкой входа каждого Весенний MVC приложение. Его целью является перехват HTTP запросов и направить их в нужный компонент, который будет знать, как с этим справиться.

3. Конфигурация с веб.xml

Если вы имеете дело с наследием Весенние проектов очень часто можно найти XML конфигурации и до Весенние 3.1 Единственный способ настроить Диспетчер Сервлет был с WEB-INF/web.xml файл. В этом случае требуется два шага.

Рассмотрим конфигурацию примера – первым шагом является декларация Servlet:


    dispatcher
    
        org.springframework.web.servlet.DispatcherServlet
    
    
        contextConfigLocation
        /WEB-INF/spring/dispatcher-config.xml
    
    1

С этим блоком XML мы объявляем сервлет, который:

  1. Называется ” диспетчер
  2. Является примером org.springframework.web.servlet.DispatcherServlet
  3. Будет инициализирован с параметром, названным контекстКонфигЛокация который содержит путь к XML

загрузка на запуск является более интегративным значением, которое определяет порядок загрузки нескольких серплетов. Так что если вам нужно объявить более одного сервлета вы можете определить, в каком порядке они будут инициализированы. Серплеты, отмеченные более низкими цениками, загружаются перед сервлетами, отмеченными более высокими цениками.

Теперь наш сервлет настроен. Вторым шагом является объявление сервлет-картографирование :


    dispatcher
    /

С картой сервлета мы окаймляем его по названию URL шаблон который определяет, что HTTP запросы будут обрабатываться им.

4. Гибридная конфигурация

С принятием версии 3.0 Servlet API , веб.xml файл стал необязательным, и теперь мы можем использовать Java для настройки Диспетчер Сервлет .

Мы можем зарегистрировать сервлет, реализуя WebApplicationИнициализатор . Это эквивалент XML конфигурация выше:

public class MyWebAppInitializer implements WebApplicationInitializer {
    @Override
    public void onStartup(ServletContext container) {
        XmlWebApplicationContext context = new XmlWebApplicationContext();
        context.setConfigLocation("/WEB-INF/spring/dispatcher-config.xml");

        ServletRegistration.Dynamic dispatcher = container
          .addServlet("dispatcher", new DispatcherServlet(context));

        dispatcher.setLoadOnStartup(1);
        dispatcher.addMapping("/");
    }
}

В этом примере мы:

  1. Реализация WebApplicationИнициализатор интерфейс
  2. Переопределение onStartup метод, который мы создаем новый XmlWebПрименениеКонтекст настроен с тем же файлом, переданным контекстКонфигЛокация в сервлет в XML пример
  3. Тогда мы создаем экземпляр Диспетчер Сервлет с новым контекстом, который мы просто мгновенно
  4. И, наконец, мы регистрируем сервлет с картографическим URL рисунок

Поэтому мы использовали Java объявить сервлет и привязать его к URL-адрес но мы держали конфигурацию в отдельном XML файл: диспетчер-конфиг.xml .

5. 100% Конфигурация Java

При этом подходе наш сервлет объявляется на Java , но нам все еще нужна XML файл для его настройки. С WebApplicationИнициализатор вы можете достичь 100% Java конфигурация.

Давайте посмотрим, как мы можем рефакторинг предыдущего примера.

Первое, что нам нужно сделать, это создать контекст приложения для сервлета.

На этот раз мы будем использовать аннотации на основе контекста, так что мы можем использовать Java и аннотации для конфигурации и устранить необходимость в XML файлы, такие как диспетчер-конфиг.xml :

AnnotationConfigWebApplicationContext context
  = new AnnotationConfigWebApplicationContext();

Этот тип контекста может быть настроен для регистрации класса конфигурации:

context.register(AppConfig.class);

Или настройка всего пакета, который будет отсканирован для классов конфигурации:

context.setConfigLocation("com.example.app.config");

Теперь, когда наш контекст приложения создан, мы можем добавить слушателя в СервлетКонтекст которые загрузят контекст:

container.addListener(new ContextLoaderListener(context));

Следующим шагом является создание и регистрация нашего диспетчера servlet:

ServletRegistration.Dynamic dispatcher = container
  .addServlet("dispatcher", new DispatcherServlet(context));

dispatcher.setLoadOnStartup(1);
dispatcher.addMapping("/");

Теперь наши WebApplicationИнициализатор должно выглядеть так:

public class MyWebAppInitializer implements WebApplicationInitializer {
    @Override
    public void onStartup(ServletContext container) {
        AnnotationConfigWebApplicationContext context
          = new AnnotationConfigWebApplicationContext();
        context.setConfigLocation("com.example.app.config");

        container.addListener(new ContextLoaderListener(context));

        ServletRegistration.Dynamic dispatcher = container
          .addServlet("dispatcher", new DispatcherServlet(context));
        
        dispatcher.setLoadOnStartup(1);
        dispatcher.addMapping("/");
    }
}

Java и конфигурация аннотации предлагает много преимуществ. Обычно это приводит к более короткой и более краткой конфигурации, а аннотации обеспечивают больше контекста для деклараций, так как они расположены совместно с кодом, который они настраивают.

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

6. Заключение

В этой статье мы рассмотрели различные способы настройки Диспетчер Сервлет в Весна 3,2 “ и это до вас, чтобы решить, какой из них использовать на основе ваших предпочтений. Весенние будет учитывать ваше решение, что вы выберете.

Вы можете найти исходный код из этой статьи на Github здесь и здесь .