具体流程
1.请求离开客户端,带上用户所请求内容的信息,如url、参数等
2.请求到达DispatcherServlet,这是一个前端控制器,一个用于调度的Servlet,此时它的职责是,将请求发送给不同的控制器(controller)
3.请求到达Controller后卸下负载(信息),等待Controller处理,而Controller完成逻辑处理,生成一些信息,称为Model(模型),这种原始的信息需要进行格式化以便呈现给用户(例如HTML的方式)。
4.Controller将Model打包,标示用于渲染的视图名,连同请求一起返送给DispatcherServlet
备注: 调度完全由DispatcherServlet处理,实现Controller和View的解耦
此视图名不是真实视图名,而是逻辑名称
5.Dispatcher Servlet通过view resolver(视图解析器)得出真实视图名
6.对应的视图通过Model渲染出输出
7.输出通过响应对象返回给客户端
容器间的关系:
web容器->servlet容器(servlet上下文)->spring容器->spring MVC子容器
常用的servlet容器: Tomcat,值得注意的是SpringBoot默认使用Tomcat作为嵌入式的Servlet容器;
-------------------------------------------------------------------------
项目操作流程
配置DispatcherServlet
前提:
1.javax.servlet.ServletContainerInitializer用来配置servlet容器 s
2.SpringServletContainerInitializer实现了它 s1实现s
3.SpringServletContainerInitializer查找实现WebApplicationInitializer的类 s1查找w
4.AbstractAnnotationConfigDispatcherServletInitializer实现WebApplicationInitializer w1实现w
同时它能创建DispathcerServlet,DispathcerServlet启动时会创建Spring应用上下文
其实AbstractAnnotationConfigDispatcherServletInitializer不仅创建DispatcherServlet,也会创建ContextLoaderListener
DispatcherServlet: 创建spring应用上下文,加载属于web组件的bean,例如控制器、视图解析器及处理器映射 getServletConfigClasses
ContextLoaderListener: 创建??应用上下文,加载其他bean,例如驱动应用后端的中间层和数据层组件 getRootConfigClasses
启用Spring MVC
SpittrWebAppInitializer
WebConfig
@Configuration
@EnableWebMvc
内部配置视图解析器 @Bean
重写对静态资源的处理
RootConfig