В этом уроке мы покажем вам веб-приложение Hello MVC Spring World.
Используемые технологии:
Весна 2.5.6
JDK 1.6
Затмение 3.6
Maven 3
1. MVC Basic
В веб-приложении Spring MVC оно состоит из 3 стандартных компонентов MVC (Model, Views, Controller):
Модели - доменные объекты, которые обрабатываются сервисным уровнем (бизнес-логика) или постоянным уровнем (работа с базой данных).
Представления - отображают данные, обычно это страницы JSP, написанные с помощью стандартной библиотеки тегов Java (JSTL).
Контроллеры - отображение URL и взаимодействие с сервисным уровнем для бизнес-обработки и возврата модели.
На следующих рисунках показано, как веб-приложение Spring MVC обрабатывает веб-запрос.
Рисунок 1.1 - Изображение скопировано изSpring MVC reference с небольшими изменениями.
Рисунок 1.2 - Изображение скопировано из этой книги:Spring Recipes_
Note В Spring MVC основным компонентом диспетчера являетсяDispatcherServlet, который действует как фронт-контроллер (шаблон проектирования). Каждый веб-запрос должен пройти через этотDispatcherServlet, иDispatcherServlet отправит веб-запрос подходящим обработчикам.
2. Структура каталогов
Стандартная структура каталогов проекта Maven.
3. специалист
Объявляет зависимостьspring-webmvc, Maven поможет вам управлять транзитивными зависимостями автоматически (загрузите другие зависимости, которые требуютсяspring-webmvc, напримерspring-context илиspring-beans).
Если вы используете страницу JSP с технологией JSTL, включите также зависимостьjstl.
Spring поставляется со многими контроллерами, обычно вам просто нужно расширитьAbstractController и переопределить методhandleRequestInternal().
HelloWorldController.java
package com.example.common.controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;
public class HelloWorldController extends AbstractController{
@Override
protected ModelAndView handleRequestInternal(HttpServletRequest request,
HttpServletResponse response) throws Exception {
ModelAndView model = new ModelAndView("HelloWorldPage");
model.addObject("msg", "hello world");
return model;
}
}
4.1 ModelAndView(“HelloWorldPage”) – To identify which view should return back to the user, in this example HelloWorldPage.jsp will be returned.
4.2 model.addObject(“msg”, “hello world”) – Add a “hello world” string into a model named “msg”, later you can use EL ${msg} to display the “hello world” string.
5. Просмотр (страница JSP)
В этом случае «view» - это страница JSP, вы можете отобразить значение «hello world», которое хранится в модели «msg», с помощью языка выражений (EL) $ {msg}.
Note Если $ {msg} отображается как есть, а не значение внутри модели «msg», это может быть вызвано старым дескриптором JSP 1.2, из-за которого языки выражений по умолчанию отключены. см.solution здесь.
6. Конфигурация Spring XML
6.1 Declared the Spring Controller and viewResolver.
mvc-dispatcher-servlet.xml
/WEB-INF/pages/.jsp
1. Controller - объявлено имя bean-компонента/welcome.htm и сопоставлено его сHelloWorldController. Это означает, что если запрашивается URL-адрес с шаблоном/welcome.htm, контроллерHelloWorldController обработает запрос.
2. viewResolver - Определите, как Spring будет искать шаблон представления. В этом случае контроллерHelloWorldController вернет представление с именемHelloWorldPage, viewResolver найдет файл с помощью следующего механизма:prefix + view name + suffix, то есть/WEB-INF/pages/HelloWorldPage.jsp.
Note На самом деле вам не нужно определятьBeanNameUrlHandlerMapping вweb.xml, по умолчанию, если сопоставление обработчика не найдено, DispatcherServlet создастBeanNameUrlHandlerMapping (t4) автоматически. См. Эту статью -BeanNameUrlHandlerMapping example для подробностей.
6.2 In web.xml, declared a DispatcherServlet servlet to act as the front-controller to handle all the entire web request which end with htm extension.
web.xml
Spring Web MVC Applicationmvc-dispatcher
org.springframework.web.servlet.DispatcherServlet
1mvc-dispatcher*.htm
Note mvc-dispatcher используется для определения файла для загрузки конфигураций Spring XML. По умолчанию он будет искать XML-файл конфигурации Spring, объединив имя сервлетаmvc-dispatcher с-servlet.xml.
В этом примере Spring будет искать этот файл -mvc-dispatcher-servlet.xml.
7. Demo
7.1 To run this project with Maven :
$ mvn jetty:run
7.2 To run this project in Eclipse IDE, create Eclipse project settings with the following Maven command :
$ mvn eclipse:eclipse
Импортирует проект вручную и запускает с плагина сервера.
URL заканчивается расширением «.htm», поэтому он будет перенаправлен на «DispatcherServlet» и отправит запросы к стандартному BeanNameUrlHandlerMapping.
BeanNameUrlHandlerMapping возвращает HelloWorldController в DispatcherServlet.
DispatcherServlet переслать запрос в HelloWorldController.
HelloWorldController обрабатывает его и возвращает объект ModelAndView с именем представления «HelloWorldPage».
DispatcherServlet получил ModelAndView и вызывает viewResolver для его обработки.
viewResolver возвращает/WEB-INF/pages/HelloWorldPage.jsp обратно в DispatcherServlet.