Главная » Spring » Настройка Spring MVC

0

Основой Spring MVC является сервлет DispatcherServlet, который играет роль входного контроллера в Spring MVC. Как и любой дру- гой сервлет, DispatcherServlet должен быть настроен в файле web.xml веб-приложения. Поэтому первое, что необходимо сделать, – это по- местить следующий элемент <servlet> в файл web.xml:

<servlet>

<servlet-name>spitter</servlet-name>

<servlet-class>

org.springframework.web.servlet.DispatcherServlet

</servlet-class>

<load-on-startup>1</load-on-startup>

</servlet>

Имя сервлета в элементе <servlet-name> имеет большое значение. По умолчанию после загрузки сервлета DispatcherServlet он загрузит контекст приложения Spring из XML-файла с именем, соответствую- щим имени сервлета. В данном случае, поскольку сервлет получил имя spitter, DispatcherServlet будет пытаться загрузить контекст при- ложения из файла с именем spitter-servlet.xml (находящегося в ка- талоге WEB-INF приложения).

Далее необходимо указать, какие адреса URL будут обрабаты- ваться сервлетом DispatcherServlet. Обычно сервлету DispatcherServlet передаются шаблоны адресов URL, такие как *.htm, /* или /app. Но эти шаблоны имеют следующие проблемы.

# Шаблон *.htm предполагает, что ответ всегда будет иметь фор-

мат HTML (что, как будет показано в главе 11, не всегда со- ответствует истинному положению дел).

# Шаблон /* не предполагает какого-то определенного формата

ответа, но указывает, что DispatcherServlet будет обслуживать все запросы. Это усложняет обслуживание статических объ- ектов, таких как изображения и таблицы стилей.

#  Шаблон /app (или подобный ему) помогает отделить содержи-

мое, обслуживаемое сервлетом DispatcherServlet, от остального содержимого. Но тогда нам придется реализовать обработку характерных особенностей наших URL (в частности, путь

/app). Это ведет к сложному преобразованию адресов URL с целью скрыть путь /app.

Вместо того чтобы использовать какие-либо из этих проблематич- ных схем, я предпочитаю настраивать отображение DispatcherServlet, как показано ниже:

<servlet-mapping>

<servlet-name>spitter</servlet-name>

<url-pattern>/</url-pattern>

</servlet-mapping>

Отображая сервлет DispatcherServlet в адрес /, я сообщаю, что он является сервлетом по умолчанию, отвечающим за обработку всех запросов, включая запросы на получение статического содержимого.

Если вас беспокоит, как DispatcherServlet будет обрабатывать эти типы запросов, тогда задержитесь ненадолго. Небольшой трюк с на- стройками освободит вас как разработчика от необходимости забо- титься о деталях. Пространство имен mvc в Spring включает новый элемент <mvc:resources>, автоматически обслуживающий запросы на получение статического содержимого. Все, что от вас требуется, – всего лишь определить его в конфигурации Spring.

Это означает, что пришло время создать файл spitter-servlet.xml, который сервлет DispatcherServlet будет использовать для создания контекста приложения. В листинге 8.1 приводится начало файла spitter-servlet.xml.

Листинг 8.1. Элемент <mvc:resources> определяет порядок обработки статических ресурсов

<?xml  version="1.0"  encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/mvc

http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

<mvc:resources  mapping="/resources/**"

location="/resources/" />    <!– Обрабатывает запросы на получение –>

</beans>                                             <!–  статических  ресурсов  –>

Как уже говорилось выше, все запросы, проходящие через Dis- patcherServlet, должны каким-то образом обрабатываться, часто с помощью других контроллеров. Поскольку запросы на получение статического содержимого также обрабатываются сервлетом Dispat- cherServlet, необходимо каким-то образом сообщить ему, как обраба- тывать эти ресурсы. Но создание отдельного контроллера для этой цели выглядит слишком трудоемкой задачей. К счастью, эту работу может выполнить элемент <mvc:resources>1.

Элемент  <mvc:resources>  определяет   обработчик   статическо- го содержимого. Атрибуту mapping  в примере присвоено значение

/resources/**, включающее шаблонный символ в стиле утилиты Ant,

1   Элемент <mvc:resources> появился в версии Spring 3.0.4. Если вы пользуе- тесь более старой версией Spring, он будет недоступен.

который указывает, что путь должен начинаться с /resources и может включать дополнительные элементы пути. Атрибут location опреде- ляет местоположение обслуживаемых файлов. Из данной конфи- гурации следует, что любые запросы, путь в которых начинается с /resources, автоматически будут адресоваться к папке /resources, находящейся в корневом каталоге приложения. То есть все изобра- жения, таблицы стилей, сценарии JavaScript и другие статические ресурсы должны храниться в папке /resources  приложения.

Теперь, когда мы разобрались с проблемой обработки статиче- ского содержимого, можно подумать о функциональности при- ложения. Поскольку мы находимся лишь в начале пути, начнем с создания простой домашней (или главной) страницы приложе- ния Spitter.

Источник:   Уоллс К., Spring в действии. – М.: ДМК Пресс, 2013. – 752 с.: ил.

По теме:

  • Комментарии