SpringMVC入门案例及其工作流程

目录

  • 入门案例
    • [1 导入SpringMVC坐标与Servlet坐标](#1 导入SpringMVC坐标与Servlet坐标)
    • [2 创建SpringMVC控制器类](#2 创建SpringMVC控制器类)
    • [3 初始化SpringMVC环境](#3 初始化SpringMVC环境)
    • [4 初始化servlet容器,加载springmvc环境,并设置springmvc技术处理的请求](#4 初始化servlet容器,加载springmvc环境,并设置springmvc技术处理的请求)
  • 工作流程

入门案例

创建模块

1 导入SpringMVC坐标与Servlet坐标

dart 复制代码
 <dependencies>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
      <scope>provided</scope>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.2.10.RELEASE</version>
    </dependency>

  </dependencies>

2 创建SpringMVC控制器类

等同于Servlet功能

3 初始化SpringMVC环境

(同Spring环境),设定SpringMVC加载对应的bean

4 初始化servlet容器,加载springmvc环境,并设置springmvc技术处理的请求

dart 复制代码
package com.baidu.config;
// 4 定义一个servlet容器启动的配置类,在里面加载spring的配置
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.support.AbstractDispatcherServletInitializer;

public class ServletContainersInitConfig extends AbstractDispatcherServletInitializer {

//  加载springmvc容器配置
    protected WebApplicationContext createServletApplicationContext() {
        AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();

        ctx.register(SpringMvcConfig.class);

        return ctx;
    }

//    设置哪些请求归属springmvc处理
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }



//    加载spring容器配置
    protected WebApplicationContext createRootApplicationContext() {
        return null;
    }
}

添加tomcat插件

dart 复制代码
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.tomcat.maven</groupId>
        <artifactId>tomcat7-maven-plugin</artifactId>
        <version>2.1</version>
        <configuration>
          <port>80</port>
          <path>/</path>
        </configuration>
      </plugin>
    </plugins>
  </build>

启动

访问

注意:

@RequestMapping注解用来设置当前控制器方法请求访问路径

@ResponseBody用于设置当前控制器方法响应内容为当前返回值,无需解析

工作流程

启动服务器初始化过程

  1. 服务器启动,执行ServletContainersInitConfig类,初始化web容器
  2. 执行createServletApplicationContext方法,创建了WebApplicationContext对象
    3.加载SpringMvcConfig
    4.执行@ComponentScan加载对应的bean
    5.加载UserController,每个@RequestMapping的名称对应一个具体的方法
    6.执行getServletMappings方法,定义所有的请求都通过SpringMVC

单次请求过程

1.发送请求localhost/save

2.web容器发现所有请求都经过springMVC,将请求交给SpringMVC处理

3.解析请求路径/save

4.由/save匹配执行对应的方法save()

5.执行save()

6.检测到有 @ResponseBody 直接将 save () 方法的返回值作为响应体返回给请求方

相关推荐
swordbob10 分钟前
Spring事务失效的场景
java·开发语言·spring
仙俊红28 分钟前
Java JUC:CompletableFuture 详解,多个任务并行执行并等待全部完成
java·python·spring
云烟成雨TD38 分钟前
Spring AI Alibaba 1.x 系列【72】集成 MCP 客户端
java·人工智能·spring
我登哥MVP43 分钟前
SpringCloud 核心组件解析:服务注册与发现
java·spring boot·后端·spring·spring cloud·java-ee·maven
砍材农夫1 小时前
物联网实战:Spring Boot + Netty 搭建 MQTT 统一接入层
java·网络·spring boot·后端·物联网·spring
摇滚侠1 小时前
Spring 零基础入门到进阶 基于注解的声明式事务 65-70
数据库·mysql·spring
摇滚侠2 小时前
Spring 零基础入门到进阶 基于 XML 的声明式事务 71
xml·数据库·spring
番茄去哪了2 小时前
一篇文章讲懂SDN
java·spring
摇滚侠2 小时前
Spring 零基础入门到进阶 单元测试 JUnit 52-60
spring·junit·单元测试
c++之路2 小时前
CMake 系列教程(三):变量、条件与控制流
java·windows·spring