dream_sky




  种一棵树最好的时间是  十年前。      其次是,     现在!

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。

 

 

 

 



 

posted @ 2018-06-12 15:59  书晨007  阅读(138)  评论(0编辑  收藏  举报
将时间精确到分,将获得较高的效率!