dispatcherSevlet
主要作用为:
1.初始化Spring Web MVC使用的Web上下文
2.初始化DispatcherServlet使用的策略,如handlermapping、handlerAdapter等
"->"表示继承关系
httpServlet->httpServletBean->FrameworkServlet->dispatcherServlet
httpServletBean的作用:
1.将servlet初始化参数设置到该组件上
2.提供给子类初始化的扩展点
frameworkServlet的作用:
1.初始化web上下文
2.提供给子类初始化的扩展点
dispatcherSevlet的作用
1.实现子类的onRefresh()方法,该方法委托为initStrategies()方法
2.初始化默认的Sprinig Web MVC框架使用者策略(如HandlerMapping)
handlerMapping的作用:注册和查找
1.注册: 注册是根据配置文件中的配置将一个字符串和一个Controller类以<key,value>的形式存入到Map中,这个key就是对应的url中的某个字段。
**2.查找:**查找就是HandlerMapping根据url中的的某个字段,在Map中以这个字段为key值对应的Controller类,并将Controller类封装成一个HandlerExecutionChain对象,HandlerExecutionChain中除了有Controller对象外,还有一组拦截器。
handlerMapping简单过程:
1.SimpleUrlHandlerMapping根据配置文件中的SimpleUrlHandlerMapping的配置,获得一个map集合,map中存储的是{urlString=beanId}。SimpleUrlHandlerMapping调用父类
AbstractUrlHandlerMapping的registerHandler方法。
2.AbstractUrlHandlerMapping的registerHandler方法有SimpleUrlHandlerMapping传入的map中的urlString和beanId,并根据beanId找到对应的bean即controller,将urlString和urlString对应的controller放入AbstractUrlHandlerMapping的handlerMap中。
3.Dispatcher获取IOC容器中已经初始化好的HandlerMapping,再由HandlerMapping调用自己的getHandler方法根据请求返回HandlerExecutionChain对象。AbstractHandlerMapping方法实现了HandlerMapping接口的getHandler方法。AbstractHandlerMapping中的getHandler方法的主要作用是找到controller,并对controller进行封装成HandlerExecutionChain对象,HandlerExecutionChain中除了controller对象外,还有拦截器对象的集合。
4.AbstractHandlerMapping的getHandler方法中又 调用了AbstractHandlerMapping子类的AbstractUrlHandlerMapping getHandlerInternal方法。getHandlerInternal方法就是截取url中对应的controller字段,并以这个字段为key值去AbstractUrlHandlerMapping 的handlerMap中找寻对应的value,即controlle。
参考于大神https://blog.csdn.net/wangbiao007/article/details/50524268