一天急速通关SpringMVC

0 文章介绍

在倍速观看动力节点杜老师的Spring6MVC教程之后,根据视频内容以及课程笔记进行实践,经过自己的理解并总结后形成这篇学习笔记。文章总共分为六个章节,包括了原教程的十四个章节的大部分知识,学习本文的前置知识需要:JavaSEJDBCMySQLXMLMyBatisSpring6AjaxThymeleaf。本文所提供的信息和内容仅供参考,作者和发布者不保证其准确性和完整性。

1 介绍

1.1 MVC架构与三层架构

MVC架构本质是一种用户界面设计模式,主要用于分离用户界面的展示、数据管理和用户交互逻辑,将应用分为三个核心组件:

  • 模型(Model):应用程序的数据结构和业务逻辑,负责与数据库、文件系统和其他数据源进行交互,获取和处理数据。
  • 视图(View):用户界面的展示部分,负责向用户呈现数据并接收用户的输入数据,不涉及业务逻辑。
  • 控制器(Controller):充当模型和视图之间的中介,处理用户输入并调用模型和视图去完成用户的需求。

理解: 前端浏览器发送请求给Web服务器,Web服务器中的Controller接收到用户的请求,Controller负责将前端提交的数据进行封装,然后Controller调用Model来处理业务,当Model处理完业务后会返回处理之后的数据给ControllerController再调用View来完成数据的展示,最终将结果响应给浏览器,浏览器进行渲染展示页面。

"Uses"
"Updates"
"Used by"
"Used by"
Model
+ data: any
+getData()
+updateData(data: any)
View
+display(data: any)
Controller
+ model: Model
+ view: View
+request(request: any)

三层架构(Three-Tier Architecture)是一种分层架构,为了实现高内聚低耦合,提高系统的可维护性和可扩展性,将应用分为三个逻辑层:

  • 表示层(Presentation Layer:负责用户界面的展示,接收用户输入并展示处理结果。
  • 业务逻辑层(Business Logic Layer:处理业务规则,封装业务逻辑,组合数据访问层的基本功能,形成复杂的业务逻辑功能。
  • 数据访问层(Data Access Layer:负责与数据库进行交互,执行数据的增删改查操作。

理解: 关注点和MVC不一样,关注点在于系统逻辑分离。

"Sends request to"
"Sends request to"
"Returns data to"
"Returns data to"
PresentationLayer
+handleRequest(request: any)
BusinessLogicLayer
+processRequest(request: any)
DataAccessLayer
+saveData(data: any)
+getData()

MVC 架构在实际应用中,模型部分可能会包含复杂的业务逻辑和数据访问操作,为了更好地组织和解耦代码,将 MVC 中的模型层进一步细分为三层架构中的业务逻辑层(Service)和数据访问层(DAO),三层架构中的表示层负责接收用户请求并展示处理结果,其实就对应MVC架构的视图层(View)和控制层(Controller)。

"Updates"
"Uses"
"Includes"
"Uses"
"Returns data to"
"Returns data to"
Model
+ data: any
+getData()
+updateData(data: any)
View
+display(data: any)
Controller
+ model: Model
+ view: View
+request(request: any)
Service
+processRequest(request: any)
DAO
+saveData(data: any)
+getData()

理解:MVC 架构本质上是一种用户界面设计模式,核心目标是分离用户界面的展示、数据和交互逻辑,本身并不涉及应用程序的底层架构设计,如数据存储、业务逻辑处理等,而这些通常是通过其他设计模式或架构(如三层架构、微服务架构等)来实现。通过结合两者,MVC 架构专注于用户界面的设计和交互,而三层架构则提供了更清晰的系统逻辑分离和模块化设计,使得应用程序更加易于维护和扩展。

1.2 Spring MVC介绍

SpringMVC是一个实现了MVC架构模式的Web框架,底层基于Servlet实现,之前学习JavaWeb的时候学了Servlet的一些操作,现在这个框架能够更方便的实现这些操作,同时还支持Spring6IoCAOP,具体的点有:

  • 通过DispatcherServlet作为入口控制器,负责接收请求和分发请求。Servlet需要手动编写Servlet程序。
  • 表单提交时可以通过简单的操作就能自动将表单数据绑定到相应的JavaBean对象中。Servlet需要手动获取。
  • 通过IoC容器管理对象,只需要在配置文件中进行相应的配置即可获取实例对象。Servlet需要手动创建。
  • 提供了拦截器、异常处理器等统一处理请求的机制,并且可以灵活地配置这些处理器。Servlet需要手动过滤器、异常处理器等。
  • 提供了多种视图模板,如JSPFreemarkerVelocity等,并且支持国际化、主题等特性。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">
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值