• Spring MVC 之MVC 体系结构、什么是SpringMVC


    MVC 体系结构

    三层架构

    我们的开发架构⼀般都是基于两种形式,⼀种是 C/S 架构,也就是客户端/服务器;另⼀种是 B/S 架构,也就是浏览器服务器。在 JavaEE 开发中,⼏乎全都是基于 B/S 架构的开发。那么在 B/S 架构中,系统标准的三层架构包括:表现层、业务层、持久层。
    三层架构中,每⼀层各司其职,接下来我们就说说每层都负责哪些⽅⾯:

    • 表现层 :

    也就是我们常说的web 层。它负责接收客户端请求,向客户端响应结果,通常客户端使⽤http 协议请求web 层,web 需要接收 http 请求,完成 http 响应。
    表现层包括展示层和控制层:控制层负责接收请求,展示层负责结果的展示。
    表现层依赖业务层,接收到客户端请求⼀般会调⽤业务层进⾏业务处理,并将处理结果响应给客户端。
    表现层的设计⼀般都使⽤ MVC 模型。(MVC 是表现层的设计模型,和其他层没有关系)

    • 业务层 :

    也就是我们常说的 service 层。它负责业务逻辑处理,和我们开发项⽬的需求息息相关。web 层依赖业务层,但是业务层不依赖 web 层。
    业务层在业务处理时可能会依赖持久层,如果要对数据持久化需要保证事务⼀致性。(也就是我们说的, 事务应该放到业务层来控制)

    • 持久层 :

    也就是我们是常说的 dao 层。负责数据持久化,包括数据层即数据库和数据访问层,数据库是对数据进⾏持久化的载体,数据访问层是业务层和持久层交互的接⼝,业务层需要通过数据访问层将数据持久化到数据库中。通俗的讲,持久层就是和数据库交互,对数据库表进⾏增删改查的。

    MVC设计模式

    MVC 全名是 Model View Controller,是 模型(model)-视图(view)-控制器(controller) 的缩写, 是⼀种⽤于设计创建 Web 应⽤程序表现层的模式。MVC 中每个部分各司其职:
    Model(模型):模型包含业务模型和数据模型,数据模型⽤于封装数据,业务模型⽤于处理业务。
    View(视图): 通常指的就是我们的 jsp 或者 html。作⽤⼀般就是展示数据的。通常视图是依据模型数据创建的。
    Controller(控制器): 是应⽤程序中处理⽤户交互的部分。作⽤⼀般就是处理程序逻辑的。
    MVC提倡:每⼀层只编写⾃⼰的东⻄,不编写任何其他的代码;分层是为了解耦,解耦是为了维护⽅便分⼯协作

    Spring MVC 是什么?

    SpringMVC 全名叫 Spring Web MVC,是⼀种基于 Java 的实现 MVC 设计模型的请求驱动类型的轻量级Web 框架,属于 SpringFrameWork 的后续产品。
    SpringMVC 已经成为 ⽬前最主流的 MVC 框架 之⼀,并且 随着 Spring3.0 的发布,全⾯超越 Struts2,成为最优秀的 MVC 框架。
    Servlet、Struts实现接⼝、springmvc中要让⼀个java类能够处理请求只需要添加注解就OK。
    它通过⼀套注解,让⼀个简单的 Java 类成为处理请求的控制器,⽽⽆须实现任何接⼝。同时它还⽀持RESTful 编程⻛格的请求。
    总之:Spring MVC和Struts2⼀样,都是 为了解决表现层问题 的web框架,它们都是基于 MVC 设计模式的。⽽这些表现层框架的主要职责就是处理前端HTTP请求。
    Spring MVC 本质可以认为是对servlet的封装,简化了我们serlvet的开发
    作⽤:1)接收请求 2)返回响应,跳转⻚⾯
    在这里插入图片描述

    扩展知识

    Spring模块

    在这里插入图片描述
    这些模块被总结为以下几部分:

    Data Access/Integration(数据访问/集成)

    Data Access/Integration层包含有JDBCORMOXMJMSTransaction模块,其中:

    • JDBC模块提供了一个JDBC抽象层,它可以消除冗长的JDBC编码和解析数据库厂商特有的错误代码。这个模块包含了Spring对JDBC数据访问进行封装的所有类。
    • ORM模块为流行的对象-关系映射API,如JPA、JDO、Hibernate、iBatis等,提供了一个交互层。利用ORM封装包,可以混合使用所有Spring提供的特性进行O/R映射(如简单声明性事务管理)。
      Spring框架插入了若干个ORM框架,从而提供了ORM的对象关系工具,其中包括JDO、Hibernate和iBatisSQL Map。所有这些都遵从Spring的通用事务和DAO异常层次结构。
    • OXM模块提供了一个对Object/XML映射实现的抽象层,Object/XML映射实现包括JAXB、Castor、XMLBeans、JiBX和XStream。
    • JMS模块主要包含了一些制造和消费消息的特性。
    • Transaction模块支持编码和声明性的事务管理,这些事务类必须实现特定的接口,并且对所有的POJO都适用。
    Web(网络层)

    Web上下文模块建立在应用程序上下文模块之上。所以,Spring框架支持与Jakarta Struts集成。Web模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。Web层包含了WebWeb-ServletWebSocketWeb-Porlet模块,具体说明如下。

    • Web模块:提供了基础的面向Web的集成特性。例如,多文件上传、使用servlet listeners初始化IoC容器以及一个面向Web的应用上下文。它还包含Spring远程支持中Web的相关部分。
    • Web-Servlet模块web.servlet.jar:该模块包含Spring的model-view-controller(MVC)实现。Spring的MVC框架使得模型范围内的代码和web forms之间能够清楚地分离开来,并与Spring框架的其他特性集成在一起。
    • WebSocket模块:Spring Framework 4引入了一个spring-websocket模块用来全面的支持websocket。它与Java WebSocket API标准(JSR-356)兼容,并且还提供了一些额外功能。
    • Web-Porlet模块:提供了用于Portlet环境和Web-Servlet模块的MVC的实现。
    AOP(面向切面)

    AOP模块提供了一个符合AOP联盟标准的面向切面编程的实现,它让你可以定义例如方法拦截器和切点,从而将逻辑代码分开,降低他们之间的耦合性。利用source-level的元数据功能,还可以将各种行为信息合并到你的代码中,这有点像.Net技术中的attribute概念。
    通过配置管理特性,Spring AOP模块直接将面向切面的编程功能集成到了Spring框架中,所以可以很容易地使Spring框架管理的任何对象支持AOP。Spring AOP模块为基于Spring的应用程序中的对象提供了事务管理服务。通过使用Spring AOP,不用依赖EJB组件,就可以将声明性事务管理集成到应用程序中。

    • Aspects模块提供了对AspectJ的集成支持。
    • Instrumentation模块提供了class Instrumentation支持和classloader实现,使得可以在特定的应用服务器上使用。
    Messaging(消息传送)

    消息传送:Spring FrameWork 4包括一个spring-messaging模块,它是从Spring集成项目的关键抽象,如Message, MessageChannel,MessageHandle。该模块该包含一组注释映射消息的方法,类似Spring MVC基于注释的编程模型。

    Core Container(核心容器)

    Core Container(核心容器)包含CoreBeansContextExpression Language模块.
    Core 和 Beans模块是框架的基础部分,提供IoC(控制反转)和依赖注入特性.这里的基础概念是BeanFactory,它提供对Factory模式的经典实现来消除对程序性单例模式的需要,并真正地允许你从程序逻辑中分离出依赖关系和配置。

    • Core模块 : 主要包含Spring框架基本的核心工具类,Spring的其他组件都要使用到这个包里的类,Core模块是其他组件的基本核心.当然你也可以在自己的应用系统中使用这些工具类;
    • Beans模块 : 这个模块所有应用都要用到,它包含访问配置文件 创建和管理bean以及进行IoC/DI操作相关的所有类;
    • Context模块 : 该模块构建于Core和Beans模块基础之上,提供了一种类似于JNDI注册器的框架式对象访问方法.Context模块继承了Beans的特性,为Spring核心提供了大量扩展,添加了对国际化、事件传播 、资源加载和堆Context的透明创建的支持。Context模块同时也支持J2EE的一些特性,例如EJB、JMX和基础的远程处理。其中ApplicationContext接口是Context模块的关键。
    • Expression Language模块 : 该模块提供了一个强大的表达式语言用于在运行时查询和操纵对象。它是JSP2.1规范中定义的一个扩展。该语言支持设备/获取属性的值、属性的分配、方法的调用、访问数组上下文、容器和索引器、逻辑和算术运算符、命名变量以及从Spring的IoC容器中根据名称检索对象。它也支持list投影、选择和一般的list聚合。
    Test(测试层)

    Test模块支持单元测试和包含Junit或者TestNG的集成测试,它提供了Spring的ApplicationContext一致性装载和这些上下文的缓存机制,它还提供了可用于测试代码隔离的模拟对象。

    Spring的7大优点

    Spring 是一个在企业级开发中使用非常成熟的框架,有些开发人员甚至认为离开了 Spring 就不能很好地完成项目的开发。这种说法虽然有些夸张,但也说明它在开发中的广泛应用。

    使用 Spring 能加快项目的开发速度,能使业务代码逻辑更加清晰,也能让开发人员更关注业务的开发。简单来说,在项目中使用 Spring 具有以下 7 个优点:

    • 非侵入式:基于 Spring 开发的应用的对象可以不依赖于 Spring 的 API。
    • 控制反转:IoC,指将对象的创建和管理交给 Spring,只需要进行对象的注入即可,不用担心对象的创建和值的设置。
    • 依赖注入:DI,配置后由 Spring 给属性赋值,而不需要再手动调用 set 方法给属性赋值。
    • 面向切面编程(AOP):更加简单和高效地完成日志记录、权限判定及事务处理等功能。
    • 容器化:Spring 就是一个容器,用于管理应用对象的整个生命周期。
    • 功能组件化:使用 Spring 框架,能快速集成第三方的组件,从而组合成一个复杂的应用,并且可以插拔式选择不同的组件。
    • 一站式开发:在 Spring 的基础上可以方便地整合第三方类库到项目中。

    本文内容到此结束了,
    如有收获欢迎点赞👍收藏💖关注✔️,您的鼓励是我最大的动力。
    如有错误❌疑问💬欢迎各位指出。
    主页共饮一杯无的博客汇总👨‍💻

    保持热爱,奔赴下一场山海。🏃🏃🏃

  • 相关阅读:
    Python 操作pdf文件(pdfplumber读取PDF写入Excel)
    docker--redis容器部署及地理空间API的使用示例-II
    混合现实(MR)技术的应用场景
    JSON模块
    docker安装
    Maven插件初体验【附源码】
    一篇文章让你学会K8s软件安装神器Helm
    基于Open3D的点云处理20- 基于Visualizer类自定义可视化
    LightFM推荐系统框架学习笔记(二)
    水仙花数(熟悉Python后再写)
  • 原文地址:https://blog.csdn.net/qq_35427589/article/details/132713137