背景分析
当项目做的越来越来大时,项目中业务就会变得越来越复杂,假如我们只使用一个对象去处理
所有的业务,这个对象的复杂度就会更高并且难以维护,生活中和实际项目中对类似问题的解
决方案往往"分而治之"的思想.来降低业务复杂度,提高其可维护性.那现在的问题的是如何分,
按照什么规则去分,这就需要有一定的设计,于是MVC设计思想诞生.
MVC 是什么?
1)分层设计思想
2)一种套路或设计模式
3)是Model,View,Controller单词的缩写
3.1)Model (业务逻辑对象)
3.2)Controller(控制逻辑对象)
3.3)View(显示逻辑对象)
Spring 框架中Web模块中的MVC设计
Spring中的Web模块基于MVC设计思想做了落地实现,其核心组件有:
1)DispatcherServlet (Spring MVC中核心控制器-Controller)
2)RequestMapping (封装的请求映射->url到具体handler及方法之间的映射)
3)Handler(请求处理器->负责处理Controller获取请求->可以将其理解为model)
4)ModelAndView (封装了业务数据和视图信息的对象)
5)ViewResolver (负责模板视图解析的对象->View)
SpringBoot工程中Web MVC 快速入门实现
1)创建项目module
2)添加项目依赖(spring web,thymeleaf)
3) 项目结构分析(static,templates)
4) 项目启动分析(启动运行启动类,检测服务是否启动ok)
5) 修改项目端口,重新启动分析
6)分别在static和templates目录中创建html页面然后进行访问测试
6.1)在static目录下直接创建index.html,启动服务后直接浏览器访问测试,测试ok.
6.2)在templates目录下创建default.html,启动服务后直接浏览器访问测试,404异常
6.3)在项目中定义TemplateController以及相关方法,在方法内部返回字符串default(
可以将这个字符串理解为view的名字),然后启动服务,基于方法上定义的请求url映射
(@RequestMapping("/doTemplateUI"))访问方法,检测测试输出。
templates目录存储什么文件(html模板文件)
templates目录的html页面可以在浏览器直接访问吗?不可以
static目录下一般可以放什么资源?(html/css/js/images)
templates目录和static目录下存放的html文件有什么不同吗?
static目录下的html可以直接在浏览器访问但不能被spring中视图解析器进行解析
templates目录的html页面不可以在浏览器直接访问但可以被spring的视图解析器进行解析,
从而为html赋予更多的能力(例如thymeleaf表达式,分支语句,循环语句,...)
thymeleaf是什么?(是一个以html作为模板的模板引擎,此引擎为html元素添加
额外属性并进行解析,然后对其进行赋能。springboot工程中对thymeleaf做了默认的支持
与配置)
Bug?
1)404异常(web请求资源不存在)
2)TemplateInputException (template may not exists)
5.SpringBoot工程中Web MVC应用配置进阶
1)SpringBoot工程中thymeleaf模板引擎的前后缀配置
2)SpringBoot工程中页面自动刷新配置(修改页面内容后,不重启服务既可看到更新内容)
1)ModelAndView是什么? (Spring MVC模块中默认提供一个封装响应数据的对象)
2)ModelAndView一般应用在什么场景呢?(响应数据既包含view又包含model)
3)你是如何理解JSON的?(就是一种支持跨端需求的轻量级数据格式而已)
4)SpringBoot工程中默认是如何将pojo,map等类似对象转换为json格式字符串的?(借助jackson)
5)@ReponseBody注解的作用是什么?(描述Handler中的方法,用于告诉底层应该如何对方法的
返回值进行处理,例如此注解描述的方法,其返回值肯定不是view,同时告诉底层方法返回值的转换
结果最终要写到响应体,然后传输到客户端)
6)@RestController注解的作用的是什么?(描述Handler类型,用于定义此类是一个Controller
请求处理对象,同时类中所有方法都默认添加@ResponseBody注解)