1. Введение в Spring MVC
Что касается MVC, то студенты, участвовавшие в разработке веб-приложений, знакомы с ним: это архитектурный шаблон, разработанный на уровне представления (который также можно понимать как уровень, непосредственно отображаемый пользователю). полное имя M — это модель, которая относится к данным Модель, полное имя V — это представление, которое относится к странице просмотра, такой как JSP, Thymeleaf и т. д., а полное имя C — это контроллер, который относится к контроллер, который используется для обработки запроса, инициированного пользователем на клиенте (браузере).
Spring MVC реализован на основе шаблона MVC, который может помочь вам создавать такие же гибкие и слабосвязанные веб-приложения, как среда Spring.
То есть Spring MVC основан на Spring и в основном используется для разработки веб-приложений.
2. Процесс запроса Spring MVC
В веб-приложении запросы необходимы. Каждый запрос инициируется пользователем (клиентом) и заканчивается, когда пользователь (клиент) получает ответ. На следующем рисунке показан каждый запрос, через который проходит запрос в Spring MVC. Процесс:
Далее мы объясним каждый процесс на рисунке ниже:
- Когда запрос покидает браузер (① на рисунке), он будет содержать информацию о содержимом, запрошенном пользователем, например запрошенный URL-адрес и информацию об отправленной форме.
- Затем введите первую остановку запроса, то есть DispatcherServlet Spring, задачей которого является отправка запроса контроллеру Spring MVC.
- Поскольку в приложении будет несколько контроллеров, DispatcherServlet будет запрашивать одно или несколько сопоставлений обработчиков, которые будут определять, на какой контроллер должен быть отправлен запрос, на основе URL-адреса, содержащегося в запросе (рис. ② на ).
- После того, как контроллер будет определен, DispatcherServlet отправит запрос на определенный контроллер, а затем будет ждать, пока контроллер обработает информацию, представленную пользователем, но в целом контроллер сам почти не справляется с работой, а делегирует бизнес-логику a или Обрабатываются несколько сервисных объектов (③ на рисунке).
- После того, как контроллер завершает обработку бизнес-логики, он обычно генерирует некоторую информацию о модели, которую необходимо вернуть пользователю и отобразить в браузере.Чтобы отобразить эту информацию более удобно, например, отобразив ее в виде Html, мы нужно отправить информацию Дайте представление (View), например JSP, Thymeleaf.
- Последнее, что делает контроллер, это упаковывает данные модели и помечает имя представления для отображаемого вывода, он отправит запрос обратно в DispatcherServlet (4 на рисунке) вместе с моделью и именем представления, но контроллер будет только Вместо того, чтобы возвращать конкретное представление, верните логическое имя представления, которое будет использоваться для поиска фактического представления, создавшего результат. DispatcherServlet будет использовать преобразователь представлений (преобразователь представлений) для сопоставления имени логического представления с конкретным представлением (5 на рисунке), таким как JSP или Thymeleaf.
- Конечная остановка запроса — реализация представления (6 на диаграмме), где представление будет отображать вывод с использованием данных модели, и этот вывод будет передан пользователю/клиенту через объект ответа (7 на диаграмме ).
Поняв процесс запроса Spring MVC, давайте узнаем, как создать и настроить проект Spring MVC.
3. Создайте проект Spring MVC
Мы по-прежнему используем новый проект spring-action в предыдущем блоге. Заинтересованные студенты могут прочитать первые 11 блогов в этой серии или скачать исходный код напрямую:GitHub.com/Где находится Ухань/SPR….
3.1 Добавить зависимости
Чтобы использовать Spring MVC, сначала нам нужно добавить следующие зависимости в pom.xml:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.3.18.RELEASE</version>
</dependency>
<!-- 其他Web依赖 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
Поскольку проект будет развернут на Tomcat позже, мы настраиваем метод упаковки в pom.xml как военный пакет:
<packaging>war</packaging>
<build>
<plugins>
<!--其他配置-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.3</version>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
</plugins>
</build>
3.2 Создайте новую демонстрационную страницу
Создайте новый каталог представлений в папке src/main/resources, а затем создайте в этом каталоге новую страницу index.jsp следующим образом:
<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
<html>
<head>
<title>Spring MVC</title>
</head>
<body>
<pre>
Welcome to Spring MVC world
</pre>
</body>
</html>
Возможная проблема здесь заключается в том, что когда вы щелкаете правой кнопкой мыши для создания нового файла JSP, шаблон файла JSP отсутствует, как показано ниже:
Решение выглядит так:
Нажмите «Файл» — «Структура проекта» по очереди, чтобы открыть диалоговое окно «Структура проекта», выберите «Модули» слева, затем нажмите знак «+» и выберите «Интернет».
В этот момент снова щелкните правой кнопкой мыши новый файл JSP, и вы увидите шаблон файла JSP:
На этом этапе в корневом каталоге проекта будет создана веб-папка, которую можно удалить.
3.3 Конфигурация Spring MVC
Новый класс конфигурации MyMvcConfig выглядит следующим образом:
package chapter05.config;
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;
import org.springframework.web.servlet.view.JstlView;
/**
* Spring MVC配置
*/
@Configuration
@EnableWebMvc
@ComponentScan("chapter05")
public class MyMvcConfig {
/**
* 视图解析器配置
*
* @return
*/
@Bean
public InternalResourceViewResolver viewResolver() {
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setPrefix("/WEB-INF/classes/views/");
viewResolver.setSuffix(".jsp");
viewResolver.setViewClass(JstlView.class);
return viewResolver;
}
}
Меры предосторожности:
1) Класс конфигурации использует@EnableWebMvc
аннотацию, чтобы включить Spring MVC, она включит некоторую конфигурацию по умолчанию.
2) Этот класс конфигурации настраивает парсер представления, здесь мы настраиваем парсер представления JSP.
В преобразователе представления мы устанавливаем префикс и суффикс.Если имя логического представления, возвращаемое в контроллере, является индексом, фактическое представление, найденное во время рендеринга, является /WEB-INF/classes/views/index.jsp, почему установлен префикс / WEB-INF/classes/views/ вместо /src/main/resources/views/, потому что каталог при компиляции и запуске проекта — /WEB-INF/classes/views/.
Если после компиляции в этой директории нет файла jsp, необходимо добавить в pom.xml следующую конфигурацию:
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.jsp</include>
<include>**/*.js</include>
</includes>
</resource>
</resources>
</build>
3.4 Веб-конфигурация
Новый класс веб-конфигурации WebInitializer выглядит следующим образом:
package chapter05.config;
import org.springframework.web.WebApplicationInitializer;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.DispatcherServlet;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRegistration.Dynamic;
public class WebInitializer implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
context.register(MyMvcConfig.class);
context.setServletContext(servletContext);
Dynamic servlet = servletContext.addServlet("dispatcher", new DispatcherServlet(context));
servlet.addMapping("/");
servlet.setLoadOnStartup(1);
}
}
Ключевым моментом здесь является то, что этот класс реализует интерфейс WebApplicationInitializer и переписывает метод onStartup() Класс WebApplicationInitializer — это интерфейс, предоставляемый Spring для настройки конфигурации версии Servlet 3.0+, который может заменить web.xml.
3.5 Создайте новый контроллер
Новый контроллер HelloController выглядит следующим образом:
package chapter05.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class HelloController {
@RequestMapping("/index")
public String hello() {
// 这里返回的逻辑视图名
return "index";
}
}
в коде выше@Controller
В аннотации заявлено, что это контроллер,@RequestMapping("/index")
Используется для настройки сопоставления URL-адресов, теперь вопрос в том, как мы можем проверить работающий эффект кода?
Это включает в себя упаковку и развертывание проекта, и мы продолжаем смотреть вниз.
4. Разверните проект на Tomcat
4.1 Упаковка (военный пакет)
Поскольку нашим проектом управляет Maven, а метод упаковки также настроен как военный пакет и подключаемый модуль упаковки в pom.xml, поэтому мы можем найти диспетчер ресурсов Maven в правой части IDEA, а затем нажать «Очистить», как показано ниже. :
Затем нажмите на пакет:
Окончательный сгенерированный военный пакет выглядит следующим образом:
Это военный пакет, который мы собираемся развернуть в Tomcat.
4.2 Установка и развертывание Tomcat
Поскольку он должен быть развернут на Tomcat, необходимо ответить на 2 вопроса:
- Что такое Томкэт?
- Как устанавливается Tomcat?
Чтобы сначала ответить на первый вопрос, Tomcat — это бесплатный легкий сервер веб-приложений с открытым исходным кодом.Если вы знакомы с веб-разработкой .NET, он похож на IIS.
Чтобы ответить на второй вопрос, вы можете установить Tomcat, выполнив следующие действия.
Открытымофициальный сайт Томкэт, найдите версию Tomcat, которую вы хотите загрузить, я выбрал версию Tomcat 8.5.45 Released здесь:
Затем выберите подходящую версию для загрузки, поскольку мой компьютер для разработки представляет собой 64-разрядную ОС Windows, поэтому я выбрал версию, показанную ниже:
После загрузки разархивируйте его в нужный вам каталог, я разархивировал каталог E:\Tools\apache-tomcat-8.5.45-windows-x64\apache-tomcat-8.5.45, после завершения извлечения до тех пор, пока:
Где webapps — это каталог, в котором должен быть развернут веб-сайт.
После завершения установки возникает вопрос, как запустить Tomcat?
Первый способ — дважды щелкнуть tomcat8.exe в каталоге bin:
Затем введите адрес http://localhost:8080/ в браузере и увидите следующий интерфейс, что означает, что установка и развертывание Tomcat прошли успешно.
Недостатком использования этого метода является то, что если окно, открытое tomcat8.exe, будет закрыто, Tomcat также будет закрыт, что очень неудобно, поэтому рекомендуется использовать второй способ, чтобы установить Tomcat в качестве фоновой службы и позволить ему работать в фоновом режиме. , метод работы следующий:
Затем нажмите открыть компьютер - Свойства - Дополнительные параметры системы - Дополнительно - Переменные среды, новые системные переменные:
Имя переменной: CATALINA_HOME
Значение переменной: E:\Tools\apache-tomcat-8.5.45-windows-x64\apache-tomcat-8.5.45 (каталог, в который вы распаковали Tomcat)
Затем отредактируйте системную переменную Path и добавьте в конец следующее:
;%CATALINA_HOME%\lib;%CATALINA_HOME%\bin
Затем откройте окно cmd от имени администратора, перейдите в каталог bin Tomcat и выполните команду: service.bat install.
Затем откройте список служб Windows, и вы увидите службу Tomcat8:
Измените службу для автоматического запуска и запуска службы для постоянной работы сервера Tomcat в фоновом режиме.
Если вам интересно, почему новые системные переменные должны быть CATALINA_HOME, вы можете использовать Блокнот, чтобы открыть каталог bin service.bat, см. следующее, которое вы поймете:
На приведенном выше рисунке также видно, что запуск Tomcat должен полагаться на переменную среды JAVA_HOME (настроить путь JAVA SDK), но я настроил ее раньше, как показано ниже:
4.3 Разверните военный пакет на Tomcat
Скопируйте ранее упакованный файл spring-action-1.0-SNAPSHOT.war в каталог веб-приложений Tomcat:
Поскольку наш сервер Tomcat настроен на работу в фоновом режиме, через некоторое время в каталоге будет создана папка spring-action-1.0-SNAPSHOT с тем же именем, что и у военного пакета.Структура каталогов выглядит следующим образом:
Наш код и файлы представления JSP находятся в папке классов в каталоге WEB-INF:
Введите адрес http: // localhost: 8080 / Spring-Action-1.0-Snapshot / index в браузере, дисплей страницы выглядит следующим образом:
5. Исходный код и ссылка
Адрес источника:GitHub.com/Где находится Ухань/SPR…, добро пожаловать на скачивание.
Весна в действии (4-е издание) Крейга Уоллса
Ван Юньфэй, «Разрушитель разработки Java EE: Spring Boot в действии»