第一模块:
课程名称: Spring Boot打造企业微信点餐系统
章节名称:3-1 ~ 4-3
讲师姓名:廖师兄
第二模块:
内容概述:
3-1 ~ 4-3小节讲解了开发环境的搭建、日志、DAO类
第三模块:
学习心得:
1.使用IDEA创建一个springBoot工程
注意:springBoot出来之后,除了传统的spring MVC 和spring,现在说的spring MVC 和spring都是基于springBoot下的
Spring MVC 开发的核心是其流程和组件,因此在很多情况下,面试官的第一个关于 Spring MVC 的问题便是 Spring MVC 的执行流程和组件是咋样的?
Spring MVC 全流程:
关键单词的翻译:
DispatcherServlet:程序调度服务
HandlerMapping:处理器映射
HandlerExecutionChain:处理器执行链
HandlerAdapter:处理器适配器
ModelAndView:模型视图
ViewResolver:视图解析器
View:视图
解析:
这里的流程和组件是需要探索的内容,从图中可以看到 Spring MVC 的流程是围绕着 DispatcherServlet 而工作的,所以它是最重要的一个类。在 Spring MVC 中首先请求会被 DispatcherServlet 拦截,然后就按照一定的流程进行处理,下面先来简述它的全流程:
HandlerMapping 的主要的功能是路由,也就是通过它去确定使用哪个控制器去响应请求,这样通过它就可以返回一个执行链(HandlerExecutionChain)。这个执行链包含两个东西一个是拦截器链,另外一个是处理器(Handler)。但是这里的处理器和控制器还是有区别的,处理器会将我们开发的控制器进行包装,所以可以增强控制器的功能。通过这样就能够确定请求最终路由到那个控制器上,而通过拦截器和处理器,就可以增强控制器的功能了;
通过上一步就能找到处理器,那么紧跟着就要去运行它了。为了运行它,Spring MVC 提供了 HandlerAdapter 组件来运行处理器,之前我们谈过处理器会对控制器包装,所以这一步往往会连同控制器的逻辑也会一并运行;
在运行控制器的过程中,核心的内容就是获取数据,并且将数据进行封装到数据模型中,为的是将来视图(View)可以将数据渲染出来。而在 Spring MVC 中提供视图设置和数据模型封装的是 ModelAndView。
有了 ModelAndView 后,跟着就需要进行考虑将数据渲染到视图中,从而展现给用户查看。不过在此之前可能需要定位视图,什么意思呢?有时候我们的视图会很复杂,比如 JSP,Thymeleaf 等,要求我们直接创建对象存放到 ModelAndView 会很困难,为此 Spring MVC 允许我们返回一个逻辑视图名称,而这个逻辑视图名称会包含实际视图的定位信息。逻辑视图名称要找到实际视图则需要使用视图解析器(ViewResolver)。但是这一步不是必须的,也可以直接在 ModelAndView 上直接设置 JSON 视图,这样就不需要视图解析器定位了。
经过上述步骤,就剩下视图和数据模型了,这样 Spring MVC 就可以直接将数据模型中的数据渲染到视图中,这样就可以完成所有步骤了。
但是请大家注意的是上述只是阐述全流程,并未阐述一些细节,比如处理器的运行细节和拦截器;而且并非所有的 Spring MVC 请求都需要会经历全流程的处理,比如对于一些简单的视图比如 JSON 视图,并不需要视图解析器(ViewResolver)进行定位。
04实践篇1:深入Spring MVC 全流程开发细节
controller层的常用注解:
@Controller
@RequestMapping(value="/index", method = RequestMethod.GET) @RequestMapping来配置HandlerMapping
Http的请求方法:
POST、PUT、PATCH、DELETE 、GET
@GetMapping:拦截 HTTP 方法为 GET 的请求,这里 GET 请求主要是查看资源
@PostMapping:拦截 HTTP 方法为 POST 的请求,这里的 POST 请求主要是新增资源使用
@PutMapping:拦截 HTTP 方法为 PUT 的请求,这里的 PUT 请求主要是修改资源(对于修改资源的我们一律都使用 @PutMapping)
@DeleteMapping:拦截 HTTP 方法为 DELETE 的请求,这里的 DELETE 请求主要是删除资源
注解之间的等效替换eg:
@RequestMapping(value="/index", method = RequestMethod.GET)
等价于
@GetMapping("/index")
等效替换存在的原因:spring框架在不断更新,更加简洁的注解出现,取代之前老的注解
实例解析spring MVC 工作流细节:
控制器代码:
视图代码:
修改spring MVC工程的启动类:这里主要是配置 @SpringBootApplication 的 scanBasePackages 属性,这样才能将我们开发的控制器扫描进来
浏览器窗口访问:
上面这些代码的spring MVC工作流:
关键单词翻译:
DispatcherServlet:程序调度服务
HandlerMapping:处理器映射
HandlerExecutionChain:处理器执行链
HandlerAdapter:处理器适配器
ModelAndView:模型视图
ViewResolver:视图解析器
View:视图
上面流程的注意点:
1.通过 HandlerMapping 机制只是找到处理器,而不是控制器,而处理器对控制器加了一层包装,所以它能够增强控制器的功能
2.方法的参数为 Model,这是一个数据模型参数,它是通过处理器的包装来创建的并不需要我们处理,所以就可以拿来就用
3.这里的 "index" 是一个视图的逻辑名称,依据 Spring MVC 的流程它会被视图解析器(ViewResolver)所解析,从而定位真实视图,在 Thymeleaf 中具体的视图解析器是类 ThymeleafViewResolver,在 Spring Boot 中默认的实际视图放置的位置 是 /resources/templates 文件夹,所以我们只要将对应的 Thymeleaf 放置到这个目录即可,当控制器返回了 "index",通过视图解析器(ThymeleafViewResolver)就会来到 /resources/templates 文件夹查找名字为 index 而后缀为.html 的文件作为视图,显然就能找到我们开发的视图了,然后将数据模型的数据渲染到这个视图里
当今,视图渲染的两种方式:
1.数据直接在视图渲染,后台返回视图
2. Ajax 异步获取JSON数据包,前台经行页面渲染(最常用)
第四模块:
学习截图: