一天急速通关SpringMVC
0 文章介绍
在倍速观看动力节点杜老师的Spring6MVC
教程之后,根据视频内容以及课程笔记进行实践,经过自己的理解并总结后形成这篇学习笔记。文章总共分为六个章节,包括了原教程的十四个章节的大部分知识,学习本文的前置知识需要:JavaSE
,JDBC
,MySQL
,XML
,MyBatis
,Spring6
,Ajax
,Thymeleaf
。本文所提供的信息和内容仅供参考,作者和发布者不保证其准确性和完整性。
1 介绍
1.1 MVC架构与三层架构
MVC
架构本质是一种用户界面设计模式,主要用于分离用户界面的展示、数据管理和用户交互逻辑,将应用分为三个核心组件:
- 模型(Model):应用程序的数据结构和业务逻辑,负责与数据库、文件系统和其他数据源进行交互,获取和处理数据。
- 视图(View):用户界面的展示部分,负责向用户呈现数据并接收用户的输入数据,不涉及业务逻辑。
- 控制器(Controller):充当模型和视图之间的中介,处理用户输入并调用模型和视图去完成用户的需求。
理解: 前端浏览器发送请求给Web
服务器,Web
服务器中的Controller
接收到用户的请求,Controller
负责将前端提交的数据进行封装,然后Controller
调用Model
来处理业务,当Model
处理完业务后会返回处理之后的数据给Controller
,Controller
再调用View
来完成数据的展示,最终将结果响应给浏览器,浏览器进行渲染展示页面。
三层架构(Three-Tier Architecture
)是一种分层架构,为了实现高内聚低耦合,提高系统的可维护性和可扩展性,将应用分为三个逻辑层:
- 表示层(
Presentation Layer
):负责用户界面的展示,接收用户输入并展示处理结果。 - 业务逻辑层(
Business Logic Layer
):处理业务规则,封装业务逻辑,组合数据访问层的基本功能,形成复杂的业务逻辑功能。 - 数据访问层(
Data Access Layer
):负责与数据库进行交互,执行数据的增删改查操作。
理解: 关注点和MVC
不一样,关注点在于系统逻辑分离。
MVC
架构在实际应用中,模型部分可能会包含复杂的业务逻辑和数据访问操作,为了更好地组织和解耦代码,将 MVC
中的模型层进一步细分为三层架构中的业务逻辑层(Service
)和数据访问层(DAO
),三层架构中的表示层负责接收用户请求并展示处理结果,其实就对应MVC
架构的视图层(View
)和控制层(Controller
)。
理解:MVC
架构本质上是一种用户界面设计模式,核心目标是分离用户界面的展示、数据和交互逻辑,本身并不涉及应用程序的底层架构设计,如数据存储、业务逻辑处理等,而这些通常是通过其他设计模式或架构(如三层架构、微服务架构等)来实现。通过结合两者,MVC
架构专注于用户界面的设计和交互,而三层架构则提供了更清晰的系统逻辑分离和模块化设计,使得应用程序更加易于维护和扩展。
1.2 Spring MVC介绍
SpringMVC
是一个实现了MVC
架构模式的Web
框架,底层基于Servlet
实现,之前学习JavaWeb
的时候学了Servlet
的一些操作,现在这个框架能够更方便的实现这些操作,同时还支持Spring6
的IoC
与AOP
,具体的点有:
- 通过
DispatcherServlet
作为入口控制器,负责接收请求和分发请求。Servlet
需要手动编写Servlet
程序。 - 表单提交时可以通过简单的操作就能自动将表单数据绑定到相应的
JavaBean
对象中。Servlet
需要手动获取。 - 通过
IoC
容器管理对象,只需要在配置文件中进行相应的配置即可获取实例对象。Servlet
需要手动创建。 - 提供了拦截器、异常处理器等统一处理请求的机制,并且可以灵活地配置这些处理器。
Servlet
需要手动过滤器、异常处理器等。 - 提供了多种视图模板,如
JSP
、Freemarker
、Velocity
等,并且支持国际化、主题等特性。Servlet
需要手动处理视图层。
总结:简化了很多操作的同时提供了更多的功能和扩展性。
1.3 入门程序
0 创建Maven Java Web
项目 -> 1 配置pom.xml
依赖 -> 2 配置web.xml
-> 3 配置springmvc-servlet.xml
-> 4 编写Java
代码与视图。
-
环境准备
-
IntelliJ IDEA
:2024.1.7 -
Navicat for MySQL
:17.1.2 -
MySQL
:8.0.26 -
JDK
:17.0.2 -
Maven
:3.9.1
-
-
设置
pom.xml
的打包方式以及添加依赖,打包方式设置为war
。<groupId>com.cut</groupId> <artifactId>spring-mvc-demo</artifactId> <version>1.0-SNAPSHOT</version> <!-- 打包方式设置为war方式 --> <packaging>war</packaging> <dependencies> <!-- Spring MVC依赖 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>6.1.14</version> </dependency> <!--日志框架Logback依赖--> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.5.3</version> </dependency> <!--Servlet依赖--> <dependency> <groupId>jakarta.servlet</groupId> <artifactId>jakarta.servlet-api</artifactId> <version>6.0.0</version> <scope>provided</scope> </dependency> <!--Spring6和Thymeleaf整合依赖--> <dependency> <groupId>org.thymeleaf</groupId> <artifactId>thymeleaf-spring6</artifactId> <version>3.1.2.RELEASE</version> </dependency> </dependencies>
-
配置
web.xml
文件,主要配置SpringMVC
的前端控制器DispatcherServlet
,让除了JSP
的所有请求都走这个控制器。<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="https://jakarta.ee/xml/ns/jakartaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_6_0.xsd" version="6.0">