Spring MVC运行流程
一、配置阶段
①web.xml
②DispatcherServlet //Spring MVC总入口
③配置初始化参数 //classpath:application.xml,用于配置无数个bean
④servlet 请求路径配置,如/web/url, /*.json等
二、初始化阶段
① 调用 servlet 的init方法 //被web容器调用,如Tomcat,jetty
(以下是servlet 的init方法做的事情)
②找到配置文件所在路径,即加载application.xml中的内容,并解析
③扫描相关联的class(根据用户配置的包名去扫描)
④IOC容器的初始化
(IOC容器就是一个Map,类似(beanID,实例),即key是beanID,value是实例。默认情况下,以首字母小写的类名作为beanID。如果用户自定义了ID,那么优先使用用户定义的ID)
⑤依赖注入DI
(如果声明的类中,有需要注入的属性,即定义了成员变量,且需要赋值,那么spring会给此成员变量自动赋值)
⑥初始化一个HandlerMapping(HandlerMapping也是个Map, 其作用是将URL和@Controller中的某个方法进行一对一的关联,保存到一个Map中)
三、运行阶段
①service方法(分发 doGet/doPost方法,用户一旦在浏览器中输入一个URL,web容器就会自动调用该service方法)
②调用一个doDispatch方法(根据用户请求的URL去匹配已经初始化完毕的HandlerMapping中的Method)
③通过反射机制,动态调用上一步匹配到的Method,获取到返回值
④通过Response 输出
总结:
核心内容:
①加载配置文件
②扫描所有相关的类(一般是被托管的类,即有注解的类),将类名放到一个list (命名为classNames)中
③遍历list classNames,将所有相关Class的实例初始化,并且将其保存到IOC容器之中
④遍历ioc,进行自动化依赖注入
⑤初始化HandlerMapping,将URL与方法一一映射,存到map中(命名为handlerMapping)
⑥用户请求的时候做分发,去handlerMapping中寻找相对应的方法进行执行
Spring MVC运行流程的更多相关文章
- spring mvc处理流程概述
大部分Java应用都是Web应用,展现层是Web应用不可忽略的重要环节.Spring为展现层提供了一个优秀的Web框架-Spring MVC.和众多其他Web框架一样,它基于MVC设计理念,此外,它采 ...
- Spring MVC 编程流程步骤
Spring MVC 编程流程步骤 1. 建立Maven工程 2. 添加Spring MVC依赖 <dependencies> <dependency> <groupId ...
- 一文读懂Spring MVC执行流程
说到Spring MVC执行流程,网上有很多这方面的文章介绍,但是都不太详细,作为一个初学者去读会有许多不理解的地方,今天这篇文章记录一下我学习Spring MVC的心得体会 话不多说,先上图: ...
- Java——一文读懂Spring MVC执行流程
说到Spring MVC执行流程,网上有很多这方面的文章介绍,但是都不太详细,作为一个初学者去读会有许多不理解的地方,今天这篇文章记录一下我学习Spring MVC的心得体会 话不多说,先上图: Sp ...
- Spring MVC 数据绑定流程分析
1. 数据绑定流程原理★ ① Spring MVC 主框架将 ServletRequest 对象及目标方法的入参实例传递给 WebDataBinderFactory 实例,以创建 Data ...
- Spring MVC 请求处理流程概览
SpringMVC工作流程 图一:请求流程概述 图二:请求在每个组件的处理 解释Spring工作流程 1.用户向服务器发送请求,请求被spring前端控制Servelt DispatcherServe ...
- Spring MVC请求处理流程
从web.xml中 servlet的配置开始, 根据servlet拦截的url-parttern,来进行请求转发 Spring MVC工作流程图 图一 图二 Spring工作流程描述 ...
- spring MVC的流程
spring MVC的工作流程
- Spring mvc请求处理流程详解(一)之视图解析
本文链接:https://blog.csdn.net/lchpersonal521/article/details/53112728 前言 Spring mvc框架相信很多人都很熟悉了,关于这方面 ...
随机推荐
- Microsoft Soft SQL Server 大数据----分区表性能测试
分区表 MSSQL有一个大数据储存方案,可以提高效率那就是分区表. 使用起来跟普通表没有区别.至于具体原理自己度娘吧. 真正性能的提高,是依赖于硬件的加入.也是就说,当把一个表设置成分区表,每一个分区 ...
- LightningChart最新版 v.8.3 全新发布,新功能使用教程。
LightningChart最新版v.8.3全新发布,主要介绍以下五个新功能及使用教程. 1. 网格模型,三角鼠标追踪 Tracing MeshModels with mouse. Traced ...
- Linux--慕课学习
刚开始接触Linux,很有幸的在慕课网上看到了Peter老师的Linux入门课程,老师讲课真的式行云流水,深入浅出,循循善诱,层层递进. 老师分享的都是自己多年来总结的经验.看完之后也学到了很多东西. ...
- 十个你需要在 PHP 7 中避免的坑
1. 不要使用 mysql_ 类函数 终于,你不用再看到建议不要使用 mysql_ 函数的提示了.因为 PHP 7 从核心上完全移除了它们,这意味着请你移步至更好的 mysqli_ 类函数,或者更灵活 ...
- python Django注册页面显示头像
python Django注册页面显示头像(views) def register(request): ''' 注册 :param request: :return: ''' if request.m ...
- 测试驱动开发实践5————testSave之修改文档分类
[内容指引] 1.确定"修改文档分类"的微服务接口及所需的参数 2.设计测试用例及测试用例合并 3.为测试用例赋值并驱动开发 上一篇我们通过17个测试用例完成了"新增文档 ...
- Spring(六):Spring&Struts2&Hibernate搭建的blog项目
经过断断续续的学习.累积,终于基于别人的开源blog项目,变成了自己的第一个相对完整点的blog项目. 计划暂时把这个blog程序暂停------有更多(工作中用到的)东西需要去做,因此学习SSH b ...
- 南京邮电大学java程序设计作业在线编程第一次作业
王利国的"Java语言程序设计第1次作业(2018)"详细 作业结果详细 总分:100 选择题得分:40 1. Java语言中,基本数据类型一共有( )种. A.16 B.2 C ...
- html标记语言 --格式标记
html标记语言 --格式标记 一.格式标记 1.<br>单标记,强制换行标记,让后面的文字.图片.表格等显示在下一行 2.<p>换段落标记 3.<center>居 ...
- shell多进程脚本
#!/bin/bash python_path=/home/huaw/crawler python_name=list_all_v6_crawler.py MAX_SYNC_PROCESS=40 ec ...