Добро пожаловать в пример Spring MVC. Какое-то время назад в Учебном пособии Spring MVC, я объяснил, как создать приложение Spring MVC с использованием Spring Tool Suite. Но сегодня я создам базовое приветственное весеннее приложение MVC с использованием Maven и Eclipse.
Пример Spring MVC
Spring MVC основан на архитектуре Model-View-Controller. Ниже показана архитектура Spring MVC на высоком уровне. Класс
DispatcherServlet
является контроллером, который принимает все запросы и начинает их обработку. Мы должны настроить его в файле web.xml. Его задача – передавать запросы соответствующему классу контроллера и отправлять ответ обратно, когда страницы представления отображают страницу ответа. HomeController.java
будет единственным классом контроллера в нашем примере весеннего приложения MVC. home.jsp
, user.jsp
– это страницы представления в нашем примере весеннего приветствия MVC. User.java
будет единственным классом модели, который у нас будет в нашем веб-приложении примера Spring MVC.
Пример Spring MVC Проекта “Hello, World” в Eclipse
На изображении ниже показан наш пример проекта Spring MVC в Eclipse. Давайте начнем и создадим наш проект с нуля.
Настройка Проекта Spring MVC в Eclipse
Поскольку это веб-приложение, и мы хотим использовать Maven для управления зависимостями, сначала нам нужно создать динамическое веб-приложение, а затем преобразовать его в проект Maven. Ниже приведены изображения, показывающие, как это сделать, и готовую структуру нашего проекта. Щелкните правой кнопкой мыши на окне обозревателя проектов и выберите “Новый -> Динамический веб-проект”, как показано на изображении ниже. Укажите имя “spring-mvc-example” на следующей всплывающей странице, остальное не требуется изменять.
На следующей странице укажите исходную папку как “src/main/java”. Вам может потребоваться удалить папку “src” из списка перед добавлением этого.
Далее – страница веб-модуля, укажите корневой контекст приложения как “spring-mvc-example” и убедитесь, что установлена опция “Создать дескриптор развертывания web.xml”.
Нажмите “Готово”, и у вас будет новый динамический веб-проект в обозревателе проектов Eclipse.
Преобразование динамического веб-проекта в проект Maven
Мы хотим использовать Maven для удобного управления зависимостями нашего веб-проекта Spring MVC. Давайте преобразуем наш веб-проект в Maven. Щелкните правой кнопкой мыши на проекте и выберите “Настроить -> Преобразовать в проект Maven”. Затем укажите конфигурации pom.xml, как показано ниже.
Наш каркас кода мавен-веб-приложения готов. Теперь мы можем начать вносить изменения в него и создать наше примерное приложение “Hello World” с использованием Spring MVC.
Добавление зависимостей Spring MVC в pom.xml
Нам нужно добавить зависимости spring-web и spring-webmvc в pom.xml, а также добавить зависимости servlet-api, jsp-api и jstl. Наш итоговый файл pom.xml будет выглядеть примерно так.
<project xmlns="https://maven.apache.org/POM/4.0.0" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.journaldev.spring.mvc</groupId>
<artifactId>spring-mvc-example</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>Spring MVC Example</name>
<description>Spring MVC Hello World Example</description>
<!-- Add Spring Web and MVC dependencies -->
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.3.9.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.3.9.RELEASE</version>
</dependency>
<!-- Servlet -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<warSourceDirectory>WebContent</warSourceDirectory>
</configuration>
</plugin>
</plugins>
<finalName>${project.artifactId}</finalName> <!-- added to remove Version from WAR file -->
</build>
</project>
Обратите внимание на конфигурацию finalName
в сборке, чтобы имя нашего WAR-файла не содержало информации о версии. Когда проект собирается в Eclipse, вы заметите, что все библиотеки появляются в разделе зависимостей Maven.
Диспетчерская служба Spring MVC как контроллер
Нам нужно добавить фреймворк Spring MVC в наше веб-приложение, для этого нам нужно настроить DispatcherServlet
в файле web.xml, как показано ниже.
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xmlns="https://java.sun.com/xml/ns/javaee" xsi:schemaLocation="https://java.sun.com/xml/ns/javaee https://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>spring-mvc-example</display-name>
<!-- Add Spring MVC DispatcherServlet as front controller -->
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
Используется init-параметр contextConfigLocation
, чтобы указать местоположение файла конфигурации бина Spring.
Пример файла конфигурации бина Spring MVC
Следующим шагом является создание файла конфигурации бина Spring с именем spring-servlet.xml
, как показано ниже.
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="https://www.springframework.org/schema/mvc"
xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xmlns:beans="https://www.springframework.org/schema/beans"
xmlns:context="https://www.springframework.org/schema/context"
xsi:schemaLocation="https://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd
https://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
https://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<!-- DispatcherServlet Context: defines this servlet's request-processing
infrastructure -->
<!-- Enables the Spring MVC @Controller programming model -->
<annotation-driven />
<context:component-scan base-package="com.journaldev.spring" />
<!-- Resolves views selected for rendering by @Controllers to .jsp resources
in the /WEB-INF/views directory -->
<beans:bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="suffix" value=".jsp" />
</beans:bean>
</beans:beans>
Существует три важные конфигурации.
- Атрибут
annotation-driven
указывает DispatcherServlet искать классы контроллера с использованием аннотации@Controller
. - Атрибут
context:component-scan
указывает DispatcherServlet, где искать классы контроллера. ВнутреннийКлассРесурсовViewResolver
конфигурация бина для указания расположения страниц просмотра и используемого суффикса. Методы класса контроллера возвращают имя страницы просмотра, а затем добавляется суффикс для определения страницы просмотра, используемой для визуализации ответа.
Класс Контроллера Spring MVC
У нас есть один класс контроллера для ответа на два URI – «/» для домашней страницы и «/user» для страницы пользователя.
package com.journaldev.spring.controller;
import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import com.journaldev.spring.model.User;
@Controller
public class HomeController {
/**
* Simply selects the home view to render by returning its name.
*/
@RequestMapping(value = "/", method = RequestMethod.GET)
public String home(Locale locale, Model model) {
System.out.println("Home Page Requested, locale = " + locale);
Date date = new Date();
DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale);
String formattedDate = dateFormat.format(date);
model.addAttribute("serverTime", formattedDate);
return "home";
}
@RequestMapping(value = "/user", method = RequestMethod.POST)
public String user(@Validated User user, Model model) {
System.out.println("User Page Requested");
model.addAttribute("userName", user.getUserName());
return "user";
}
}
Обратите внимание, что для простоты я не использовал никакую систему логирования, такую как log4j.
Класс Модели Spring MVC
У нас есть простой класс модели с одной переменной и его методами получателя-установщика. Это простой класс POJO.
package com.journaldev.spring.model;
public class User {
private String userName;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
}
Страницы Просмотра Spring MVC
У нас есть две страницы просмотра, определенные ниже. home.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="https://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ page session="false"%>
<html>
<head>
<title>Home</title>
</head>
<body>
<h1>Hello world!</h1>
<P>The time on the server is ${serverTime}.</p>
<form action="user" method="post">
<input type="text" name="userName"><br> <input
type="submit" value="Login">
</form>
</body>
</html>
user.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>User Home Page</title>
</head>
<body>
<h3>Hi ${userName}</h3>
</body>
</html>
Обратите внимание, что Spring MVC заботится о сопоставлении переменных формы с переменными класса модели, поэтому у нас есть одно и то же имя переменной в обоих местах. Вот и всё, наш пример проекта Spring MVC готов к развертыванию и тестированию.
Развертывание проекта Spring MVC в Eclipse
Мы можем использовать опцию экспорта как WAR-файл в Eclipse для развертывания его непосредственно в любой запущенной директории веб-приложений сервера Tomcat. Однако вы также можете использовать командную строку для сборки проекта, а затем скопировать его в каталог развертывания вашего любимого контейнера сервлетов.
Тестирование примера Spring MVC
После развертывания проекта spring mvc мы можем получить доступ к домашней странице по адресу https://localhost:8080/spring-mvc-example/
. Измените порт и корневой контекст томката соответственно.
Это все для примера Spring MVC, я постарался сделать его как можно проще. Но если у вас возникнут проблемы, пожалуйста, дайте мне знать в комментариях, и я постараюсь помочь вам. Вы можете загрузить окончательный проект примера spring mvc по ссылке ниже.
Скачать пример проекта Spring MVC
Ссылки: Официальная страница
Source:
https://www.digitalocean.com/community/tutorials/spring-mvc-example