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到的客户端;

四、详细源码请求流程

相关推荐
计艺回忆路2 小时前
Hive自定义函数(UDF)开发和应用流程
hive·自定义函数·udf
万能小锦鲤16 小时前
《大数据技术原理与应用》实验报告三 熟悉HBase常用操作
java·hadoop·eclipse·hbase·shell·vmware·实验报告
天翼云开发者社区1 天前
数据治理的长效机制
大数据·数据仓库
王小王-1231 天前
基于Hadoop与LightFM的美妆推荐系统设计与实现
大数据·hive·hadoop·大数据美妆推荐系统·美妆商品用户行为·美妆电商
一切顺势而行1 天前
hadoop 集群问题处理
大数据·hadoop·分布式
万能小锦鲤2 天前
《大数据技术原理与应用》实验报告七 熟悉 Spark 初级编程实践
hive·hadoop·ubuntu·flink·spark·vmware·实验报告
项目題供诗2 天前
Hadoop(二)
大数据·hadoop·分布式
Leo.yuan2 天前
ETL还是ELT,大数据处理怎么选更靠谱?
大数据·数据库·数据仓库·信息可视化·etl
万能小锦鲤2 天前
《大数据技术原理与应用》实验报告五 熟悉 Hive 的基本操作
hive·hadoop·ubuntu·eclipse·vmware·实验报告·hiveql
張萠飛2 天前
flink sql如何对hive string类型的时间戳进行排序
hive·sql·flink