Этот пост будет похож на наш предыдущий пост, простое веб-приложение Gradle , за исключением того, что теперь мы будем использовать Spring MVC, а не сырые сервлеты. Получить действительно простое приложение Spring MVC, работающее с Gradle, очень просто. Вы можете скачать исходный код этого руководства на Github .
Предпосылки
Наша основная структура проекта будет:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
|
spring-mvc src main java com codetutr controller HomeController.java springconfig WebConfig.java ( for Java-based Spring configuration) webapp WEB-INF web.xml spring sample-servlet.xml ( for XML-based Spring configuration) view home.jsp |
Сначала создайте папку с именем spring-mvc
, а затем создайте базовую структуру папок: src / main / java, src / main / webapp / WEB-INF. Затем давайте создадим файл сборки Gradle внутри корневой папки:
build.gradle
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
|
apply plugin: 'war' apply plugin: 'jetty' apply plugin: 'eclipse-wtp' repositories { mavenCentral() } dependencies { providedCompile 'javax.servlet:servlet-api:2.5' compile 'org.springframework:spring-webmvc:3.2.2.RELEASE' runtime 'javax.servlet:jstl:1.1.2' } /* Change context path (base url). otherwise defaults to name of project */ jettyRunWar.contextPath = '' |
Теперь откройте командную строку в папке spring-mvc
и запустите gradle eclipse
. Вы увидите загрузку всех (многих) необходимых банок Spring, от которых зависит Spring-webmvc. Теперь импортируйте проект в Eclipse (Файл-> Импорт-> Существующие проекты в рабочую область). Теперь мы создадим web.xml, конфигурацию Spring и базовый контроллер. Классический способ настроить приложение Spring — это настройка XML. Начиная с Spring 3.1, приложения Spring также можно было легко настроить с помощью конфигурации Java (это поддерживалось в Spring 3.0, но в Spring 3.1 появилась поддержка настраиваемого пространства имен, которая действительно сделала это привлекательным). Я предпочитаю конфигурацию Java, но я покажу оба подхода для тех, кто все еще использует конфигурацию XML. Следуйте ЛИБО конфигурации Java ИЛИ конфигурации XML. Если вы хотите использовать конфигурацию XML, пропустите этот раздел и перейдите к разделу конфигурации XML.
Spring Java-конфигурация
Создайте web.xml
в src/main/webapp/WEB-INF
:
web.xml
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
<? xml version = "1.0" encoding = "UTF-8" ?> xsi:schemaLocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" > < servlet > < servlet-name >sample</ servlet-name > < servlet-class > org.springframework.web.servlet.DispatcherServlet </ servlet-class > < init-param > < param-name >contextClass</ param-name > < param-value >org.springframework.web.context.support.AnnotationConfigWebApplicationContext</ param-value > </ init-param > < init-param > < param-name >contextConfigLocation</ param-name > < param-value >com.codetutr.springconfig</ param-value > </ init-param > </ servlet > < servlet-mapping > < servlet-name >sample</ servlet-name > < url-pattern >/</ url-pattern > </ servlet-mapping > </ web-app > |
Обратите внимание, что мы создали Spring DispatcherServlet, сопоставленный со всеми URL «/». Мы также попросили DispatcherServlet искать наши классы конфигурации Spring на основе Java в пакете com.codetutr.springconfig
. Давайте создадим наш класс конфигурации Java, который теперь называется WebConfig
в пакете com.codetutr.springconfig
:
WebConfig.java
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
package com.codetutr.springconfig; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.EnableWebMvc; import org.springframework.web.servlet.view.InternalResourceViewResolver; @Configuration @EnableWebMvc @ComponentScan (basePackages= "com.codetutr.controller" ) public class WebConfig { @Bean public InternalResourceViewResolver viewResolver() { InternalResourceViewResolver resolver = new InternalResourceViewResolver(); resolver.setPrefix( "/WEB-INF/view/" ); resolver.setSuffix( ".jsp" ); return resolver; } } |
Сначала обратите внимание на аннотацию @Configuration
. Это говорит Spring, что это класс конфигурации (эквивалент XML-файла <beans>). Затем строка @EnableWebMvc
инициализирует магию Spring MVC (для конвертеров, сериализации и т. Д.). Эквивалентен <mvc:annotation-driven/>
. Следующая строка с @ComponentScan
указывает Spring искать классы, аннотированные с помощью аннотации стереотипа Spring ( @Service, @Component, @Repository, @Controller
) — в нашем случае у нас будет некоторые контроллеры MVC в указанном пакете. Мы обсудим преобразователь представления через минуту. Пропустите следующий раздел конфигурации на основе XML, поскольку мы уже настроили наше приложение с помощью Spring Java-Configuration.
Конфигурация Spring на основе XML (если вы решили не использовать Java на основе выше)
Создайте web.xml
в src/main/webapp/WEB-INF
:
web.xml
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
|
<? xml version = "1.0" encoding = "UTF-8" ?> xsi:schemaLocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" > < servlet > < servlet-name >sample</ servlet-name > < servlet-class > org.springframework.web.servlet.DispatcherServlet </ servlet-class > < init-param > < param-name >contextConfigLocation</ param-name > < param-value >/WEB-INF/spring/sample-servlet.xml</ param-value > </ init-param > </ servlet > < servlet-mapping > < servlet-name >sample</ servlet-name > < url-pattern >/</ url-pattern > </ servlet-mapping > </ web-app > |
Обратите внимание, что мы создали Spring DispatcherServlet, сопоставленный со всеми URL «/». Мы также сказали DispatcherServlet найти наш конфигурационный файл Spring в WEB-INF/sping/sample-servlet.xml
. Давайте создадим это сейчас:
sample-servlet.xml
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
|
<? xml version = "1.0" encoding = "UTF-8" ?> xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd"> < context:component-scan base-package = "com.codetutr.controller" /> < mvc:annotation-driven /> < bean id = "viewResolver" class = "org.springframework.web.servlet.view.InternalResourceViewResolver" > < property name = "prefix" value = "/WEB-INF/view/" /> < property name = "suffix" value = ".jsp" /> </ bean > </ beans > |
Первая строка с context:component-scan
указывает Spring искать классы @Service, @Component, @Repository, @Controller
аннотацией стереотипа Spring ( @Service, @Component, @Repository, @Controller
). <mvc:annotation-driven />
сообщает Spring, чтобы добавить некоторые вкусности MVC. Мы обсудим преобразователь представления через минуту.
Создайте контроллер (все делают это — то же самое для конфигурации XML и Java)
Теперь, когда мы попросили Spring искать контроллеры MVC в нашем пакете com.codetutr.controller
, давайте com.codetutr.controller
простой контроллер. Создайте новый класс в пакете com.codetutr.controller
, который называется SampleController
. Введите следующее содержание:
SampleController.java
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
|
package com.codetutr.controller; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; @Controller public class SampleController { @RequestMapping ( "home" ) public String loadHomePage(Model m) { m.addAttribute( "name" , "CodeTutr" ); return "home" ; } } |
Помните, когда мы создавали viewResolver
компонент viewResolver
в sample-servlet.xml
конфигурации sample-servlet.xml
Spring? Мы устанавливаем префикс как WEB-INF/view
и суффикс как .jsp
. Используя этот преобразователь, после того как вышеуказанный метод будет выполнен с возвращаемым значением home
, Spring будет искать файл с именем WEB-INF/view/home.jsp
для визуализации представления. Давайте создадим этот файл сейчас:
home.jsp
1
2
3
4
5
6
7
8
9
|
<! DOCTYPE HTML> < html > < head > < title >Sample Application</ title > </ head > < body > < h1 >Hello, ${name}!</ h1 > </ body > </ html > |
Это оно! Теперь у вас есть базовое приложение Spring-MVC. Откройте командную строку в корневом каталоге проекта и введите gradle jettyRunWar
. Это запустит встроенный Jetty Server на порту 8080. Перейдите по адресу http: // localhost: 8080 / home, и вы должны увидеть:
Теперь, когда у вас есть основное приложение Spring MVC, следуйте учебному руководству Spring MVC Form Submission .
Полный источник: ZIP , GitHub
Чтобы запустить код из этого руководства: необходимо установить Gradle . Загрузите ZIP. Extract. Откройте командную строку для извлеченного местоположения. Запустите gradle jettyRunWar. Перейдите в браузере по адресу http: // localhost: 8080 / home.
Ресурсы
Блог SpringSource — Улучшения и конфигурация пространства имен MVC
SpringSource Docs — Документация EnableWebMvc