1.请求入口 DispatcherServlet
流程:
1、给Web项目中配置一个 DispatcherServlet,拦截 / 请求
2、初始化的时候 DispatcherServlet 会启动IOC容器,而且会 初始化他底层的九大组件
3、请求到来的时候,Tomcat找到 DispatcherServlet 能处理请求,交给他,DispatcherServlet调用底层的九大组件结合容器、自动装配、反射等功能进行请求处理
2.九大组件
protected void initStrategies(ApplicationContext context) {
this.initMultipartResolver(context);
this.initLocaleResolver(context);
this.initThemeResolver(context);
this.initHandlerMappings(context);
this.initHandlerAdapters(context);
this.initHandlerExceptionResolvers(context);
this.initRequestToViewNameTranslator(context);
this.initViewResolvers(context);
this.initFlashMapManager(context);
}
//全是接口
initMultipartResolver(context);
##以下都有默认功能
initLocaleResolver(context);
initThemeResolver(context);
initHandlerMappings(context);
initHandlerAdapters(context);
initHandlerExceptionResolvers(context);
initRequestToViewNameTranslator(context);
initViewResolvers(context);
initFlashMapManager(context);
-
MultipartResolver:文件上传解析器。
从容器中获取MultipartResolver类型的,并且名字叫multipartResolver的组件。如果有用容器中的,如果没有就为null -
LocaleResolver:国际化解析器 zh_cn\en_us。来完成页面国际化功能
从容器中获取LocaleResolver类型的组件,并且名为localeResolver。如果没有,加载 DispatcherServlet.properties文件中指定的。org.springframework.web.servlet.LocaleResolver=org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver -
ThemeResolver:主题解析器(用的比较少)
-
HandlerMapping: 处理器映射(解析了系统中所有Controller组件,缓存他们请求映射信息,。想要知道哪个请求由谁处理,在他里面找即可。 请求–controller–method)
从容器中找 类型为HandlerMapping并且名字为handlerMapping的组件。没有就加载 DispatcherServlet.properties文件中指定默认的
org.springframework.web.servlet.HandlerMapping=org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping(组件名字作为请求映射),\
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping(把@RequestMapping标注的路径作为请求的路径进行映射),\
org.springframework.web.servlet.function.support.RouterFunctionMapping(webflux)
-
HandlerAdapter: handler(我们自己的controller)的适配器,未来决定目标方法如何执行的(反射进行请求处理的核心逻辑)。
从容器中获取所有的 HandlerAdapter 组件。没有就加载默认值
org.springframework.web.servlet.HandlerAdapter=org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter,\
org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter,\
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter(反射处理标注@RequestMapping注解的方法),\
org.springframework.web.servlet.function.support.HandlerFunctionAdapter(webflux)
- HandlerExceptionResolver:异常解析器
从容器中获取所有的 HandlerExceptionResolver 组件。没有就加载默认值
org.springframework.web.servlet.HandlerExceptionResolver=org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver,\
org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver,\
org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver
-
RequestToViewNameTranslator:请求转为要跳转的视图名的转换器
从容器中获取 RequestToViewNameTranslator 并且名为 viewNameTranslator;
#没有就加载默认的
org.springframework.web.servlet.RequestToViewNameTranslator=org.springframework.web.servlet.view.DefaultRequestToViewNameTranslator
-
ViewResolver:视图解析器。决定页面的视图跳转逻辑。
- 容器中找到所有的 ViewResolver,
- 如果没有SpringMVC会给我们自动配置一个 org.spri