Привет, весна: пишем Hello World на Spring MVC

В этой статье мы рассмотрим создание простейшего приложения на популярном Java-фреймворке Spring MVC.

Для этого мы будем использовать следующий инструментарий:

  1. Tomcat 8.0.37 — скачать можно по ссылке.
  2. Среда для Java EE — Eclipse.
  3. Spring 5.0.3 — ничего скачивать не надо, используем Maven.
  4. JDK 1.8 — скачиваем по ссылке.

Цель нашего туториала заключается в том, чтобы создать приложение на Spring MVC максимально простым способом. Примерно так должен выглядеть результат после того, как вы выполните все шаги ниже.

Шаг первый

  1. Открываем Eclipse.
  2. Создаём новое рабочее пространство (workspace).

Шаг второй

  1. Нажимаем File.
  2. Выбираем New.
  3. Dynamic Web Project.
  4. Называем по желанию.
  5. Устанавливаем Target Runtime на Apache Tomcat 8.0.

Шаг третий

Конвертируем проект в Maven для того, чтобы добавить все необходимые зависимости для работы со Spring MVC.

  1. Правой кнопкой мыши нажимаем на проект.
  2. Configure.
  3. 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="
        http://www.springframework.org/schema/beans     
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/mvc 
        http://www.springframework.org/schema/mvc/spring-mvc.xsd
        http://www.springframework.org/schema/context 
        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>
        &lt;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.

Шаг седьмой

Создаём класс для контроллера.

  1. Правой кнопкой мыши нажимаем на Java Resources.
  2. Выбираем src.
  3. Создаём новый класс.
  4. Пакет: 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.

Шаг девятый

  1. Правой кнопкой мыши нажимаем на проект и запускаем его как Maven build.
  2. В панель Goals вписываем «clean install».
  3. Нажимаем Apply и Run.

После этого должно появиться сообщение об успешной сборке:

Если вы вдруг потеряли свои .jar файлы, то они находятся в папке /target.

Результат своей работы можете посмотреть на http://localhost:8080/CrunchifySpringMVCTutorial/ после того, как выполнили все шаги выше.

Разумеется, это не вся функциональность Spring MVC 5, а лишь малая его часть, однако мы надеемся, что в данной статье мы дали вам понимание того, как работает фреймворк.

Перевод статьи Simplest Spring MVC Hello World Example

Ещё интересное для вас:
Тест: что вы знаете о работе мозга?
Что посмотреть и куда сходить разработчку — ближайшие события