天天看点

SpringMVC学习前端控制器DispatcherServlet1、初始化2、执行3、父类

刚刚学习完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
初始化各个功能的实现类。比如异常处理、视图处理、请求映射处理等。
           

继续阅读