Spring MVC 原理 - DispatcherServlet调用完整过程(上)
2014-03-10 21:03
239 查看
本篇主要讲解了Spring mvc的调用过程,通过这个过程来了解Spring的原理。
进入web.xml中配置的Spring拦截(调度)器:
调用堆栈信息:
开始拦截,这一步主要是根据request获取handler(该handler可以配置):
(接上面方法)这段代码中的if(isGet…主要解决浏览器的缓存问题,如果没有过修改,则返回(浏览器可能会用缓存响应)。
调用方法handler:
进入handler方法:
进入方法invokeHandlerMethod:
440行进入下一个方法invokeHandlerMethod:
进入该方法:
171行进入处理参数的方法:
处理参数的方法,使用参数类型进行for循环:
获取一个参数的注解:
通过下面方法返回注解数组:
其中parameterIndex在创建该对象时赋值,和参数类型的位置是对应的(下图中的i):
获取注解之后,对注解进行遍历,通过判断注解类型来获取paramName或headerName或其他:
在每个if中的defaultValue中,方法parseDefaultValueAttribute用来获取注解的默认值设置:
可以看到系统用了一个不常用的字符串作为默认值,用这个值和传入的value进行比较,使用这个值的目的是尽可能和用户设置的值区分开。
指定类型的注解(if判断里面的),只能存在一个,超过1个会报错:
如果没有注解,则判断类型是否为常用的(request,response,session等):
对于没有注解的参数,可能会执行下面的方法:
进入处理标准类型的方法:
通过上面的方法判断出基本的类型。
回到有注解的情况,针对不同的注解,具体处理过程如下(if顺序没有优先级,因为只有一个注解,一种情况):
到这一步,会根据具体的注解类型执行不同的resolve***()方法。
resolve***的方法最终返回的是类型符合要求(resolve内部有各种类型转换的方法)的参数值。
最后处理完成,返回参数列表:
反射调用方法:
进入用户写的处理方法中:
在用户方法执行完成后,返回:
到这里,主要的方法就执行完了,后面还有对返回结果result的处理,后面的内容不是很多了,由于本篇已经包含了30多张图片,插入图片已经很不方便,所以考虑分成两个部分来说明,并且尽力让这第一部分比较完整。
进入web.xml中配置的Spring拦截(调度)器:
调用堆栈信息:
开始拦截,这一步主要是根据request获取handler(该handler可以配置):
(接上面方法)这段代码中的if(isGet…主要解决浏览器的缓存问题,如果没有过修改,则返回(浏览器可能会用缓存响应)。
调用方法handler:
进入handler方法:
进入方法invokeHandlerMethod:
440行进入下一个方法invokeHandlerMethod:
进入该方法:
171行进入处理参数的方法:
处理参数的方法,使用参数类型进行for循环:
获取一个参数的注解:
通过下面方法返回注解数组:
其中parameterIndex在创建该对象时赋值,和参数类型的位置是对应的(下图中的i):
获取注解之后,对注解进行遍历,通过判断注解类型来获取paramName或headerName或其他:
在每个if中的defaultValue中,方法parseDefaultValueAttribute用来获取注解的默认值设置:
可以看到系统用了一个不常用的字符串作为默认值,用这个值和传入的value进行比较,使用这个值的目的是尽可能和用户设置的值区分开。
指定类型的注解(if判断里面的),只能存在一个,超过1个会报错:
如果没有注解,则判断类型是否为常用的(request,response,session等):
对于没有注解的参数,可能会执行下面的方法:
进入处理标准类型的方法:
通过上面的方法判断出基本的类型。
回到有注解的情况,针对不同的注解,具体处理过程如下(if顺序没有优先级,因为只有一个注解,一种情况):
到这一步,会根据具体的注解类型执行不同的resolve***()方法。
resolve***的方法最终返回的是类型符合要求(resolve内部有各种类型转换的方法)的参数值。
最后处理完成,返回参数列表:
反射调用方法:
进入用户写的处理方法中:
在用户方法执行完成后,返回:
到这里,主要的方法就执行完了,后面还有对返回结果result的处理,后面的内容不是很多了,由于本篇已经包含了30多张图片,插入图片已经很不方便,所以考虑分成两个部分来说明,并且尽力让这第一部分比较完整。
相关文章推荐
- Spring MVC 原理 - DispatcherServlet调用完整过程(下)
- Spring MVC 原理 - DispatcherServlet调用完整过程(上)
- Spring MVC 原理 - DispatcherServlet调用完整过程(下)
- Spring MVC 原理 - DispatcherServlet调用完整过程
- Spring MVC 原理 - DispatcherServlet调用完整过程(下)
- GDB踪函数的完整调用过程 及原理
- 软件开发过程自动化原理及技术(完整示例)
- C#调用存储过程简单完整例子
- C函数调用过程原理及函数栈帧分析
- Spring mvc调用mysql储存过程
- C#调用存储过程简单完整例子
- JNI注册调用源码分析完整过程-安卓4.4
- C函数调用过程原理及函数栈帧分析
- Matlab与C/C++联合编程之Matlab以MEX方式调用C代码(五)完整过程加示
- 深入理解计算机系统(3.7)------过程(函数的调用原理)
- <深入浅出>根据函数调用过程谈栈回溯原理
- ssh三大框架,三层架构 整合测试!完整分页代码,JdbcTemplate等测试,存储过程调用,留着以后复习吧
- qt中designer设计GUI并调用的过程原理
- 转: 数字证书原理 https 完整过程解析
- 存储过程从入门到熟练(多个存储过程完整实例及调用方法)