1、springmvc的控制器
DispatcherServlet 是继承 FrameworkServlet ,FrameworkServlet继承FrameworkServlet,FrameworkServlet继承HttpServletBean,HttpServletBean 继承HttpServlet
1. HttpServletBean
主要做一些初始化的工作,将web.xml中配置的参数设置到Servlet中。比如servlet标签的子标签init-param标签中配置的参数。
2. FrameworkServlet
将Servlet与Spring容器上下文关联。其实也就是初始化FrameworkServlet的属性webApplicationContext,这个属性代表SpringMVC上下文,它有个父类上下文,既web.xml中配置的ContextLoaderListener监听器初始化的容器上下文。
3. DispatcherServlet
初始化各个功能的实现类。比如异常处理、视图处理、请求映射处理等。onRefresh()方法,里调用initStrategies 里面有些方法 initHandlerMappings(context);
DispatcherServlet处理请求过程
在分析DispatcherServlet处理请求过程之前,我们回顾一下Servlet对于请求的处理。
HttpServlet提供了service方法用于处理请求,service使用了模板设计模式,在内部对于http get方法会调用doGet方法,http post方法调用doPost方法...........
跟踪代码到DispatcherServlet 里的doService方法,最终调用的是doDispatch 方法, doDispatch方法功能简单描述一下:
首先根据请求的路径找到HandlerMethod(带有Method反射属性,也就是对应Controller中的方法),然后匹配路径对应的拦截器,有了HandlerMethod和拦截器构造个HandlerExecutionChain对象。HandlerExecutionChain对象的获取是通过HandlerMapping接口提供的方法中得到。有了HandlerExecutionChain之后,通过HandlerAdapter对象进行处理得到ModelAndView对象,HandlerMethod内部handle的时候,使用各种HandlerMethodArgumentResolver实现类处理HandlerMethod的参数,使用各种HandlerMethodReturnValueHandler实现类处理返回值。 最终返回值被处理成ModelAndView对象,这期间发生的异常会被HandlerExceptionResolver接口实现类进行处理。