Spring MVC 简介

目录

  • [1. 什么是MVC](#1. 什么是MVC)
  • [2. 什么是SpringMVC](#2. 什么是SpringMVC)

1. 什么是MVC

MVC是一种常用的软件架构模式。可以看作是一种设计模式,也可以看作是一种软件框架。经典MVC模式中,M是指模型,V是视图,C则是控制器,使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。最典型的MVC就是JSP + servlet + javabean的模式。

1)模型(Model):模型是应用程序的核心,它代表应用程序的数据和业务逻辑。模型通常包括数据访问对象、实体类和业务逻辑类等。模型的主要职责是处理数据和提供业务逻辑,但它并不知道任何关于用户界面或控制器的信息。

2)视图(View):视图是用户界面的呈现方式,它通常由HTML、CSS和JavaScript等技术实现。视图负责显示数据,但不处理数据或业务逻辑。视图是与模型和控制器分离的,它只是显示数据,不会对数据进行任何修改。

3)控制器(Controller):控制器是应用程序的协调者,它负责处理用户输入并更新模型和视图。控制器接收用户输入并根据输入调用相应的模型和视图。控制器是模型和视图之间的桥梁,它将用户输入转换为模型的操作,并将模型的结果传递给视图进行显示。

使用MVC结构的好处:

1)分离关注点:MVC模式通过将应用程序分成三个组成部分,从而实现了业务逻辑、用户界面和用户输入的分离。这种分离使得代码更易于维护和重用。

2)可测试性:MVC模式使得应用程序的各个组成部分可以独立测试。模型和视图可以分别测试,而控制器也可以单独测试。

3)可扩展性:MVC模式使得应用程序更易于扩展。例如,如果需要添加新的视图,可以很容易地创建一个新的视图类并将其与现有的控制器和模型集成。

4)可重用性:MVC模式使得应用程序的各个组成部分可以重用。例如,可以使用相同的模型和控制器来支持不同的视图。

2. 什么是SpringMVC

常见的服务器端MVC框架有:Struts、Spring MVC、ASP.NET MVC、Zend Framework、JSF、Tapestry、Grails等,他们都是MVC设计模式的具体实现。而Spring MVC就是MVC设计模式在Spring中的实现。Spring MVC采用了松散耦合的可插拔组件结构,比其他的MVC框架更具有灵活性和扩展性,Spring MVC通过使用一套注解,使一个Java类成为前端控制器(Controller),不需要实现任何接口,同时,Spring MVC支持RES形式的URL请求,除此之外,Spring MVC在数据绑定、视图解析、本地化处理及静态资源处理上都有许多不俗的表现。Spring MVC围绕DispatcherServlet(前端控制器)为中心展开,DispatcherServlet(前端控制器)是Spring MVC的中枢,和MVC的思想一样,它负责从视图获取用户请求并且分派给相应的处理器处理,并决定用哪个视图去把数据呈现给给用户。

Spring MVC的特点:

  • 让我们能非常简单的设计出干净的Web层和薄薄的Web层;
  • 进行更简洁的Web层的开发;
  • 天生与Spring框架集成(如IoC容器、AOP等);
  • 提供强大的约定大于配置的契约式编程支持;
  • 能简单的进行Web层的单元测试;
  • 支持灵活的URL到页面控制器的映射;
  • 非常容易与其它视图技术集成,如Velocity、FreeMarker等,因为模型数据不放在特定的API里,而是放在一 个Model里(Map数据结构实现,因此很容易被其他框架使用);
  • 非常灵活的数据验证、格式化和数据绑定机制,能使用任何对象进行数据绑定,不必实现特定框架的API;
  • 提供一套强大的JSP标签库,简化JSP开发;
  • 支持灵活的本地化、主题等解析;
  • 更加简单的异常处理;
  • 对静态资源的支持; 支持Restful风格。

SpringMVC官方文档:

https://docs.spring.io/spring-framework/reference/web/webmvc.html

相关推荐
我是无敌小恐龙几秒前
Java SE 零基础入门Day01 超详细笔记(开发前言+环境搭建+基础语法)
java·开发语言·人工智能·opencv·spring·机器学习
心态与习惯1 小时前
Julia 初探,及与 C++,Java,Python 的比较
java·c++·python·julia·比较
一叶飘零_sweeeet1 小时前
优秀文章合集
java
zopple1 小时前
ThinkPHP5.x与3.x核心差异解析
java·python·php
南境十里·墨染春水2 小时前
C++ 笔记 thread
java·开发语言·c++·笔记·学习
南境十里·墨染春水2 小时前
C++ 笔记 高级线程同步原语与线程池实现
java·开发语言·c++·笔记·学习
阿巴斯甜2 小时前
Predicate的使用:
java
阿巴斯甜2 小时前
Supplier的使用:
java
阿巴斯甜2 小时前
Function 用法:
java
做个文艺程序员3 小时前
流式输出(SSE)在 Spring Boot 中的实现【OpenClAW + Spring Boot 系列 第3篇】
java·spring boot·后端