文章目录
Spring MVC
Spring MVC :是基于spring的一个开源框架,实际上是spring的一个模块,专门用来做web开发的。可以理解为Servlet的一个升级。所有的web开发底层都是Servlet,框架是在Servlet基础上简化开发并且加入一些功能。
web开发底层是Servlet,springMVC中有一个对象时Servlet:DispatherServlet(中央调度器),负责接收用户的所有请求,用户把请求给了DispatherServlet,之后DispatherServlet把请求转发给我们的Controller(@Controller创建的对象)对象,最后是Controller对象处理请求。
什么是MVC模式
M——Model模型:完成业务逻辑,由JavaBean构成,service + dao+entity
V——view视图:看到的页面
C——Controller控制器:接收请求、调用模型
当一个请求发送过来之后,会先到到Controller控制层,控制层在交给Model模型层处理,Model层处理完成之后,返回处理结果给Controller层,在通过View视图层渲染后相应给用户。
Spring MVC优点
- 基于MVC结构。分工明确,解耦合
- 容易理解,上手快,使用简单
- 作为spring框架的一部分,方便整合Mybatis等其他框架。
- SpringMVC强化注解的使用。
SpringMVC 运行流程
-
前端发送过来的请求,先经过DispatcherServlet中央处理器也称为前端控制器。
-
前端控制器DispatcherServlet接收请求后,调用映射处理器HandlerMapping。
HandlerMapping根据请求的URL找到处理该请求的Handler(即Controller),将处理器Handler返回给前端控制器。
-
前端控制器根据获取到的Handler,选择一台合适的HandlerAdapter处理适配器,处理适配器调用处理器相应的处理方法。
-
Handler执行后,向DispatcherServlet返回一个ModelAndView对象。
-
对返回的ModelAndView进行视图解析,将View返回给DispatcherServlet。
-
View结合Model进行视图渲染。
-
响应给客户。
SpringMVC组件
- DispatcherServlet:Spring中提供了DispatcherServlet类,它从HTTPServlet继承而来,他就是Spring MVC中的前端控制器。
- HandlerMapping:DispatcherServlet自己并不处理请求,而是将请求交给页面控制器。那么在DispatcherServlet中如何选择正确的页面控制器呢?这件事就交给了HandlerMapping,进过HandlerMapping处理之后,DispatcherServlet就知道要调用哪个页面处理器来处理了。
- HandlerAdapter:经过了HandlerMapping 处理之后,DispatcherServlet就获取到了处理器,但是处理器有多种,为了方便调用,DispatcherServlet将这些处理器包装成处理适配器HandlerAdapter,HandlerAdapter调用真正的处理器的功能处理方法,完成处理功能,并返回一个ModelAndView对象。
SpringMVC常用的注解有哪些
@RequestMapping:用于映射web请求,包括访问路径和参数
@RestController:该注解为一个组合注解,相当于@Controller和@ResponseBody的组合,注解在类上,意味着该Controller的所有方法都默认加了@ResponseBody。
@ResponseBody:支持将返回值放到response内,而不是一个页面,通常用户返回json数据。
@RequestBody:允许request的参数在request体内,而不是在直接连接的地址后面。
SpringMVC的拦截器和过滤器有什么区别?执行顺序是什么
过滤器是Servlet规范规定的对所有的web请求起作用,而拦截器只对action起作用;
过滤器依赖于Servlet容器,而拦截器不依赖于Servlet容器;
过滤器不能访问容器中的Bean(DI)(基于Spring注册过的过滤器也可以访问容器中的Bean),而拦截器可以访问
执行顺序:
SpringBoot
对SpringBoot的理解
SpringBoot是用来快速开发spring应用的脚手架,其设计目的是用来简化spring应用的初始化搭建以及开发工程。
springBoot内置web服务器,省略了Web.xml,直接运行jar文件就可以启动web应用;
SpringBoot帮我们管理了常用的第三方依赖版本,减少了版本冲突问题;
提供自动配置,对主流框架无配置集成,开箱即用。
Spring和SpringBoot的关系?
SpringBoot是Spring生态产品;
SpringBoot他不是一个框架,它是一个可以快速构件基于spring的脚手架,二者不是一个层面的东西,没有可比性。
SpringBoot有哪些核心注解
@SpringBootApplication注解:这个注解标识了SpringBoot工程,写在启动类上
@SpringBootConfiguration:这个注解实际就是一个@Configuration,表示启动类也是一个配置类
@EnableAutoConfiguration:启动自动配置类的。自动扫描所有的自动配置类并启动
SpringBoot的自动配置原理
- 通过@SpringBootConfiguration引入@EnableAutoConfiguration负责启动自动配功能
- @EnableAutoConfiguration引入了@import
- Spring容易启动时:加载IOC容器时会解析@Import注解
- @Import导入了一个deferredImportSelector,它会使SpringBoot的自动配置类的顺序在最后,这样方便扩展和覆盖
- 然后读取所有的/META-INF/spring.factories文件
- 过滤出所有AutoConfigurationClass类型的类
- 最后通过@Condition排除无效的自动配置类。
为什么SpringBoot的可以直接运行
- SpringBoot提供了一个插件spring-boot-maven-plugin用于把程序打包称为一个可执行的jar包;
- SpringBoot应用打包后生成一个Fat jar(包含jar包的jar),包含了应用依赖的jar和SpringBoot loader相关的类;
- 通过指令java - jar运行jar时会去找jar中的manifest文件,在那里面找到真正的启动类(Main-Class);
- Fat jar的启动Main函数是JarLauncher,找到manifest中的Start-Class