刚刚学习完SpringMVC,记录一些学习过程中的心得。
1、初始化
/**
* Initialize the strategy objects that this servlet uses.
* <p>May be overridden in subclasses in order to initialize further strategy objects.
*/
protected void initStrategies(ApplicationContext context) {
//文件上传解析器
initMultipartResolver(context);
//本地化解析器
initLocaleResolver(context);
//主题解析器
initThemeResolver(context);
//处理器映射器
initHandlerMappings(context);
//处理器适配器
initHandlerAdapters(context);
//异常处理器
initHandlerExceptionResolvers(context);
//请求到视图名称解析器
initRequestToViewNameTranslator(context);
//视图解析器
initViewResolvers(context);
//初始化flash映射器
initFlashMapManager(context);
}
2、执行
/**
里面有一些其他处理,包括处理文件流,拦截器的链的执行,返回视图给浏览器等一些操作不做备注
只关心请求到来的处理
*/
...
//定义处理器映射器链,包含真正的处理器+拦截器链
HandlerExecutionChain mappedHandler = null;
//定义视图模型
ModelAndView mv = null;
...
//获取处理器映射器
mappedHandler = getHandler(processedRequest);
...
//获取处理器适配器
HandlerAdapter ha = getHandlerAdapter(mappedHandler.getHandler());
...
//处理器适配器处理请求,并返回视图模型
mv = ha.handle(processedRequest, response, mappedHandler.getHandler());
...
//处理完请求将结果返回
processDispatchResult(processedRequest, response, mappedHandler, mv, dispatchException);
3、父类
HttpServletBean,
主要做一些初始化的工作,将web.xml中配置的参数设置到Servlet中。
比如servlet标签的子标签init-param标签中配置的参数。
FrameworkServlet,
将Servlet与Spring容器上下文关联。其实也就是初始化FrameworkServlet的属性
webApplicationContext,这个属性代表SpringMVC上下文,它有个父类上下文,既web.xml中配置的
ContextLoaderListener监听器初始化的容器上下文。
DispatcherServlet
初始化各个功能的实现类。比如异常处理、视图处理、请求映射处理等。