请求处理

1. DispatcherServlet

(1) 初始化

方法名 对应类名 行为
init() HttpServletBean.class 将配置属性映射到servlet的bean属性, 并且调用子类的初始化函数
initBeanWrapper(BeanWrapper bw) HttpServletBean.class 为当前的HttpServletBean初始化BeanWrapper对象, 并有可能包含自定义Editor对象
initServletBean() FrameworkServlet.class 在所有的bean属性被设定后调用, 创建了servlet的WebApplicationContext对象
initWebApplicationContext() FrameworkServlet.class 初始化并发布WebApplicationContext对象实例
initStrategies() DispatcherServlet.class 初始化servlet相关的一系列对象(细节如下)
initMultipartResolver(context) DispatcherServlet.class 初始化MultipartResolver对象, 以用于解析多媒体文件(文件上传等)
initLocaleResolver(context) DispatcherServlet.class 初始化本地化解析器, 以用于本地化信息的解析和修改
initThemeResolver(context) DispatcherServlet.class 初始化主题解析器, 以用于web-based的主题解析和修改
initHandlerMappings(context) DispatcherServlet.class 初始化HandlerMapping对象列表, 根据上下文获取servlet相关的请求/处理器映射列表
initHandlerAdapters(context) DispatcherServlet.class 初始化HandlerAdapter对象列表, 默认SimpleControllerHandlerAdapter
initHandlerExceptionResolvers(context) DispatcherServlet.class 初始化HandlerExceptionResolver对象, 默认不设置异常adapter
initRequestToViewNameTranslator(context) DispatcherServlet.class 初始化RequestToViewNameTranslator对象用于解析servlet实例
initViewResolvers(context) DispatcherServlet.class 初始化ViewResolvers对象列表, 获取该类相关所有的上下文ViewResolver对象列表



(2) 服务

DispatcherServlet.doService(request, response) -> DispatcherServlet.doDispatch(request, response)

1. 将文本类型为"multipart/form-data"的请求转换成multipart请求, 并激活对应的multipart处理器

2. 确定当前请求相关的处理器

3. 调用相关interceptor的preHandler()方法

4. 通过HandlerAdaptor调用处理器

5. 转换将要返回的ModelAndView对象

6. 调用相关interceptor的postHandler()方法


2. Dispatcher期望Handler返回一个ModelAndView对象

(1) 本地化解析器: 解析客户端本地化信息, 以确保提供国际化的视图对象

(2) 查看是否包含实例化的视图对象?

是, 调用对应的render()函数

否, 调用ViewResolver的resolverViewName()函数

你可能感兴趣的:(bean,Web,servlet)