在SpringMVC中非常重要的就是中央处理器,也就是本帖介绍的dispatcherServlet。大家在javaWeb阶段学的servlet,当时MVC分层的架构下,controll层面就是一个类继承与HttpServlet,重写他的doGet()和doPost()两个方法,然后在web.xml中配置好他的映射关系。而SpringMVC在web.xml中直接把所有请求映射到一个dispatcherServlet中。所以想要弄清楚找源码的第一步就是找doGet()和doPost()在哪里。
正文:
我们了解一个类的作用的前提就是查看类的关系图,方便对关系做一个初步的认识。
如图所示,这是dispatcherServlet的继承关系图。从图中可以明显的观察到dispatcherServlet是HttpServlet的一个子类。而doGet和doPost这两个方法就是继承HttpServlet然后重写的。我们这里先打开HttpServletBean的所有方法的总览,使用idea开发工具的情况下快捷键ctrl+F12
可以查看到HttpServletBean这个HttpServlet的子类中并没有重写doGet和doPost两个方法,所以继续往他的子类追进去。
这是frameworkServlet的方法总览,总算是发现doGet和doPost,而dispatcherServlet继承FraneworkServlet,这里的doGet和doPost方法中是不是做了什么事情呢,咱们继续追。
可以看到这里方法又调用了类中的其他方法,没办法继续追
此方法中对一些基本的数据做了初始化,并且调用了doService方法,我们知道在Spring框架全家桶中一般真真执行的业务逻辑方法都是do开头的方法,那么doService会不会是执行的放呢?咱们继续追进去!
追进去发现这是一个抽象方法,这时候刚好想到dispatcherServlet继承与frameworkServlet,所以实现肯定在我们最关心的dispatcherServlet中。咱们继续追进去
我们发现我们的猜测并不是对的,这里并不是执行的最关键部分,这里跟前面的processRequest这个方法比较相似,也是一些初始化,往request内置对象中添加一些属性,这里并不是我们的重点,重点在于doDispatch()这个方法。那么我们继续往下追。
追到这里就可以明白dispatcherServlet最重要的业务逻辑就在doDispatch()这个方法中。
总结:
这就是就是一个dispatcherServlet的一个初步认识了。下章仔细分析doDispatch()方法,也就是SpringMVC详细的执行流程。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)