1.Introduction to Spring Web MVC framework

Web MVC framework

文档:22. Web MVC framework (spring.io)

概述

Web MVC框架(Web Model-View-Controller Framework)是一种用于构建Web应用程序的软件架构模式。MVC模式将应用程序分为三个主要组件:模型(Model)、视图(View)和控制器(Controller)。这种分离有助于组织代码和简化开发和维护过程。以下是MVC框架的三个主要组件的详细说明:

  1. 模型(Model)
    • 职责:模型负责处理应用程序的数据逻辑。它直接与数据库或其他数据源进行交互,执行数据的创建、读取、更新和删除操作。
    • 功能:模型通常包含应用程序的核心业务逻辑和数据验证规则。
  2. 视图(View)
    • 职责:视图负责呈现数据给用户。它获取来自模型的数据,并将其格式化为HTML或其他前端技术以显示在网页上。
    • 功能:视图只负责展示数据,不处理业务逻辑或数据操作。
  3. 控制器(Controller)
    • 职责:控制器充当模型和视图之间的中介。它接收用户输入(如通过表单提交或URL请求),处理这些输入,通过模型更新数据,然后选择合适的视图来展示结果。
    • 功能:控制器通常包含路由和处理用户请求的逻辑。

Web MVC 框架的优势

  • 分离关注点:MVC模式将应用程序的不同部分分离开来,使代码更加模块化和可维护。
  • 重用性和灵活性:由于模型、视图和控制器是独立的模块,可以更容易地重用和替换其中的部分。
  • 并行开发:开发团队可以并行工作,例如前端开发人员可以专注于视图的设计,而后端开发人员则可以处理业务逻辑和数据。

常见的Web MVC框架

  • Java:Spring MVC
  • Python:Django、Flask(尽管Flask不是严格的MVC框架,但可以遵循MVC模式)
  • Ruby:Ruby on Rails
  • JavaScript:Express.js(通常用于Node.js)

这些框架通常提供了一整套工具和库,帮助开发人员更快速地构建、测试和部署Web应用程序。

Spring Web MVC Framework 简介

Spring Web MVC框架是基于DispatcherServlet设计的,负责将请求分发给处理程序。它提供可配置的处理器映射、视图解析、区域设置、时区和主题解析,还支持文件上传。默认的处理器基于@Controller和@RequestMapping注解,提供了一系列灵活的处理方法。Spring 3.0引入了RESTful网站和应用程序的支持,通过@PathVariable注解和其他特性实现。

核心设计原则

一个关键的设计原则是“对扩展开放,对修改关闭”(Open for extension, closed for modification)。在Spring Web MVC及其整体设计中,这一原则得到了充分体现。

Spring Web MVC的一些核心类的方法被标记为final,开发人员不能重写这些方法以提供自己的行为。这并非随意为之,而是为了遵循上述设计原则。

参考文献

有关这一原则的解释,可以参考Seth Ladd等人的《Expert Spring Web MVC and Web Flow》,特别是第一页117的“设计一瞥”部分。另请参阅Bob Martin的《开放封闭原则》(PDF)。

不能为final方法添加advice

在使用Spring MVC时,不能为final方法添加advice。例如,不能为AbstractController.setSynchronizeOnSession()方法添加advice。有关AOP代理及为什么不能为final方法添加advice的更多信息,请参阅“理解AOP代理”一节。

Spring Web MVC的功能

  1. 命令对象和表单绑定
    • 在Spring Web MVC中,任何对象都可以作为命令或表单绑定对象。开发人员无需实现特定的框架接口或基类。
    • Spring的数据绑定非常灵活。例如,它将类型不匹配视为验证错误,而不是系统错误。因此,无需在表单对象中将业务对象的属性重复为简单的无类型字符串以处理无效提交,或正确转换字符串。相反,通常直接绑定到业务对象更为合适。
  2. 视图解析
    • Spring的视图解析非常灵活。一个Controller通常负责准备包含数据的模型Map和选择视图名称,但它也可以直接写入响应流并完成请求。
    • 视图名称解析高度可配置,可以通过文件扩展名或Accept头内容类型协商、bean名称、属性文件或自定义ViewResolver实现来完成。
    • 模型(MVC中的M)是一个Map接口,允许完全抽象视图技术。可以直接与基于模板的渲染技术(如JSP、Velocity和Freemarker)集成,或直接生成XML、JSON、Atom等多种类型的内容。模型Map可以简单地转换为适当的格式,例如JSP请求属性、Velocity模板模型等。

通过这些特性,Spring Web MVC框架提供了高度的灵活性和可扩展性,使开发人员可以更方便地构建和维护Web应用程序。

Spring Web MVC 特性

Spring Web MVC框架提供了一系列强大的特性,使其在构建和管理Web应用程序时非常灵活和高效。以下是Spring Web MVC的一些主要特性:

  1. 角色的明确分离
    • 各个角色(如控制器、验证器、命令对象、表单对象、模型对象、DispatcherServlet、处理器映射、视图解析器等)都可以由专门的对象来完成。这种分离有助于代码的组织和维护。
  2. 强大而简洁的配置
    • 框架和应用程序类可以作为JavaBeans进行配置。这种配置能力包括在不同上下文之间的轻松引用,例如从Web控制器到业务对象和验证器。
  3. 适应性、非侵入性和灵活性
    • 可以根据需要定义任何控制器方法签名,可能使用参数注解(如@RequestParam、@RequestHeader、@PathVariable等)来适应特定场景。
  4. 可重用的业务代码
    • 使用现有的业务对象作为命令或表单对象,而不是将它们镜像到特定框架的基类。这避免了代码重复。
  5. 可定制的绑定和验证
    • 类型不匹配被视为应用级别的验证错误,保留了有问题的值,支持本地化的日期和数字绑定等,而不是仅仅使用字符串形式的表单对象并手动解析和转换为业务对象。
  6. 可定制的处理器映射和视图解析
    • 处理器映射和视图解析策略范围从简单的基于URL的配置到复杂的、专门构建的解析策略。Spring比那些要求使用特定技术的Web MVC框架更灵活。
  7. 灵活的模型传输
    • 使用名称/值Map的模型传输支持与任何视图技术的轻松集成。
  8. 可定制的区域设置、时区和主题解析
    • 支持使用或不使用Spring标签库的JSP、支持JSTL、支持Velocity而无需额外的桥接等。
  9. 简单但强大的JSP标签库
    • Spring标签库提供了对数据绑定和主题等功能的支持。自定义标签允许在标记代码方面具有最大的灵活性。
  10. JSP表单标签库
    • Spring 2.0引入的JSP表单标签库使在JSP页面中编写表单变得更加容易。
  11. 基于HTTP请求或HTTP会话的bean生命周期
    • 这种特性不是Spring MVC本身的特有功能,而是Spring MVC使用的WebApplicationContext容器的功能。此类bean作用域包括请求、会话、全局会话、应用程序和WebSocket作用域。

Spring Web Flow(SWF)

Spring Web Flow(SWF)旨在成为管理Web应用程序页面流程的最佳解决方案。SWF与现有的框架(如Spring MVC和JSF)集成,可以在Servlet和Portlet环境中使用。如果有一个或多个业务流程受益于对话模型而不是纯请求模型,那么SWF可能是解决方案。

SWF的特点

逻辑页面流:SWF允许将逻辑页面流捕获为自包含的模块,可以在不同情况下重用,非常适合构建引导用户通过受控导航以驱动业务流程的Web应用程序模块。

有关SWF的更多信息,请参阅Spring Web Flow网站。

总结

​ Spring Web MVC和Spring Web Flow提供了高度灵活和可扩展的解决方案,用于构建和管理Web应用程序。通过明确分离角色、强大的配置能力和广泛的可定制选项,Spring Web MVC为开发人员提供了一个强大的工具集。而Spring Web Flow则通过管理页面流和对话状态,为复杂的Web应用程序提供了更高级的功能。

其他MVC实现的可插拔性

在某些项目中,非Spring MVC实现可能更适合。例如,许多团队希望利用他们在JSF等技能和工具上的现有投资。如果不想使用Spring的Web MVC,但打算利用Spring提供的其他解决方案,可以轻松地将你选择的Web MVC框架与Spring集成。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/45905.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AQS之ReentrantLock源码分析

目录 1. LockSupport 类 2. 如何设计一把独占锁? 3. 管程 — Java同步的设计思想 3.1 MESA模型 为什么条件队列的线程需要移到同步队列再唤醒运行? 4. AQS原理分析 4.1 什么是AQS 4.2 AQS核心结构 AQS内部维护属性volatile int state 4.3 AQS定义…

Android 10.0 SystemUI启动流程

1、手机开机后,Android系统首先会创建一个Zygote(核心进程)。 2、由Zygote启动SystemServer。 3、SystemServer会启动系统运行所需的众多核心服务和普通服务、以及一些应用及数据。例如:SystemUI 启动就是从 SystemServer 里启动的…

[web]-sql注入-白云搜索引擎

ctrlu查看源代码&#xff0c;发现前端有js过滤 <script>function myFunction(){var xdocument.getElementById("number").value;var adocument.getElementById("word").value;var ba.replace(/[\ |\~|\|\!|\|\#|\$|\%|\^|\&|\*|\(|\)|\-|\_|\|\…

通过vm可以访问那些属性——06

1.通过vue实例都可以访问那些属性&#xff1f;&#xff08;通过vm都可以vm.什么&#xff09; vue实例中的属性很多。有的以$开始&#xff0c;有的以_开始。 所有以$开始的属性&#xff0c;可以看做是公开的属性&#xff0c;这些属性是提供给程序员使用的 所有以_开始的属性&…

Redis学习笔记(个人向)

Redis学习笔记(个人向) 1. 概述 是一个高性能的 key-value 数据库&#xff1b;其具有以下三个特点&#xff1a; Redis支持数据的持久化&#xff0c;可以将内存中的数据保存在磁盘中&#xff0c;重启的时候可以再次加载进行使用。Redis不仅仅支持简单的key-value类型的数据&…

《昇思25天学习打卡营第19天|生成式-Pix2Pix实现图像转换》

学习内容&#xff1a;Pix2Pix实现图像转换 1.模型简介 Pix2Pix是基于条件生成对抗网络&#xff08;cGAN, Condition Generative Adversarial Networks &#xff09;实现的一种深度学习图像转换模型&#xff0c;该模型是由Phillip Isola等作者在2017年CVPR上提出的&#xff0c…

【YOLO系列】快速部署YOLOv5(Windows)

引言 在计算机视觉领域&#xff0c;目标检测是至关重要的任务之一&#xff0c;它涉及识别图像或视频中的对象&#xff0c;并将其分类和定位。近年来&#xff0c;**YOLO&#xff08;You Only Look Once&#xff09;**算法因其速度与精度的平衡而变得非常流行。在这篇博文中&…

防火墙NAT智能选举综合实验

目录 实验拓扑 实验要求 实验思路 实验配置 需求7 需求8 需求9 需求10 需求11 实验拓扑 实验要求 7.办公区设备可以通过电信链路和移动链路上网(多对多的NAT&#xff0c;并且需要保留一个公网IP不能用来转换) 8.分公司设备可以通过总公司的移动链路和电信链路访问到d…

电表及销售统计Python应用及win程序

暑假每天都要填表算账很烦躁&#xff0c;就整了个小程序来减轻压力 程序可以做到记录输入的每一条数据&#xff0c;并用新数据减去旧数据算新增的量&#xff0c;同时记录填写时间 Python代码 import json import os # 导入os模块 from datetime import datetime from tkint…

yolov8预测

yoloV8 官方地址 预测 -Ultralytics YOLO 文档 1.图片预测 from ultralytics import YOLO #### 图片预测1 ### https://www.youtube.com/watch?vneBZ6huolkg ### https://github.com/ultralytics/ultralytics ### https://github.com/abdullahtarek/football_analysis…

细数「人力资源」的「六宗罪」

细数「人力资源」的「六宗罪」 不要让人力资源成为企业发展的障碍 人力资源的六宗罪: 招聘与配置培训与开发薪酬与绩效请您先「点赞」+「在看」+「收藏」+关注@netkiller,转发给你的朋友,再慢慢看,方便查看往期精彩文章,以防手划找不到,您的支持就是我最大的动力。 人力…

C++学习指南(一)——C++入门基础

欢迎来到繁星的CSDN&#xff0c;本期内容主要包括C第一个程序&#xff0c;命名空间&#xff0c;缺省参数&#xff0c;函数重载&#xff0c;引用、inline以及nullptr这些基础概念。 在进入正题之前&#xff0c;我需要先阐述一下。本系列涉及的内容为C部分&#xff0c;可以理解为…

Windows图形界面(GUI)-SDK-C/C++ - 窗口层次结构 - 窗口状态和属性

公开视频 -> 链接点击跳转公开课程博客首页 -> 链接点击跳转博客主页 目录 窗口层次结构 EnumWindows: 枚举系统中的所有顶层窗口&#xff0c;并将句柄传递给回调函数。 EnumChildWindows: 枚举指定父窗口的所有子窗口&#xff0c;并将句柄传递给回调函数。 窗口状态…

Camera Raw:蒙版 - 画笔

Camera Raw “蒙版”模块中的画笔 Brush工具提供了一种灵活创建蒙版的能力&#xff0c;可快速创建粗略选区以便进行局部调整和创意处理。 快捷键&#xff1a;K ◆ ◆ ◆ 使用方法与技巧 1、常用快捷键 改变画笔大小&#xff1a;[ / ]。或者&#xff0c;按住 Alt 键并用鼠标右…

论文精读(保姆级解析)——DiFaReli: Diffusion Face Relighting

前言 该论文发表在2023年ICCV上&#xff0c;主要针对人像重打光问题提出了一种新的方法&#xff0c;下面给出论文和项目链接&#xff1a; papergithub 摘要 提出了一种针对单张图像的重打光方法&#xff0c;作者提到针对非漫反射光照的处理比较困难&#xff0c;早期的工作主要…

固态硬盘(SSD)中安装虚拟机Ubuntu系统

在固态硬盘&#xff08;SSD&#xff09;中安装虚拟机Ubuntu系统&#xff0c;前期准备、虚拟机软件选择、Ubuntu系统镜像下载、虚拟机配置、系统安装及后续设置等环节。 一、前期准备 虚拟机软件&#xff1a; 选择合适的虚拟机软件&#xff0c;如VMware Workstation、VirtualB…

Map系列集合

1.Map集合 1.1Map集合概述和特点 Map集合概述 interface Map<K,V> K&#xff1a;键的类型&#xff1b;V&#xff1a;值的类型 Map集合的特点 双列集合,一个键对应一个值 键不可以重复,值可以重复 Map集合的基本使用 public class MapDemo01 {public static void mai…

防火墙NAT实验

一.实验拓扑 二.实验要求 1.办公区设备可以通过电信链路和移动链路上网(多对多的NAT&#xff0c;并且需要保留一个公网IP不能用来转换) 2.分公司设备可以通过总公司的移动链路和电信链路访问到Dmz区的http服务器 3.多出口环境基于带宽比例进行选路&#xff0c;但是&#xff0c…

神经网络 | Transformer 基本原理

目录 1 为什么使用 Transformer&#xff1f;2 Attention 注意力机制2.1 什么是 Q、K、V 矩阵&#xff1f;2.2 Attention Value 计算流程2.3 Self-Attention 自注意力机制2.3 Multi-Head Attention 多头注意力机制 3 Transformer 模型架构3.1 Positional Encoding 位置编…

《梦醒蝶飞:释放Excel函数与公式的力量》12.1 DSUM函数

第12章&#xff1a;数据库函数 第一节 12.1 DSUM函数 12.1.1 简介 DSUM函数是Excel中的一个数据库函数&#xff0c;用于计算数据库或数据表中特定条件下某字段的总和。DSUM函数在处理大规模数据、数据筛选和分析时非常有用。 12.1.2 语法 DSUM(database, field, criteria)…