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 () 方法的返回值作为响应体返回给请求方

相关推荐
二哈赛车手7 小时前
新人笔记---ApiFox的一些常见使用出错
java·笔记·spring
阿维的博客日记10 小时前
Nacos 为什么能让配置动态生效?(涉及 @RefreshScope 注解)
java·spring
tongluowan00716 小时前
@Autowired 和 @Resource 有什么区别?
java·spring·bean
海兰18 小时前
【第21篇-续】graph-Stream-Node改造为适配openAI模型示例
java·人工智能·spring boot·spring·spring ai
夕除20 小时前
spring boot 9
java·mysql·spring
happymaker062620 小时前
Spring学习日记——DAY03(yml文件)
java·spring boot·spring
霸道流氓气质20 小时前
Spring AI 结构化输出 Agent 实战:让大模型返回精准 JSON
人工智能·spring·json
段ヤシ.21 小时前
回顾Java知识点,面试题汇总Day10(持续更新)
java·开发语言·spring
小江的记录本1 天前
【Java基础】集合框架: ArrayList vs LinkedList 核心区别、扩容机制(附《思维导图》+《面试高频考点清单》)
java·数据库·python·mysql·spring·面试·maven
夕除1 天前
spring boot 10
java·python·spring