SpringMvc执行流程源码解析

一、简介 

        Spring web Mvc是基于ServletApi构建的原始Web模块,从一开始就包含在Spring框架中;

从Servlet到SpringMvc

        最典型的MVc就是JSP+Servlet+javaBean的模式;

弊端:

        1、xml下配置Servlet的映射非常麻烦,效率低;

        2、必须要继承父类,重写方法侵入性强;

        3、如果想在一个Servlet中处理同一个业务模块的功能分发给不同的方法进行处理非常麻烦;

        4、参数解析麻烦;单个参数->pojo对象,Json文本->pojo对象;

        5、数据响应麻烦;pojo->json 

        6、跳转页面麻烦,对path控制;

所以SpringMVC就是在Servlet的基础上进行了封装;

二、Mvcweb开发的实现方式

      1、  给Servlet容器配置一个DispatcherServlet(web.xml )

      2、 添加SpringMVC的配置信息

继承类/实现接口方式:

implements HttpRequestHandler
implements Controller

不同的HandlerMapping:

<!‐‐通过设置属性的方式去设置映射路径‐‐>
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="httpRequest">simpleController</prop>
</props>
</property><!‐‐BeanNameUrlHandlerMapping 一定要为Controller设置一个有效映射地址的名字 如 @Con
troller("/xxxx")‐‐>
<bean
class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>

注解方式:配置控制器@Controller和处理方法的映射—@RequstMapping 即可

原理:说白了就是用一个DispatcherServlet 封装了一个Servlet的调度中心, 由调度中心帮我们调用我们的处理方法:在这个过程中调度中心委托给各个组件执行具体工作 ,比如帮我们映射方法请求、帮我解析参数、调用处理方法、响应数据和页面 等

三、SpringMvc的具体执行流程

中央Servlet DispatcherServlet为请求处理流程提供统一调度,实际工作交给可配置组件执行;

DispatcherServlet:前端调度器,负责将请求拦截下来分发给各控制方法中;

HandlerMapping: 处理器映射器,负责根据请求的URL和配置@RequestMapping映射去匹配, 匹配到会返回Handler;

HandlerAdaper: 处理器适配器,负责调用Handler-具体的方法- 返回视图的名字 Handler将它封装到ModelAndView;

ViewReslover:视图解析器, 根据ModelAndView里面的视图名地址去找到具体的jsp封装在View对象中;

View:进行视图渲染(将jsp转换成html内容 --这是Servlet容器的事情了) 最终response到的客户端;

四、详细源码请求流程

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

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

相关文章

【 yolo红外微小无人机-直升机-飞机-飞鸟目标检测】

yolo无人机-直升机-飞机-飞鸟目标检测 1. 小型旋翼无人机目标检测2. yolo红外微小无人机-直升机-飞机-飞鸟目标检测3. yolo细分类型飞机-鸟类-无人机检测4. yolo红外大尺度无人机检测5. 小型固定翼无人机检测6. 大型固定翼无人机检测7. yolo航空俯视场景下机场飞机检测 1. 小型…

git clone拉取项目时报错xxx bytes of body are still expected

报错如下&#xff1a; 尝试了网友们的各种方法&#xff1a; 1、可能缓存区溢出&#xff0c;执行以下语句&#xff0c;将缓存设置为500M或者更大 git config http.postBuffer 524288000 2、可能项目过大&#xff0c;先进行浅克隆&#xff0c;然后更新远程库到本地 git clone…

鸿蒙APP应用开发教程—超详细的项目结构说明

1. 新建项目 打开DevEco Studio, 选择 Create Project: 1.1 选择模版 Create Project - Choose Template 1.2 配置项目 Create Project - Configure Project 如果使用的是 DevEco 3.X 版本, 可以根据 Compile SDK版本选择不同的模式, 比如: 3.0.0(API 8)及更早 - 仅支持 …

Python学习:循环语句

Python循环语句 概念 循环语句是编程中常用的结构&#xff0c;用于多次执行相同或类似的代码块。Python中有两种主要的循环语句&#xff1a;for循环和while循环。 for循环&#xff1a; for循环用于遍历一个序列&#xff08;如列表、元组、字符串等&#xff09;中的元素&#x…

VUE之首次加载项目缓慢

最近公司有个大型的项目&#xff0c;使用vue2开发的&#xff0c;但是最终开发完成之后&#xff0c;项目发布到线上&#xff0c;首次加载项目特别缓慢&#xff0c;有时候至少三十秒才能加载完成&#xff0c;加载太慢了&#xff0c;太影响用户体验了&#xff0c;最近研究了一下优…

“一树生三花”战略背后,梦之蓝·手工班的新使命

执笔 | 尼 奥 编辑 | 扬 灵 绵柔酒香&#xff0c;洋河酒韵。3月17日&#xff0c;由洋河股份主办的中国白酒发展趋势高峰论坛暨梦之蓝手工班战略升级发布会在成都隆重举办&#xff0c;协会领导、行业专家、名商大商齐聚一堂&#xff0c;梦之蓝手工班三款产品首次集体亮相&…

【第十二届“泰迪杯”数据挖掘挑战赛】【2024泰迪杯】B题基于多模态特征融合的图像文本检索—解题全流程(持续更新)

2024 年(第 12 届)“泰迪杯”数据挖掘挑战赛B题 解题全流程&#xff08;持续更新&#xff09; -----基于多模态特征融合的图像文本检索 一、写在前面&#xff1a; ​ 本题的全部资料打包为“全家桶”&#xff0c; “全家桶”包含&#xff1a;模型数据、全套代码、训练好的模…

NVIDIA NIM 提供优化的推理微服务以大规模部署 AI 模型

NVIDIA NIM 提供优化的推理微服务以大规模部署 AI 模型 生成式人工智能的采用率显着上升。 在 2022 年 OpenAI ChatGPT 推出的推动下&#xff0c;这项新技术在几个月内就积累了超过 1 亿用户&#xff0c;并推动了几乎所有行业的开发活动激增。 到 2023 年&#xff0c;开发人员…

QT 界面2.1

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {this->setWindowIcon(QIcon(":/Logo/1bc87d9b4c1ea878d5e0845257a06f7f (1).jpg")); // 图标this->setWindowTitle(&…

mysql日志管理 、备份与恢复

目录 一 MySQL 日志 &#xff08;一&#xff09;&#xff0c;日志位置 &#xff08;二&#xff09;配置文件中 与日志相关的代码 1&#xff0c;错误日志 2&#xff0c;通用查询日志 3&#xff0c;二进制日志(binlog) 4&#xff0c;中继日志 5&#xff0c;慢查询日志…

「薪酬设计」某维修服务公司维修技术人员薪酬体系设计项目纪实

——搭建合理薪酬制度&#xff0c;有效激励维修技术人员 本次薪酬体系设计项目持续的时间比较长&#xff0c;前后大约持续了半年时间&#xff0c;华恒智信团队对公司的多个模块都给予了分析&#xff0c;提供了建议方案&#xff0c;专家比较细心&#xff0c;服务很全面&#xf…

测试的思路总结

背景 这两天有一个之前做的需求出了问题。业务整体是一个流程类的业务&#xff0c;先通过一个多阶段的弹窗页面&#xff0c;从ABCDE等多个条件中选取三个生成一个任务&#xff0c;然后后台去跑任务&#xff0c;生成数据。具体需求是根据弹窗中的条件中&#xff0c;修改A、B、C…

C语言例4-14:从键盘输入小写字母转换成大写字母并输出。

代码如下&#xff1a; //从键盘输入小写字母转换成大写字母并输出。 #include<stdio.h> int main(void) {char c1,c2;printf("输入小写字母&#xff1a; \n");c1 getchar(); //从键盘输入一个字符putchar(c1);printf(",%d\n",c1);c2 c1-32; …

AI研报:从Sora看多模态大模型发展

《从Sora看多模态大模型发展》的研报来自浙商证券&#xff0c;写于2024年2月。 这篇报告主要探讨了多模态大模型的发展趋势&#xff0c;特别是OpenAI发布的视频生成模型Sora&#xff0c;以及其对行业发展的影响。以下是报告的核心内容概述&#xff1a; Sora模型的发布&#x…

unity小:使用Unity FBX Exporter 将 3DMax场景或者模型无损导入Unity

本指南旨在帮助您顺利安装和配置Unity FBX Exporter插件&#xff0c;并解决相关的常见问题。 安装 FBX Exporter 下载并安装FBX Exporter插件。 打开Unity&#xff0c;选择 Edit > Project Settings > Fbx Export。 点击 Install Unity Integration 并选择3ds Max的插…

Linux:rpm部署Jenkins(1)

1.获取Jenkins安装包 我这里使用的是centos7系统&#xff0c;ip为&#xff1a;192.168.6.6 2G运存 连接外网 Jenkins需要java环境&#xff0c;java的jdk包你可以去网上下载离线包&#xff0c;或者直接去yum安装&#xff0c;我这里使用的是yum安装 再去获取Jenkins的rpm包…

前三次笔记、表单和五彩导航

骨架&#xff1a; 笔记&#xff1a; 需要有包裹的内容&#xff0c;用双标签&#xff0c;不需要包裹内容就可以完成的操作用单标签 标签之间的关系只有父子关系和兄弟关系 标题标签只有h1-h6&#xff0c;且大小依次递减&#xff0c;独占一行 在段落标签“<p> </p>”…

Java项目:74 ssm基于Java的超市管理系统+jsp

作者主页&#xff1a;舒克日记 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 功能包括:商品分类&#xff0c;供货商管理&#xff0c;库存管理&#xff0c;销售统计&#xff0c;用户及角色管理&#xff0c;等等功能。项目采用mave…

3.25C++

定义自己的命名空间&#xff0c;其中有string类型的变量&#xff0c;再定义两个函数&#xff0c;一个函数完成字符串的输入&#xff0c;一个函数完成求字符串长度&#xff0c;再定义一个全局函数完成对该字符串的反转 #include <iostream> #include <cstring> usi…

C++细节

背景知识&#xff1a; 面向对象的编程中&#xff0c;类&#xff08;Class&#xff09;是创建对象的蓝图或模板&#xff0c;它包含了数据&#xff08;通常称为属性或变量&#xff09;和行为&#xff08;通常称为方法或函数&#xff09;。将数据封装为私有&#xff08;private&am…