Статьи

Простое Spring MVC веб-приложение с использованием Gradle

Этот пост будет похож на наш предыдущий пост, простое веб-приложение Gradle , за исключением того, что теперь мы будем использовать Spring MVC, а не сырые сервлеты. Получить действительно простое приложение Spring MVC, работающее с Gradle, очень просто. Вы можете скачать исходный код этого руководства на Github .

Предпосылки

Установить Gradle

Наша основная структура проекта будет:

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"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
 
  <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"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
 
  <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"?>
 
  <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

Ссылка: простое веб-приложение Spring MVC с использованием Gradle от нашего партнера по JCG Стива Хэнсона в блоге CodeTutr .