一.背景剖析
当我的项目做的越来越来大时,我的项目中业务就会变得越来越简单,如果咱们只应用一个对象去解决
所有的业务,这个对象的复杂度就会更高并且难以保护,生存中和理论我的项目中对相似问题的解
决计划往往"分而治之"的思维.来升高业务复杂度,进步其可维护性.那当初的问题的是如何分,
依照什么规定去分,这就须要有肯定的设计,于是MVC设计思维诞生.
二.MVC是什么?
MVC是一种软件架构设计思维,基于MVC架构将咱们的应用软件进行分层设计和实现,例如能够分为视图层(View),管制层(Controller),模型层(Model),通过这样的分层设计让咱们程序具备更好的灵活性和可可扩展性.因为这样能够将一个简单应用程序进行简化,实现各司其职,各尽所能.比拟适宜一个大型利用的开发。
1)是一种分层架构设计思维,也是一种套路工设计模式。
2)是Model,View,Controller单词的缩写。
Model(业务逻辑对象,业务层)
View(显示逻辑对象,体现层)
Controller(管制逻辑对象,管制层)
程序中的MVC? (Web利用)
1.传统的web利用?
企业中业务零碎->CRM,BOSS,ERP,EBanking,...
2.互联网利用?
领取零碎,网约车,...
三.Spring 框架中Web模块中的MVC设计
Spring MVC是MVC设计思维在Spring框架中的一种实现,基于这样的思维spring框架设计了一些相干对象,用于更好的基于MVC架构解决申请和响应,其繁难架构如图所示:
其外围组件有:
1.DispathcherServlet(外围控制器,前端控制器,Controller)
是客户端所有申请解决的入口,负责申请转发。
2.RequestMapping(申请映射)
负责存储申请url到后端handler对象之间的映射。
3.Handler(申请处理器)
用于解决DispatcherServlet对象转发过去的申请数据。
4.ModelAndView(业务数据和视图信息的对象)
用于封装业务数据和视图信息的对象
5.ViewResolver(视图解析器,View)
负责解决所有Handler对象响应后果中。
四.SpringBoot 工程中Web MVC 疾速入门实现
筹备工作
第一步:创立我的项目module,根本信息如图所示:
第二步:增加我的项目依赖(能够在module创立时,也能够创立后),代码如下:
Spring Web 依赖(提供了spring mvc反对并且会嵌入一个tomcat)
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId></dependency>
Thymeleaf 依赖(提供了以html作为页面模板进行解析和操作的相干对象)
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId></dependency>
第三步:启动我的项目检测控制台启动状态,是否运行胜利
static目录剖析及利用
static 目录为springboot工程创立时增加了web依赖当前主动创立的目录,此目录中能够存储html、css、js、image,这些资源能够在启动服务器当前,间接在浏览器进行拜访。
例如:
第一步:在static目录下创立一个index.html页面,代码如下:
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title></head><body> <h1>The static directory index.html page</h1></body></html>
第二步:启动服务器并间接进行拜访测试,如图所示
templates 目录剖析及利用
templates 目录为springboot工程创立时增加了thymeleaf依赖当前主动创立的目录,此目录中要存储一些html模板,这个模板页面不能间接通过浏览器url进行拜访,须要基于后端控制器,在办法中定义页面响应,例如:
第一步:定义TemplateController及办法,代码如下:
package com.cy.pj.health.controller;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.RequestMapping;@Controllerpublic class TemplateController { @RequestMapping("doTemplate") public String doTemplateUI(){ return "default"; }}
第二步:在templates目录中定义模板页面default.html,代码如下:
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title></head><body> <h1>The template directory default page</h1></body></html>
其中,如果default.html要在放在templates子目录中,则还须要在配置文件中配置thymeleaf的前缀,例如:
# 配置thymeleaf前缀、后缀spring.thymeleaf.prefix=classpath:/templates/modules/# spring.thymeleaf.suffix=.html thymeleaf默认是.html
第三步:启动服务进行拜访测试,如图所示:
FAQ?
1.说说spring web模块申请的处理过程?
1)基于域名获取ip地址(例如:127.0.0.1)
2)基于ip地址找到网络中计算机(ip地址是网络中计算机的惟一标识)
3)基于端口找到tomcat服务(port是计算机中利用的惟一标识)
4)tomcat服务会基于thread并借助io读取网络http协定中申请数据
5)tomcat外部会创立申请(request)和响应(response)对象,用于封装申请和响应信息
6)tomcat会调用Filter对象对request数据进行过滤。
7)Filter对request过滤当前,会将申请交给DispatcherServlet进行解决?
8)DispatcherServlet读取申请中的url,并基于url从requestMapping中找到对应的handler以及办法。
9)DispatcherServlet基于反射技术调用handler办法。
10)DispatcherServlet会将handler办法返回的view等相干信息进行封装,而后交给视图解析器进行解析。
11)ViewResolver视图解析器对为view name增加前缀,后缀,并将model中数据填充到view中。
12)DispatcherServlet 将视图解析器解析的后果封装到response对象,并将其响应到客户端。
2.templates目录存储什么文件
html模板文件
3.templates目录的html页面能够在浏览器间接拜访吗?
不能够
4.static目录下个别能够放什么资源?
html/css/js/images
5.templates目录和static目录下寄存的html文件有什么不同吗?
1)static目录下的html能够间接在浏览器拜访但不能被spring中视图解析器进行解析
2)templates目录的html页面不能够在浏览器间接拜访但能够被spring的视图解析器进行解析,从而为html赋予更多的能力(例如thymeleaf表达式,分支语句,循环语句,...)
6.thymeleaf是什么?
是一个以html作为模板的模板引擎,此引擎为html元素增加额定属性并进行解析,而后对其进行赋能。springboot工程中对thymeleaf做了默认的反对与配置
7.springboot工程中thymeleaf默认的前缀和后缀配置别离是什么?
1)前缀:spring.thymeleaf.prefix=classpath:/templates/
2)后缀:.html
8.springboot工程中thymeleaf的前缀能够本人指定吗?
(能够,例如spring.thymeleaf.prefix=classpath:/templates/)
9.SpringBoot工程中的static和templates目录中的html,默认对其内容批改当前,不重启服务,而后刷新拜访地址,能够看到批改的内容吗?
不能够,如果心愿看到,咱们须要批改idea和springboot的配置文件
1)如果是static目录,则须要让我的项目反对主动编译(build)和运行时编译(compiler.automake.allow.when.app.running)。
2)如果是templates目录,则需在以上两个步骤的根底上,增加一个缓存配置(spring.thymeleaf.cache=false)。