在传统的MVC模式中,Tomcat通过读取web.XML配置文件来获取servlet和访问路径的映射关系,这样在访问tomcat就能将请求转发给对应的servlet进行处理。

自定义的servlet是需要继承HttpServlet这个类,众所周知,一个servlet的生命周期是要经历的init()、service()、destory()这几个过程,最初通过继承GenericServlet类重写上面三个方法来实现自定义的servlet,之后通常是通过继承HttpServlet这个类是实现doGet()和doPost()来实现自定义的servlet。其实HttpServlet也是继承了GenericServlet重写了生命周期方法将servletResquest和servletResponse强转成HttpServletRequset和HttpServletResponse,然后使用模板方法的设计模式,判断请求方式进行调用重写的方法。

接下来转回正题,查看SpringMVC的调用过程,在SpringMVC中只使用了DispatcherServlet来拦截了所有的请求,在上次将filter的调用过程中,最后执行的servlet就是dispatcherServlet,在创建ApplicationFilterChain的时候就将其给赋值进去了。

DispatcherServlet也是继承了HttpServlet类,可以去debug查看DispatcherServlet和HttpServlet之间的继承关系,在接下来的几步父类和子类之间重写方法的互相调用,重点是如何由通过映射调用到Servlet到通过路径找到对应控制器的方法。主要的执行语句是:org/springframework/web/servlet/handler/AbstractHandlerMapping.class:225

可以看到根据request找到相对应控制器的方法的元数据信息,即org.springframework.web.method.HandlerMethod

深入方法中可以看到org.springframework.web.servlet.handler.AbstractHandlerMethodMapping中存储控制器中路径和方法元数据的的数据结构

其实到这里我们可以猜出是通过反射调用的方式来请求控制器方法的了,具体的调用语句是:

org/springframework/web/method/support/InvocableHandlerMethod.class:102

剩下的就是获取HandleMethod中的Method和bean、request中的args,进行反射调用了。

在这其中的数据组装就不涉及了。

最新文章

  1. 集群下session共享问题的解决方案.
  2. 25M电子琴实现
  3. mahout 安装测试
  4. TCP字节流和UDP数据报区别
  5. 编译gcc
  6. iOS 加急申请每个开发者必须会
  7. sqlserver08评估期已过的解决方法
  8. 深刻理解和运用XMLHttpRequest
  9. Maven搭建webService (二) 创建服务端---使用web方式发布服务
  10. 网页端启动WinForm
  11. RabbitMQ启动出错:- unable to connect to epmd on xxxx: timeout (timed out)
  12. python成长之路第三篇(4)_作用域,递归,模块,内置模块(os,ConfigParser,hashlib),with文件操作
  13. javascript 私有方法的实现
  14. 从源码的角度看Activity是如何启动的
  15. ToolStrip和MenuStrip控件簡介及常用屬性(转)
  16. 在CentOS下安装crontab服务
  17. 小菜鸟从0基础开始学Linux系统
  18. 使用pip安装包提示TLS证书错误解决办法
  19. Windows下安装RabbitMQ报错:unable to perform an operation on node时的解决方案
  20. C# Type.GetType 返回NULL 问题解决记录

热门文章

  1. asp.net mvc核心、实体框架和simplepagin .js中的分页
  2. Varnish 不重启使之配置生效的方法
  3. RHSA-2017:2473-重要: 内核 安全和BUG修复更新(需要重启、存在EXP、本地提权)
  4. 网络IO模型-异步选择模型(Delphi版)
  5. 测试AAA
  6. linux启动过程中建立临时页表
  7. 多测师讲解接口测试 _windows中搭建环境cms_高级讲师肖sir
  8. .net core中的那些常用的日志框架(Serilog篇)
  9. 解读JVM虚拟机
  10. MeteoInfoLab脚本示例:FY-3C全球火点HDF数据