【Spring教程25】Spring框架实战:从零开始学习SpringMVC 之 SpringMVC入门案例总结与SpringMVC工作流程分析

目录

  • 1.入门案例总结
  • 2. 入门案例工作流程分析
    • 2.1 启动服务器初始化过程
    • 2.2 单次请求过程

欢迎大家回到《Java教程之Spring30天快速入门》,本教程所有示例均基于Maven实现,如果您对Maven还很陌生,请移步本人的博文《如何在windows11下安装Maven并配置以及 IDEA配置Maven环境》,本文的上一篇为《SpringMVC入门案例代码示例》
在这里插入图片描述

1.入门案例总结

SpringMVC入门程序开发总结(1+N)

  • 一次性工作
    • 创建工程,设置服务器,加载工程
    • 导入坐标
    • 创建web容器启动类,加载SpringMVC配置,并设置SpringMVC请求拦截路径
    • SpringMVC核心配置类(设置配置类,扫描controller包,加载Controller控制器bean)
  • 多次工作
    • 定义处理请求的控制器类
      *定义处理请求的控制器方法,并配置映射路径(@RequestMapping)与返回json数据(@ResponseBody)
    • 多次工作我们可以通过实现一个用户的删除功能来体验一把
      • controller类中编写删除方法
//2.制作控制器类,等同于Servlet
//2.1必须是一个spring管理的bean
//2.2定义具体处理请求的方法
//2.3设置当前方法的访问路径
//2.4设置响应结果为json数据
@Controller
public class UserController {@RequestMapping("/save")@ResponseBodypublic String save(){System.out.println("user save ...");return "{'module':'springmvc'}";}@RequestMapping("/delete")@ResponseBodypublic String delete(){System.out.println("user delete ...");return "{'module':'springmvc delete '}";}
}
  • 重启服务器,访问http://localhost/delete ,可以看得如下效果
    在这里插入图片描述
    最后针对本案例中出现的Tomcat的Servlet容器配置再来总结下:
  • AbstractDispatcherServletInitializer类是SpringMVC提供的快速初始化Web3.0容器的抽象类
  • AbstractDispatcherServletInitializer提供三个接口方法供用户实现
    • createRootApplicationContext()方法,如果创建Servlet容器时需要加载非SpringMVC对应的bean,使用当前方法进行,使用方式同createServletApplicationContext()
    • createServletApplicationContext()方法,创建Servlet容器时,加载SpringMVC对应的bean并放入WebApplicationContext对象范围中,而WebApplicationContext的作用范围为ServletContext范围,即整个web容器范围
    • ngetServletMappings()方法,设定SpringMVC对应的请求映射路径,设置为/表示拦截所有请求,任意请求都将转入到SpringMVC进行处理
    • createServletApplicationContext用来加载SpringMVC环境
    • createRootApplicationContext用来加载Spring环境

2. 入门案例工作流程分析

为了更好的使用SpringMVC,我们将SpringMVC的使用过程总共分两个阶段来分析,分别是启动服务器初始化过程和单次请求过程
在这里插入图片描述

2.1 启动服务器初始化过程

  1. 服务器启动,执行ServletContainersInitConfig类,初始化web容器
  2. 执行createServletApplicationContext方法,创建了WebApplicationContext对象
    • 该方法加载SpringMVC的配置类SpringMvcConfig来初始化SpringMVC的容器
  3. 加载SpringMvcConfig配置类
    在这里插入图片描述
  4. 执行@ComponentScan加载对应的bean
    • 扫描指定包下所有类上的注解,如Controller类上的@Controller注解
  5. 加载UserController,每个@RequestMapping的名称对应一个具体的方法

在这里插入图片描述
* 此时就建立了 /save 和 save方法的对应关系
6. 执行getServletMappings方法,定义所有的请求都通过SpringMVC
在这里插入图片描述

  • /代表所拦截请求的路径规则,只有被拦截后才能交给SpringMVC来处理请求

2.2 单次请求过程

  1. 发送请求localhost/save
  2. web容器发现所有请求都经过SpringMVC,将请求交给SpringMVC处理
    • 因为符合上面第六步设置的请求路径,所以该请求会交给SpringMVC来处理
  3. 解析请求路径/save
  4. 由/save匹配执行对应的方法save()
    • 上面的第五步已经将请求路径和方法建立了对应关系,通过/save就能找到对应的save方法
  5. 执行save()
  6. 检测到有@ResponseBody直接将save()方法的返回值作为响应求体返回给请求方

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/264998.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JVM虚拟机系统性学习-类加载子系统

类加载子系统 类加载的时机 类加载的时机主要有 4 个: 遇到 new、getstatic、putstatic、invokestatic 这四条字节码指令时,如果对应的类没有初始化,则要先进行初始化 new 关键字创建对象时读取或设置一个类型的静态字段时(被 …

[AutoSar]一种ECU间CAN通信的优化方法

目录 关键词平台说明一、背景二、问题现象三、原因四、解决办法五、实现5.1 配置5.2 code 关键词 嵌入式、C语言、autosar 平台说明 项目ValueOSautosar OSautosar厂商EB芯片厂商英飞凌 TC397编程语言C,C编译器TASKING 一、背景 在一个项目中,会从多个…

学习 NVIDIA Omniverse 的最基础概念

无用的前言 近两年关于 Omniverse 的宣传一直很多,可我一直没去了解,连它是个啥都不知道。最近正好有契机需要了解它,于是我今天抽时间看了些它的官方介绍,并按照自己的理解梳理在这里。 官方资料索引 Omniverse 官网主页&…

向IDEA导入SpringBoot项目如何运行

解析项目 拿到项目之后,先分析分析。一般都有.md文件指导你,给你说用什么语言,工具,jdk版本,数据库版本,有没有maven。如果没有就直接将项目导入idea. 1.配置maven,没有maven请看https://blog.csdn.net/m0_…

TTS | emotional-vits情绪语音合成的实现

本文主要介绍了情绪语音合成项目训练自己的数据集的实现过程~ innnky/emotional-vits: 无需情感标注的情感可控语音合成模型,基于VITS (github.com) 目录 0.环境设置 1.数据预处理 2..提取情绪 3.训练 4.推理 过程中遇到的问题与解决【PS】 0.环境设置 因为我…

mysql为什么不推荐使用uuid或者雪花id作为主键

1 前言 在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一,单机递增),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究竟有什么坏处? 本文我们就来分析这个问题,探讨…

机器视觉 齿轮检测

案例:齿轮内径检测 1.使用模板匹配 2.设置匹配区域 3.使用掩膜不必要的干扰 (保留两个内径的圆形) 1.添加找圆工具 2.添加模板匹配中心坐标 3.给外圈圆添加找圆工具 RunParams.ExpectedCircularArc.CenterX RunParams.ExpectedCircularArc.Cente…

(04730)电路分析基础之正弦交流电路(一)

正弦交流电概述 我们在前面已讨论了直流电路的分析,在直流电路中电压或电流的大小和方向都是不随时间而变化的;但在交流电路中,电压或电流的大小和方向都在随时间而变化,其变化规律多种多样,应用得最普遍的是按正弦规…

全志H6-ARMLinux第1天:全志概述、刷机登陆、官方外设库、蜂鸣器、超声波测距

1. 全志H616课程概述(456.01) 1.1 为什么学 学习目标依然是Linux系统,平台是ARM架构 蜂巢快递柜,配送机器人,这些应用场景用 C51、STM32 单片机无法实现第三方介入库的局限性,比如刷脸支付和公交车收费设…

#HarmonyOS:装饰器UI描述---@Link

装饰器 装饰器(Decorator)是一种语法结构,用来在定义时修改类(class)的行为。 在语法上,装饰器有如下几个特征。 第一个是字符(或者说前缀)是,后面是一个表达式后面的…

vscode eide arm-gcc 编译环境搭建调试

安装cube,vscode 1.安装vscode插件 C/C Extension Pack Chinese (Simplified) (简体中文) Language Pack Cortex-Debug Embedded IDE 工具链设置 2.软件工程生成 调试 3.生成工程,导入工程 4. 配置工程 编译完毕

【LeetCode刷题-树】-- 99.恢复二叉树

99.恢复二叉树 方法: 对二叉搜索树进行中序遍历得到值序列不满足的位置找到对应被错误交换的节点记为x和y交换x和y两个节点 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* Tre…