SpringMVC系列十三: SpringMVC执行流程 - 源码分析

源码分析

  • 执行流程图
  • 实验设计
  • 前端控制器分发请求
  • 处理器映射器
  • 处理器适配器
  • 调用目标方法
  • 调用视图解析器
  • 渲染视图
  • 作业布置

在这里插入图片描述

执行流程图

在这里插入图片描述

实验设计

1.新建com.zzw.web.debug.HelloHandler

@Controller
public class HelloHandler {

    //编写方法, 响应请求, 返回ModelAndView
    @RequestMapping(value = "/debug/springmvc")
    public ModelAndView hello(HttpServletRequest request, HttpServletResponse response) {
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("ok");//对应到 /WEB-INF/pages/ok.jsp
        modelAndView.addObject("name", "老韩");//在model中放入了数据
        return modelAndView;
    }
}

2.新建web路径/WEB-INF/ok.jsp

<head>
    <title>ok页面</title>
</head>
<body>
<h1>进入到ok页面</h1>
</body>

3.测试
在这里插入图片描述
3.调整ok.jsp, 再次测试

<body>
<h1>进入到ok页面</h1>
name - ${requestScope.name}
</body>

在这里插入图片描述

前端控制器分发请求

在这里插入图片描述

地址栏输入: http://localhost:8088/springmvc/debug/springmvc
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

❀❀Spring容器结构剖析❀❀

这里就体现了SpringMVC前端控制器和容器的关系

在这里插入图片描述

分发请求

在这里插入图片描述

处理器映射器

在这里插入图片描述
在这里插入图片描述

getHandler()

在这里插入图片描述

拿到目标方法

在这里插入图片描述

处理器适配器

在这里插入图片描述

根据Handler拿到适配器, 不同的适配器对应不同的handler

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

因为是浏览器地址栏请求, 所以是GET请求

在这里插入图片描述

反射调用handler

在这里插入图片描述

进入

在这里插入图片描述

进入

在这里插入图片描述
在这里插入图片描述

进入

在这里插入图片描述
在这里插入图片描述

调用目标方法

直接放行, 在目标方法打个断点

在这里插入图片描述

对modelAndView估值

在这里插入图片描述

不停地往下走, 往下走N步

在这里插入图片描述

mav就是我们目标方法的ModelAndView

在这里插入图片描述

继续往下走, 回到DisPatcherServlet

在这里插入图片描述

调用视图解析器

在这里插入图片描述

往下走

在这里插入图片描述

进入

在这里插入图片描述
在这里插入图片描述

进入

在这里插入图片描述

在这里插入图片描述

进入, 前端控制器调用某个视图解析器返回

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

渲染视图

在这里插入图片描述

下一步

在这里插入图片描述

进入

在这里插入图片描述

下一步

在这里插入图片描述

在这里插入图片描述

进入Step Into, 出来 Step out, 再进入Step Into. 拿到RequestDispatcher

在这里插入图片描述

请求转发

在这里插入图片描述

作业布置

1.把前面我们学过的SpringMVC异常处理相关代码和案例, 自己写一遍. - 一定要自己写一遍, 否则没有印象, 理解不会深入
2.简述SpringMVC执行流程, 并画出示意图
3.把我们Debug过的SpringMVC执行流程代码, 自己也走一下, 加深理解(不用每一条语句都debug, 主要是梳理流程)

在这里插入图片描述
下一讲, 我们学习springboot初步入门

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

GD 32点亮流水灯

1. 0 软件架构设置 2.0 API 接口以及数据结构定义 3.0 程序代码实现 程序项目的结构如下所示&#xff1a; 第一步&#xff1a;编写LED驱动&#xff0c;初始化驱动程序 创建结构体&#xff1a;第一个参数表示GPIO使能&#xff0c;第二个参数表示单片机的IO口&#xff0c;第三个…

html+css+js贪吃蛇游戏

贪吃蛇游戏&#x1f579;四个按钮控制方向&#x1f3ae; 源代码在图片后面 点赞❤️关注&#x1f64f;收藏⭐️ 互粉必回&#x1f64f;&#x1f64f;&#x1f60d;&#x1f60d;&#x1f60d; 源代码&#x1f4df; <!DOCTYPE html> <html lang"en"&…

idea删除分支并同步到gitLab以及gitLab上的分支删除

目录 idea删除分支并同步到gitLab 方法一&#xff08;推荐&#xff09; 方法二&#xff08;命令行&#xff09; gitLab上的分支删除 前言-与正文无关 ​ 生活远不止眼前的苦劳与奔波&#xff0c;它还充满了无数值得我们去体验和珍惜的美好事物。在这个快节奏的世界中&…

Tell Me Why:利用大型语言模型进行可解释的公共健康事实核查

Tell Me Why: Explainable Public Health Fact-Checking with Large Language Models 论文地址:https://arxiv.org/abs/2405.09454https://arxiv.org/abs/2405.09454 1.概述 最近的COVID-19大流行突显了公共健康领域事实核查的关键需求。在信息通过社交媒体平台迅速传播的时…

GPU 张量核心(Tensor Core)技术解读

一文理解 GPU 张量核心&#xff08;Tensor Core&#xff09; 引言 最新一代Nvidia GPU搭载Tensor Core技术&#xff0c;本指南深度解读其卓越性能&#xff0c;为您带来极致体验。 Nvidia最新GPU微架构中的核心技术——Tensor Core&#xff0c;自Volta起每代均获突破&#xf…

【漏洞复现】Emlog Pro 2.3.4——任意用户登入、会话持久化(CVE-2024-5044)

声明&#xff1a;本文档或演示材料仅供教育和教学目的使用&#xff0c;任何个人或组织使用本文档中的信息进行非法活动&#xff0c;均与本文档的作者或发布者无关。 文章目录 漏洞描述漏洞复现 漏洞描述 漏洞编号&#xff1a;CVE-2024-5044 漏洞成因&#xff1a; 在Emlog Pro …

加密与安全_ 解读非对称密钥解决密钥配送问题的四个方案

文章目录 Pre对称密钥的死穴 - 经典的密钥配送问题什么是非对称密钥非对称密钥解决密钥配送问题的四个方案共享密钥密钥分配中心&#xff08;KDC&#xff09;Diffie-Hellman 密钥交换体系公钥密码体系RSA算法 Pre 对称密钥的死穴 - 经典的密钥配送问题 假设 Alice 和 Bob 两个人…

阻塞赋值与非阻塞赋值

文章目录 一、何为“阻塞”&#xff1f;二、阻塞赋值与非阻塞赋值1. 阻塞式赋值“”2.非阻塞式赋值“<” 三、什么时候用阻塞赋值或非阻塞赋值&#xff1f; 一、何为“阻塞”&#xff1f; 所谓“阻塞”&#xff0c;可以理解为阻止顺序语句块中其他语句的执行。例如&#xf…

ASP.NET Core----基础学习04----Model模型的创建 服务的注入

文章目录 1. 创建Models文件夹&#xff0c;3个文件的内容如下&#xff1a;&#xff08;1&#xff09;模型的创建&#xff08;2&#xff09;服务的注入 1. 创建Models文件夹&#xff0c;3个文件的内容如下&#xff1a; &#xff08;1&#xff09;模型的创建 模型的基础类Student…

阿里云 Ubuntu 开启允许 ssh 密码方式登录

以前用的 centos&#xff0c;重置系统为 ubuntu 后在ssh 远程连接时遇到了点问题&#xff1a; 在阿里云控制台重置实例密码后无法使用密码进行 SSH 连接登录 原因&#xff1a;阿里云 Ubuntu 默认禁用密码登录方式 解决办法&#xff1a; 先使用其他用户登录到服务器 这里进来…

Java中多线程经典案例

案例一单例模式 只有一个对象,只实例化一个对象 饿汉模式 在程序开始初期的实例化一个对象 static成员初始化时机是在类加载的时候,static修饰的instance只有唯一一个,初始化也是只执行一次,static修饰的是类属性,就是在类对象上的,每个类对象在JVM中只有一份,里面的静态成员…

下载安装JavaFX及解决报错:缺少 JavaFX 运行时组件, 需要使用该组件来运行此应用程序|Eclipse

目录 1.下载并解压 2.Eclipse配置 3.报错问题 解决方法1&#xff1a;将javaSE更改到9以下 解决方法2&#xff1a; 使用module-info.java配置解决 1.下载并解压 JavaFX下载地址&#xff1a;JavaFX - Gluon 选择合适自己电脑配置的sdk版本下载 打不开网页的参考这个博客&…

Demeditec Diagnostics — AMH ELISA试剂盒

抗缪勒氏管激素(AMH)&#xff0c;是一种二聚体分子量为140 KDa的糖蛋白&#xff0c;是转化生长因子-β (TGF-β)细胞因子家族&#xff0c;在生殖结构正常分化中起重要作用。AMH已被被确定为卵巢储备的可靠标志&#xff0c;有助于预测早期卵泡丢失和更年期开始。AMH水平也反映了…

【Python画图-seaborn驯化】一文学会seaborn画因子变量图catplot函数使用技巧

【Python画图-seaborn驯化】一文学会seaborn画因子变量图catplot函数使用技巧 本次修炼方法请往下查看 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合&#xff0c;智慧小天地&#xff01; &#x1f387; 免费获取相关内…

【运营版】公众号接口回调出租用出售微信公众号多域名无限回调授权系统+接口文档

此系统用于微信无限回调单个用户授权&#xff0c;如你的无限回调借给他人使用&#xff0c;怕他人泛滥您的无限回调&#xff0c;导致您的域名或者公众号经常封&#xff0c;那么你们可以用此系统给他们设置一个授权使用权限&#xff0c;如给指定域名添加授权登录&#xff0c;那么…

【Linux】目录的相关命令——cd,pwd,mkdir,rmdir

1.相对路径与绝对路径 在开始目录的切换之前&#xff0c;你必须要先了解一下所谓的路径&#xff08;PATH)&#xff0c;有趣的是&#xff1a;什么是相对路 与绝对路径&#xff1f; 绝对路径&#xff1a;路径的写法“一定由根目录/写起”&#xff0c;例如&#xff1a;/usr/shar…

间接平差——以水准网平差为例 (matlab详细过程版)

目录 一、原理概述二、案例分析三、代码实现四、结果展示本文由CSDN点云侠原创,间接平差——以水准网平差为例 (matlab详细过程版),爬虫自重。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT生成的文章。 一、原理概述 间接平差的函数模型和随机模型…

深入分析 Android BroadcastReceiver (十)(完)

文章目录 深入分析 Android BroadcastReceiver (十)1. 深入理解 Android 广播机制的高级应用与实践1.1 高级应用1.1.1 示例&#xff1a;广播启动服务1.1.2 示例&#xff1a;数据变化通知1.1.3 示例&#xff1a;下载完成通知 1.2 实践建议1.2.1 设置权限1.2.2 动态注册和注销广播…

零基础STM32单片机编程入门(十) 28BYJ-48步进电机的控制实战含源码视频

文章目录 一.概要二.28BYJ-48步进电机介绍三.步进电机的主要特性四.步进电机驱动1.驱动硬件介绍2.四相八拍程序控制介绍 五.STM32单片机驱动步进电机正转反转实验六.CubeMX工程源代码下载七.讲解视频链接地址八.小结 一.概要 步进电机是将电脉冲信号转变为角位移或线位移的开环…

102.二叉树的层序遍历——二叉树专题复习

迭代方式&#xff1a; class Solution {// 定义一个成员变量res来存储层序遍历的结果List<List<Integer>> res new ArrayList<>();// levelOrder方法是层序遍历的接口&#xff0c;它接受一个二叉树的根节点rootpublic List<List<Integer>> lev…