В этой статье мы рассмотрим создание простейшего приложения на популярном Java-фреймворке Spring MVC.
Для этого мы будем использовать следующий инструментарий:
- Tomcat 8.0.37 — скачать можно по ссылке.
- Среда для Java EE — Eclipse.
- Spring 5.0.3 — ничего скачивать не надо, используем Maven.
- JDK 1.8 — скачиваем по ссылке.
Цель нашего туториала заключается в том, чтобы создать приложение на Spring MVC максимально простым способом. Примерно так должен выглядеть результат после того, как вы выполните все шаги ниже.
Шаг первый
- Открываем Eclipse.
- Создаём новое рабочее пространство (workspace).
Шаг второй
- Нажимаем File.
- Выбираем New.
- Dynamic Web Project.
- Называем по желанию.
- Устанавливаем Target Runtime на Apache Tomcat 8.0.
Шаг третий
Конвертируем проект в Maven для того, чтобы добавить все необходимые зависимости для работы со Spring MVC.
- Правой кнопкой мыши нажимаем на проект.
- Configure.
- Convert to Maven project.
Шаг четвёртый
Открываем файл pom.xml
и добавляем следующие jar зависимости:
- spring-core : 5.0.3
- spring-context : 5.0.3
- spring-aop : 5.0.3
- spring-webmvc : 5.0.3
- spring-web 5.0.3
- jstl: 1.2
Примерно так должен выглядеть файл pom.xml
:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>CrunchifySpringMVCTutorial</groupId>
<artifactId>CrunchifySpringMVCTutorial</artifactId>
<version>0.0.1-SNAPSHOT</version>
<build>
<sourceDirectory>src</sourceDirectory>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.0.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>5.0.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.0.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.0.3.RELEASE</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
</project>
Шаг пятый
Создаём новый Bean файл servlet.xml
:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
Error handling this external URL
Error handling this external URL
http://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan base-package="com.crunchify.controller" />
<bean id="viewResolver"
class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
</beans>
В файле выше был использован тег <context:component-scan>
. Он позволит Spring загрузить все компоненты пакета com.crunchify.controller
.
Далее будет загужен CrunchifyHelloWorld.class
. Также мы объявили bean (управляемый объект) viewResolver
. Он сформирует представление (view), добавит префикс /WEB-INF/jsp
и поставит .jsp
на конце ModelAndView
. Обратите внимание на то, что класс HelloWorld
содержит метод, который возвращает объект ModelAndView
с именем представления «Welcome». Находиться он будет в /WEB-INF/jsp/welcome.jsp
.
Шаг шестой
Создаём новый файл web.xml
. Указываем Spring MVC путь: /WebContent/WEB-INF/web.xml
.
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
<display-name>CrunchifySpringMVCTutorial</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>crunchify</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>crunchify</servlet-name>
<url-pattern>/welcome.jsp</url-pattern>
<url-pattern>/index.jsp</url-pattern>
<url-pattern>/welcome.html</url-pattern>
<url-pattern>*.html</url-pattern>
</servlet-mapping>
</web-app>
Данный код отформатирует DipatcherServlet
по шаблону /welcome.jsp
. Также не забывайте про файл index.jsp
, который отвечает за отображение приветствия пользователю.
Стоит обратить внимание на имя в теге <servlet-name>
в файле web.xml
. Как только DispatcherServlet
инициализирован, он будет искать файл с именем сервлета в формате [имя сервлета]-servlet.xml
в папке WEB-INF
. В данном случае этот файл будет называться crunchify-servlet.xml
.
Шаг седьмой
Создаём класс для контроллера.
- Правой кнопкой мыши нажимаем на Java Resources.
- Выбираем src.
- Создаём новый класс.
- Пакет:
com.crunchify.controller
. Имя файла:CrunchifyHelloWorld.java
package com.crunchify.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
/*
* author: Crunchify.com
*
*/
@Controller
public class CrunchifyHelloWorld {
@RequestMapping("/welcome")
public ModelAndView helloWorld() {
String message = "<br><div style='text-align:center;'>"
+ "<h3>********** Hello World, Spring MVC Tutorial</h3>This message is coming from CrunchifyHelloWorld.java **********</div><br><br>";
return new ModelAndView("welcome", "message", message);
}
}
Как видите, мы написали @controller
перед декларированием класса и @RequestMapping("/welcome")
после. Это сделано для того, чтобы Spring при сканировании нашего кода опознал эти строки как bean для обработки запроса. Аннотация @RequestMapping
даёт фреймворку понять, что этот контроллер должен обрабатывать все запросы, начинающиеся с /welcome
в URL.
Как уже было упомянуто, метод helloWorld()
возвращает объект ModelAndView
. Этот объект создаёт представление под название «welcome», а модель идёт в браузер для того, чтобы у пользователя был доступ к информации через JSP. Полный путь к нашему представлению будет таким: «/WEB-INF/jsp/welcome.jsp».
Также в ModelAndView
есть сообщение с ключом «message» и значением в виде переменной message
. Это данные, которые мы передаём в наше представление. В данном случае это просто строка, однако в реальном применении вместо строки у нас был бы java bean с данными.
Шаг восьмой
Делаем представление — создаём новый файл /WebContent/index.jsp
.
<html>
<head>
<title>Spring MVC Tutorial Series by Crunchify.com</title>
<style type="text/css">
body {
background-image: url('https://crunchify.com/bg.png');
}
</style>
</head>
<body>
<br>
<div style="text-align:center">
<h2>
Hey You..!! This is your 1st Spring MCV Tutorial..<br> <br>
</h2>
<h3>
<a href="welcome.html">Click here to See Welcome Message... </a>(to
check Spring MVC Controller... @RequestMapping("/welcome"))
</h3>
</div>
</body>
</html>
Делаем ещё один файл /WebContent/WEB-INF/jsp/welcome.jsp
.
<html>
<head>
<title>Spring MVC Tutorial by Crunchify - Hello World Spring MVC
Example</title>
<style type="text/css">
body {
background-image: url('https://crunchify.com/bg.png');
}
</style>
</head>
<body>${message}
<br>
<br>
<div style="font-family: verdana; padding: 10px; border-radius: 10px; font-size: 12px; text-align:center;">
Spring MCV Tutorial by <a href="https://crunchify.com">Crunchify</a>.
Click <a
href="https://crunchify.com/category/java-tutorials/"
target="_blank">here</a> for all Java and <a
href='https://crunchify.com/category/spring-mvc/' target='_blank'>here</a>
for all Spring MVC, Web Development examples.<br>
</div>
</body>
</html>
Вот так теперь должен выглядеть ваш workspace в eclipse.
Шаг девятый
- Правой кнопкой мыши нажимаем на проект и запускаем его как Maven build.
- В панель Goals вписываем «clean install».
- Нажимаем Apply и Run.
После этого должно появиться сообщение об успешной сборке:
Если вы вдруг потеряли свои .jar
файлы, то они находятся в папке /target
.
Результат своей работы можете посмотреть на http://localhost:8080/CrunchifySpringMVCTutorial/ после того, как выполнили все шаги выше.
Разумеется, это не вся функциональность Spring MVC 5, а лишь малая его часть, однако мы надеемся, что в данной статье мы дали вам понимание того, как работает фреймворк.
Перевод статьи Simplest Spring MVC Hello World Example