6. SpringBoot工程中Spring MVC模块的应用

JayX

一.背景分析

当项目做的越来越来大时,项目中业务就会变得越来越复杂,假如我们只使用一个对象去处理
所有的业务,这个对象的复杂度就会更高并且难以维护,生活中和实际项目中对类似问题的解
决方案往往"分而治之"的思想.来降低业务复杂度,提高其可维护性.那现在的问题的是如何分,
按照什么规则去分,这就需要有一定的设计,于是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架构处理请求和响应,其简易架构如图所示:
image.png

其核心组件有:

1.DispathcherServlet(核心控制器,前端控制器,Controller)

是客户端所有请求处理的入口,负责请求转发。

2.RequestMapping(请求映射)

负责存储请求url到后端handler对象之间的映射。

3.Handler(请求处理器)

用于处理DispatcherServlet对象转发过来的请求数据。

4.ModelAndView(业务数据和视图信息的对象)

用于封装业务数据和视图信息的对象

5.ViewResolver(视图解析器,View)

负责处理所有Handler对象响应结果中。

四.SpringBoot 工程中Web MVC 快速入门实现

准备工作

第一步:创建项目module,基本信息如图所示:

image.png

第二步:添加项目依赖(可以在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>

第二步:启动服务器并直接进行访问测试,如图所示

image.png

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;
@Controller
public 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

第三步:启动服务进行访问测试,如图所示:

image.png

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)。

阅读 363
4 声望
0 粉丝
0 条评论
你知道吗?

4 声望
0 粉丝
宣传栏