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

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

28К открытий29К показов
Привет, весна: пишем 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 максимально простым способом. Примерно так должен выглядеть результат после того, как вы выполните все шаги ниже.

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

Шаг первый

  1. Открываем Eclipse.
  2. Создаём новое рабочее пространство (workspace).
Привет, весна: пишем Hello World на Spring MVC 2

Шаг второй

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

Шаг третий

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

  1. Правой кнопкой мыши нажимаем на проект.
  2. Configure.
  3. Convert to Maven project.
Привет, весна: пишем Hello World на Spring MVC 4

Шаг четвёртый

Открываем файл 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>
        <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
Привет, весна: пишем Hello World на Spring MVC 5
			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.
Привет, весна: пишем Hello World на Spring MVC 6

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

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

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

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

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

Следите за новыми постами
Следите за новыми постами по любимым темам
28К открытий29К показов