Spring MVC - отличный помощник при построении гибких и слабо связанных веб-приложений. Шаблон проектирования MVC (Model-View-Controller) помогает в разделении бизнес-логики, презентационной логики и логики навигации. Модели ответственны за инкапсулирование данных приложения. Представления генерируют ответ на запрос пользователя с использованием объекта модели. Контроллеры ответственны за получение запроса от пользователя и вызов сервисов на стороне веб-сервера.
Вот как выглядит запрос в Spring MVC Framework.

Когда запрос посылается в Sping MVC Framework, происходит следующая цепочка событий.
- Сперва DispatcherServlet получает запрос
- DispatcherServlet консультируется с HandlerMapping и вызывает Controller, ассоциированный с этим запросом.
- Controller обрабатывает запрос посредством вызова соответствующих методов сервиа и возвращает ModelAndView объект в DispatcherServlet. Объект ModelAndView содержит модель данных и имя представления.
- DispatcherServlet отсылает имя отображения в ViewResolver для поиска актуального представления для вызова.
- Теперь DispatcherServlet передаст объект модели в представление (View) и сгенерирует результат.
- View с помощью модели данных отрендерит результат и отошлет его обратно пользователю.
Для понимания работы Spring MVC Framework мы создадим простой пример hello world с использованием Eclipse.
Для демонстрации необходимо иметь Eclipse 3.4 или выше, Spring IDE plugin, Tomcat 6 и Spring 3.
Для создания веб-проекта, перейдите в File->New->Dynamic Web Project.
Введите имя проекта и нажмите кнопку Finish.
Кликните правой кнопкой мыши на папке проекта и выберите Spring Tools -> Add Spring Project Nature для того, чтобы добавить Spring совместимости в веб-проект.
Создайте новый пакет firststeps.spring внутри папки src. Класс контроллера должен наследоваться от org.springframework.web.servlet.mvc.AbstractController. Для создания нового контроллера, кликните правой кнопкой мыши по директории src и создайте новый java класс, введите имя контроллера и супер класса, затем нажмите кнопку Finish.
Скопируйте следующий код внутрь класса HelloWorldController.
Класс HelloWorldController содержит свойство message, которое устанавливается с использованием инъекции в сеттер. Класс HelloWorldController должен переопределять метод handleRequestInternal() для обработки запроса. После его обработки, метод handleRequestInternal() возвращает объект ModelAndView обратно в DispatcherServlet.
DispatcherServlet - сервлет, который управляет всем процессом обработки запросов. Когда запрос отослан в DispatcherServlet, он делегирует работу вызову подходящего контроллера для обработки запроса. Как и любой другой сервлет, DispatcherServlet должен быть сконфигурирован в дескрипторе развертывания, как показано ниже:
Мы задали имя сервлета как dispatcher. По умолчанию, DispatcherServlet будет искать файл dispatcher-servlet.xml для загрузки конфигурации Spring MVC. Это имя файла формируется путем объединения имени сервлета ("dispatcher") и "-servlet.xml". Мы используем url-шаблон ".htm" для того, чтобы спрятать технологии реализации от пользователя.
redirect.jsp будет вызван при первом запуске веб-приложения. У нас есть единственный файл вне папки WEB-INF и он нужен для обеспечения редиректа к DispatcherServlet.
Все остальные представления должны быть в директории WEB-INF, чтобы они могли быть вызваны только через процесс контроллера.
Для создания конфигурации бина, необходимо кликнуть правой кнопкой мыши на папке WebContent и выбрать New->Other.
Появится следующий диалог:
Выберите Spring Bean Configuration file и нажмите Next.
Введите имя файла "dispatcher-servlet.xml" и нажмите Finish.
Теперь файл конфигурации создан и нам необходимо настроить Controller и ViewResolver. Следующий код показывает, как это сделать
Сперва разберемся, как настроить контроллер.
Здесь атрибут name элемента bean определяет URL-шаблон для маппинга запросов. Поскольку атрибут id не может содержать специальных символов на подобии "/", мы задаем URL-шаблон с использованием атрибута name элемента bean.
По умолчанию, DispatcherServlet использует BeanNameUrlHandlerMapping для маппинга входящих запросов. BeanNameUrlHandlerMapping использует имя бина в роли URL-шаблона. Поскольку BeanNameUrlHandlerMapping используется по умолчанию, нам не потребуется создавать отдельные файлы для конфигурации.
Атрибут message класса HelloWorldController устанавливается через сеттерную инъекцию. Класс HelloWorldController конфигурируется так же, как и любой другой JavaBean класс в контексте приложения Spring. Поэтому, мы можем задать значения через внедрение зависимостей.
redirect.jsp будет перенаправлять запросы к DispatcherServlet, который, в свою очередь, будет консультироваться с BeanNameUrlHandlerMapping и вызывать HelloWorldController. Вызываться будет метод handleRequestInternal() в классе HelloWorldController. Мы возвращаем свойство message с именем welcomeMessage и представлением welcomePage в DispatcherServlet.
Сейчас же мы знаем только имя представления и для того, чтобы найти актуальное представление, нам необходимо ViewResolver.
Он настраивается следующим кодом:
InternalResourceViewResolver используется для распознания имени представления в реальное представление. prefix value + view name + suffix value дадут нам реальное расположение представления.
У нас реальное расположение - /WEB-INF/jsp/welcomePage.jsp.
Также, необходимо будет подключить следующие библиотеки:
Для запуска приложения запустите файл redirect.jsp. Отобразится следующая страница:
Spring-ом 3 здесь и не пахнет. С таким же успехом для примера должен подойти и 2.5.x.
Да, Вы правы. Но не суть в версии. Просто демонстрация mvc. К тому же, начинающий вряд ли будет скачивать более старые версии.
Начал пытаться воспроизвести это у себя на компьютере - он не вышло...существует противоречие в статье - в примере создаеться класс в папке src, так же перед этим просят создать зачем-то пустой пакет, в котором ничего не лежит, а на самом сккрине вообще новоиспеченный класс определяют в пакет com.vaannila ^)
в результате когда я забиваю, когда, то eclipse мне подчеркивает практически все :)
Ага, есть такое. Не вините строго. Некоторые ошибки можно интуитивно подправить. Тяжело расписать все шаги.
Хотелось бы уточнить, если написать в контроллере так
то при настройке контроллера какое имя должно быть у property? messageA, messageB или может вообще оно должно быть "welcomeMessage"? Т.е. какую роль играет имя property?
Так вродебы все понятно. Но хотелось бы увидеть содержимое redirect.jsp.
Ну, я так понимаю это хороший перевод, исходники можно найти тут:
http://www.vaannila.com/spring/spring-mvc-tutorial-1.html
Отправить комментарий