spring MVC 原理及源码解析
首先要知道springmvc的核心控制器dispatcherServlet(继承自httpServlet)
一般httpServlet的请求过程:
1、初始化(创建servlet实例时)时会执行servlet的init()方法对httpServlet进行初始化。
2、当一个请求request到来,会执行service()方法,在service方法中根据请求类型调用doGet()或者doPost()方法。(所以可以继承httpServlet然后重写service(或者doGet()、doPost()方法完成自己的业务逻辑))。
3、服务器关闭后执行servlet的destroy方法。
dispatcherServlet继承链:
springMvc的请求过程:
1、初始化时会执行init()方法,该方法在dispatcherServlet类的父父类HttpServletBean中。
2、一个request请求过来,首先请求到HttpServlet的service()方法中,在子类FrameworkServlet中重写了doGet()和doPost()方法等等,然后调用processRequest()方法,在processRequest()中调用dispatcherServlet的doService()方法,接着调用doDispatch()方法(主要方法)。
3、在doDispatch()方法中获取处理器调用链HandlerExecutionChain(里面有处理器对象handler和处理器相关的拦截器interceptors),根据处理器对象找到支持的处理适配器HandlerAdapter,然后执行处理器适配器的handle(内部使用反射调用具体方法)返回一个ModelAndView对象,然后在render()中调用视图解析器(ViewResolver)
看doDispatch()
使用的这个类 HandlerExecutionChain(处理器调用链),(类中包含处理器对象和处理器相关的拦截器),
HandlerExecutionChain获取方式:通过HandlerMapping(保存请求到Controller的映射)获取
HandlerAdapter:处理适配器,主要是用来调用具体的方法对用户的请求进行处理。
注解的配置: