Каталог статей
SpringMVC
Быстрый запуск Spring MVC
SpringMVC — это легкий веб-фреймворк, реализующий модель MVC на основе Java.
преимущество
Простой в использовании и удобный в разработке (по сравнению с Servlet)
Сильная гибкость
Используйте технологию SpringMVC для разработки потока веб-программы :
1. Создайте веб-проект (структура Maven)
2. Настройте сервер tomcat и загрузите веб-проект (плагин tomcat)
3. Импорт координат (SpringMVC+Servlet)
4. Определите функциональный класс (UserController), который обрабатывает запрос
5. Установите сопоставление запросов (отношения сопоставления конфигурации)
6. Загрузите настройки SpringMVC в контейнер Tomcat.
Вводный запас знаний по делу :
@Controller, аннотация класса
Роль: определить основной контроллер SpringMVC как bean-компонент.
@Controller
public class UserController {
}
@RequestMapping, аннотация метода
Роль: определена выше метода контроллера SpringMVC, устанавливает текущий путь доступа к запросу метода контроллера.
@RequestMapping("/save")
public void save(){
System.out.println("user save ...");
}
@ResponseBody, аннотация метода
Функция: определенная выше метода контроллера SpringMVC, установите содержимое ответа текущего метода контроллера в качестве текущего возвращаемого значения без синтаксического анализа.
@RequestMapping("/save")
@ResponseBody
public String save(){
System.out.println("user save ...");
return "{'info':'springmvc'}";
}
Реализация случая SpringMVC :
Структура каталогов
Импорт координат SpringMVC и координат сервлета ( импорт координат spring-webmvc автоматически зависит от координат, связанных с spring )
<dependencies>
<!--servlet坐标-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<!--SpringMVC坐标-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.10.RELEASE</version>
</dependency>
</dependencies>
Инициализируйте среду SpringMVC (такую же, как среда Spring): создайте класс контроллера ( эквивалент функции сервлета )
// 定义controller
@Controller // 定义为bean
public class UserController {
@RequestMapping("/save") // 设置当前操作的访问路径
@ResponseBody // 设置响应内容为当前返回值类型
public String save() {
// 提供给外部一个方法处理请求
System.out.println("user save...");
return "{'module':'SpringMVC'}"; // 返回一个JSON字符串
}
}
Установите файл конфигурации SpringMVC и загрузите определенный нами компонент контроллера.
@Configuration
@ComponentScan("com.chenyq.controller")
public class SpringMvcConfig {
}
Определите класс конфигурации для запуска контейнера сервлетов и загрузите в него конфигурацию spring, чтобы позволить серверу Tomcat загружать класс конфигурации SpringMVC при запуске; класс конфигурации наследует AbstractDispatcherServletInitializer и переопределяет метод
public class ServletContainersInitConfig extends AbstractDispatcherServletInitializer {
// 加载springMVC容器配置的方法
@Override
protected WebApplicationContext createServletApplicationContext() {
AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
ctx.register(SpringMvcConfig.class);
return ctx ;
}
// 设置哪些请求归属是springMVC处理的方法
@Override
protected String[] getServletMappings() {
// 固定格式, 表示设置所有请求都归SpringMVC管理
return new String[]{
"/"};
}
// 加载spring容器配置的方法
@Override
protected WebApplicationContext createRootApplicationContext() {
return null;
}
}
Запустите сервер Tomcat /save
для доступа и отображения данных, что означает, что случай входа успешен.
контроль загрузки бобов
Управление загрузкой контроллера и управление загрузкой бизнес-бинов :
SpringMVC управляет bean-компонентами, связанными с уровнем представления.
Spring управляет компонентами бизнес-уровня, компонентами уровня массива и т. д.
Из-за разных функций нам нужно избегать неправильной загрузки bean-компонентов Spring в SpringMVC.
Решение. При загрузке компонентов, контролируемых Spring, исключайте компоненты, контролируемые SpringMVC.
Управление загрузкой bean-компонентов, связанное с SpringMVC
Все пакеты, соответствующие bean-компонентам, загруженным SpringMVC, находятся в пакете com.chenyq.controller.Пусть SpringMVC сканирует только пакет com.chenyq.controller.
Управление загрузкой bean-компонентов, связанное с Spring
Способ 1: bean-компонент, загружаемый Spring, устанавливает диапазон сканирования com.chenyq, но bean-компонент в пакете контроллера должен быть исключен
- excludeFilters: исключить бины, загруженные в пути сканирования, нужно указать категорию (тип) и конкретные элементы (классы)
- includeFilters: для загрузки указанного bean-компонента необходимо указать категорию (тип) и конкретные элементы (классы)
@Configuration
@ComponentScan(
value = "com.chenyq",
excludeFilters = @ComponentScan.Filter(
type = FilterType.ANNOTATION,
classes = Controller.class
)
)
public class SpringConfig {
}
Способ 2: bean-компонент, загружаемый Spring, устанавливает диапазон сканирования в точном диапазоне, например: пакет com.service, пакет com.dao и т. д.
@Configuration
@ComponentScan({
"com.chenyq.service", "com.chenyq.dao"})
public class SpringConfig {
}
Способ 3: не делайте различий между средами Spring и SpringMVC, загружайте их в одну и ту же среду
// ServletContainersInitConfig.class
public class ServletContainersInitConfig extends AbstractDispatcherServletInitializer {
// 加载springMVC容器配置的方法
@Override
protected WebApplicationContext createServletApplicationContext() {
AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
ctx.register(SpringMvcConfig.class);
return ctx ;
}
// 加载spring容器配置的方法
@Override
protected WebApplicationContext createRootApplicationContext() {
AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
ctx.register(SpringConfig.class);
return ctx ;
}
// 设置哪些请求归属是springMVC处理的方法
@Override
protected String[] getServletMappings() {
// 设置所有请求都归SpringMVC管理
return new String[]{
"/"};
}
}
Упростите код: наследуйте класс AbstractAnnotationConfigDispatcherServletInitializer.
public class ServletContainersInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer {
protected Class<?>[] getRootConfigClasses() {
return new Class[]{
SpringConfig .class};
}
protected Class<?>[] getServletConfigClasses() {
return new Class[]{
SpringMvcConfig.class};
}
protected String[] getServletMappings() {
return new String[]{
"/"};
}
}