Пример Spring MVC

max аватар
94
Находится в разделах:

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

Вот как выглядит запрос в Spring MVC Framework.

spring mvc

Когда запрос посылается в 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.
spring mvc
Введите имя проекта и нажмите кнопку Finish
spring mvc
Кликните правой кнопкой мыши на папке проекта и выберите Spring Tools -> Add Spring Project Nature для того, чтобы добавить Spring совместимости в веб-проект. 
spring mvc 3
Создайте новый пакет firststeps.spring внутри папки src. Класс контроллера должен наследоваться от org.springframework.web.servlet.mvc.AbstractController.  Для создания нового контроллера, кликните правой кнопкой мыши по директории src и создайте новый java класс, введите имя контроллера и супер класса, затем нажмите кнопку Finish
spring mvc 4
Скопируйте следующий код внутрь класса HelloWorldController
Класс HelloWorldController содержит свойство message, которое устанавливается с использованием инъекции в сеттер. Класс HelloWorldController должен переопределять метод handleRequestInternal() для обработки запроса. После его обработки, метод handleRequestInternal() возвращает объект ModelAndView обратно в DispatcherServlet
spring mvc
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 mvc
Выберите Spring Bean Configuration file и нажмите Next.
spring mvc 6
Введите имя файла "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.

max аватар

Да, Вы правы. Но не суть в версии. Просто демонстрация mvc. К тому же, начинающий вряд ли будет скачивать более старые версии.

Начал пытаться воспроизвести это у себя на компьютере - он не вышло...существует противоречие в статье - в примере создаеться класс в папке src, так же перед этим просят создать зачем-то пустой пакет, в котором ничего не лежит, а на самом сккрине вообще новоиспеченный класс определяют в пакет com.vaannila ^)

в результате когда я забиваю, когда, то eclipse мне подчеркивает практически все :)

max аватар

Ага, есть такое. Не вините строго.  Некоторые ошибки можно интуитивно подправить. Тяжело расписать все шаги. 

Хотелось бы уточнить, если написать в контроллере так

то при настройке контроллера какое имя должно быть у property? messageA, messageB или может вообще оно должно быть "welcomeMessage"?  Т.е. какую роль играет имя property?

Так вродебы все понятно. Но хотелось бы увидеть содержимое redirect.jsp.

Ну, я так понимаю это хороший перевод, исходники можно найти тут:

http://www.vaannila.com/spring/spring-mvc-tutorial-1.html

Отправить комментарий

CAPTCHA
Чтобы оставить комментарий, введите пожалуйста код, изображенный на картинке
Image CAPTCHA
Введите символы, изображенные на картинке