SpringMVC:
SpringMVC是基于Spring的一个部件,专门来处理客户端与服务器之间的交互,通过controller(控制器)将model(底层数据)返回到view(视图页面)。
Spring的相关jar
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.2.1.RELEASE</version>
</dependency>
<!--spring-beans -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>5.2.1.RELEASE</version>
</dependency>
<!-- spring-context -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.1.RELEASE</version>
</dependency>
<!-- SpringMVC-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.1.RELEASE</version>
</dependency>
SpringMVC的优点
1.SpringMVC基于Spring,所有的创建都交给容器去处理,每次使用只需要从容器中拿即可
2.由于SpringMVC中DispatcherServlet作为前端控制器,将根目录下的所有页面保护起来,客户端不能直接请求页面(非法请求页面不被允许)。
3.由于SpringMVC基于Spring,Spring划分为DAO层,Service层,Controller层的三层结构,从而进行解耦,单一职责;而原生的Servlet+jsp中耦合程度过高,不利于后期的使用。
SpringMVC的关键类
1.DispatcherServlet:前端控制器,用于接收请求和返回响应
2.controller:控制器,用于获取请求来的数据,并将处理结果返回给视图
3.View Resolver:视图解析器,用于将controller的返回结果,进行解析,处理的视图文件逻辑名称,返回一个该视图文件的物理路径
SpringMVC的执行流程
(由于工具原因,就先不画图了)
request->DispatcherServlet(前端控制器)->controller(控制器)->数据处理–> controller(控制器)—> DispatcherServlet(前端控制器)—>View Resolver(视图解析器)–>DispatcherServlet–>response
SpringMVC两大容器
---------------------------------基于源代码---------------------------------------------
想了解的朋友们,去瞅瞅源代码,收获颇丰
下面的相关内容都基于javaConfig
1.SpringMVC中可通过xml和 javaConfig进行配置,同时加载了两大容器
ServletApplicationContext容器和RootApplicationContext容器
①ServletApplicationContext: 存放了关于SpringMVC方面的内容,例如:
configureViewResolvers(添加视图解析器) addViewControllers(自动添加控制器) addResourceHandlers(添加处理静态页面)等众多的bean对象
②RootApplicationContext:存放了关于Spring方面的内容,自己或系统创建的bean对象
**
前端控制器,过滤器,监听器,两大容器 的创建**
---------------------------------基于源代码---------------------------------------------
从tomcat(spring3.0规范的容器)启动时,先将我们的请求通过tomcat的过滤器,然后查找ServletContainerInitializer的实现类
一: ==>查找SpringServletContainerInitializer
==>@HandleType(WebApplicationInitializer)的查找onStartup()服务器启动
二:==>实现类AbstractContextLoaderInitializer(①该类实现加载了onStartup() 方法,实现机制交给了子类;
( ②该类加载了createRootApplicationContext***(),实现交给了子类
(③创建了监听器,监听root容器的创建(spring的创建)*
三:==>AbstractDispatcherServletInitializer
①重写父类onStartup() 方法,实现机制交给了子类;
②注册了DispatcherServlet前端控制器
③加载了Servlet容器,但创建交给了子类
④创建了过滤器
四:==>AbstractAnnotationConfigDispatcherServletInitializer
①创建root容器和servlet容器,但容器的class对象交给了子类去反射得到
(getRootConfigClasses)(getServletConfigClasses)
五:==>DispatcherServletConfig(xml配置中的web.xml):
创建root容器,servlet容器,添加过滤器,添加DispatcherServlet的mapper
总结:
1.从上述的内容可以看出SpringMVC的用法和内部的创建,创建了监听器,控制器,过滤器,Root容器,Servlet容器.
2.通过javaconfig不难看出,通过javaConfig的配置,容器已经帮我们加载了监听器和过滤器(只需添加自定义过滤器),而web.xml需要自己在onStartup中添加过滤器,给Root容器配置监听器,监听spring的内容