springmvc源码分析
主要类实现逻辑:
DispatcherServlet>FrameworkServlet>HttpServeltBean>HttpServlet>GenericServlet>Servlet
视图解析器:
1
|
<bean id= "jspViewResolver" class = "org.springframework.web.servlet.view.InternalResourceViewResolver" > |
mvc初始化流程:
HttpServletBean
主要做一些初始化的工作,将web.xml中配置的参数设置到Servlet中。比如创建BeanWrapper,servlet标签的子标签init-param标签中配置的参数。
FrameworkServlet
将Servlet与Spring容器上下文关联。其实也就是初始化FrameworkServlet的属性(在initServletBean()中创建容器上下文)webApplicationContext,这个属性代表SpringMVC上下文,它有个父类上下文,既web.xml中配置的ContextLoaderListener监听器初始化的容器上下文。
调用OnRefresh()方法加载配置文件等。
DispatcherServlet
调用initStrategies(),初始化8个功能的实现类。比如异常处理、视图处理、请求映射处理等。
核心组件初始化:
HandlerMapping,负责映射URL和对应的处理类,将mapping关系保存在handlerMap集合中,将maping中的intercetors保存在adaptedInterceptors数组中。
HandlerAdapter,处理这个URL对应的请求,自定义各种handler。初始化创建HandlerAdapter对象保存在HandlerAdapter集合中。
ViewResolver,根据返回的viewName,创建view对象。没有name时,调用resolveViewName方法时调用createView方法,实例化类,用render()渲染jsp页面。
Controler请求调用实现流程:(Filter加载过程)
调用doService方法,调用doDispatch方法;
在handlerMappings集合中匹配每个HandlerMapping,返回处理链HandlerExecutionchain, 调用这个类的getHandler(request)方法。
根据getHandler返回的object对象,在HandlerAdapter集合找到支持的handlerAdapter,执行相应方法返回modelAndview对象。
模板模式:
AbstractHandlerMapping和AbstractView。
2、清心寡欲、方能高枕无忧。
3、纸上得来终觉浅,绝知此事要躬行。
种一棵树最好的时间是 十年前。 其次是, 现在!