SpringMVC学习总结(1)--- SpringMVC框架原理

本文详细介绍了MVC(模型-视图-控制器)设计规范及其在Web应用程序中的应用,对比了Model1和Model2模式,重点阐述了SpringMVC框架的特性、工作流程及组件,帮助读者理解如何构建可维护、可测试的复杂应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. MVC

1.1 什么是MVC

MVC(Model View Controller):模型 - 视图 - 控制器,是一种软件设计规范,说明不是设计模式。

本质:将业务逻辑 , 数据 , 界面显示 分离的方式来编写代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。 前后端分离。

MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式:

  • Model(模型)-- 表示应用程序核心,是应用程序中用于处理应用程序数据逻辑的部分。代表一个存取数据的对象或 JAVA POJO。
  • View(视图)-- 显示数据,代表模型包含的数据的可视化。
  • Controller(控制器)-- 控制器作用于模型和视图上,是应用程序中处理用户交互的部分。它控制数据流向模型对象,并在数据变化时更新视图。它使视图与模型分离开。相当于一个调度员。

MVC 模式同时提供了对 HTML、CSS 和 JavaScript 的完全控制。

MVC 分层有助于管理复杂的应用程序,因为您可以在一个时间内专门关注一个方面。例如,您可以在不依赖业务逻辑的情况下专注于视图设计。同时也让应用程序的测试更加容易。

MVC 分层同时也简化了分组开发。不同的开发人员可同时开发视图、控制器逻辑和业务逻辑。

最典型的MVC就是:JSP + servlet + javabean 的模式。

JSP(View) + servlet(Controller) + javabean(Model)
在这里插入图片描述

1.2 MVC编程模式

Model1

在早期的Web开发中,使用Model1模式。

只有两层:视图层和模型层。
在这里插入图片描述
优点:架构简单,适合小型项目开发;

缺点:JSP职责不单一 , 承受它不该承受的压力,不便于维护;

Model2

将项目分为三个模块:M:模型 V:视图 C :控制器
在这里插入图片描述

职责分析:
  • controller:

    • 取得表单的数据
    • 调用业务的逻辑方法
    • 转向指定的页面
  • Model:

    • Dao:操作数据库
    • Service:业务逻辑
    • 保存数据的更新状态
    • pojo
  • View:

    • 显示页面
优点:

Model2优化了Model1时代的缺点,让所有层职责更加分明;降低了维护难度,

常见框架:
  • Struct1、Struct2 :

    基于struts构架的web应用程序基本上符合JSP Model2的设计标准。Struts有其自己的控制器(Controller),同时整合了其他的一些技术去实现模型层(Model)和视图层(View)。在模型层,Struts可以很容易的与数据访问技术相结合,包括EJB,JDBC和Object Relation Bridge。在视图层,Struts能够与JSP, Velocity Templates,XSL等等这些表示层组件相结合。

    但是Struts某些技术特性上已经落后于新兴的MVC框架。面对Spring MVC、Webwork2这些设计更精密,扩展性更强的框架,Struts受到了前所未有的挑战。

  • SpringMVC:

    Spring是一个开源框架,它是为了解决企业应用开发的复杂性而创建的。Spring使使用基本的JavaBeans来完成以前只可能由EJB完成的事情变得可能了。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。

    简单来说,Spring是一个轻量的控制反转和面向切面的容器框架。

2. SpringMVC

2.1 什么是SpringMVC

SpringMVC 是 Spring框架的一个模块,是基于Java实现的MVC的轻量级Web框架。

SpringMVC 是一个基于MVC的web框架,因此也称为 Spring Web MVC。

Spring的MVC框架是围绕一个 DispatcherServlet 来设计的,这个Servlet会把请求分发给各个处理器,并支持可配置的处理器映射、视图渲染、本地化、时区与主题渲染等,甚至还能支持文件上传。处理器是你的应用中注解了 @Controller@RequestMapping 的类和方法,Spring为处理器方法提供了极其多样灵活的配置。Spring 3.0以后提供了 @Controller 注解机制、 @PathVariable 注解以及一些其他的特性,你可以使用它们来进行RESTful web站点和应用的开发。

2.2 SpringMVC的特性

  • 清晰的角色划分:控制器(controller)、验证器(validator)、 命令对象(command object)、表单对象(form object)、模型对象(model object)、 Servlet分发器(DispatcherServlet)、 处理器映射(handler mapping)、视图解析器(view resolver)等等。 每一个角色都可以由一个专门的对象(类)来实现。< Bean>

  • 强大而直接的配置方式:将框架类和应用程序类都能作为JavaBean配置,而且支持跨多个context 的引用。

  • 可适配、非侵入:可以根据不同的应用场景,选择合适的控制器子类 (simple型、command型、form型、wizard型、multi-action型或者自定义),而不是从单一控制器 (比如Action/ActionForm)继承。

  • 可重用的业务代码:可以使用现有的业务对象作为命令或表单对象,而不需要去扩展某个特定框架的基类。

  • 可定制的绑定(binding) 和验证(validation):比如将类型不匹配作为应用级的验证错误, 这可以保存错误的值。再比如本地化的日期和数字绑定等等。在其他某些框架中,你只能使用字符串表单对象, 需要手动解析它并转换到业务对象。

  • 可定制的handler mapping和view resolution:Spring提供从最简单的URL映射, 到复杂的、专用的定制策略。与某些web MVC框架强制开发人员使用单一特定技术相比,Spring显得更加灵活。

  • 灵活的model转换:在Springweb框架中,使用基于Map的 键/值对来达到轻易地与各种视图技术的集成。

  • 可定制的本地化和主题(theme)解析:支持在JSP中可选择地使用Spring标签库、支持JSTL、支持Velocity(不需要额外的中间层)等等。

  • 简单而强大的JSP标签库(Spring Tag Library):支持包括诸如数据绑定和主题(theme) 之类的许多功能。它提供在标记方面的最大灵活性。

  • JSP表单标签库:在Spring2.0中引入的表单标签库,使得在JSP中编写 表单更加容易。

  • Spring Bean的生命周期可以被限制在当前的HTTP Request或者HTTP Session。 准确的说,这并非Spring MVC框架本身特性,而应归属于Sping MVC使用的WebApplicationContext容器。

2.3 DispatcherServlet

Spring MVC框架,与其他很多web的MVC框架一样:请求驱动;所有设计都围绕着一个中央Servlet来展开,它负责把所有请求分发到控制器;同时提供其他web应用开发所需要的功能。不过Spring的中央处理器( DispatcherServlet )能做的比这更多。它与Spring IoC容器做到了无缝集成,这意味着,Spring提供的任何特性,在Spring MVC中都可以使用。
下图展示了Spring Web MVC的 DispatcherServlet 处理请求的工作流。你会发现, DispatcherServlet 应用的其实就是一个”前端控制器“的设计模式。

在这里插入图片描述

2.4 SpringMVC框架

在这里插入图片描述

步骤:

  1. 发起请求到前端控制器(DispatcherServlet)。

  2. 前端控制器请求HandelMapping查找Handler。

    可以根据xml配置、注解进行查找。

  3. 处理器映射器(HandelMapping)向前端控制器返回Handler。

  4. 前端处理器调用处理器适配器(HandlerAdaptor)去执行Handler。

  5. 处理器适配器去执行Handler。

  6. Hander处理器执行完给适配器返回model and view

  7. 处理器适配器向前端返回model and view。

    model and view是SpringMVC框架的一个底层对象,包括model和view。

  8. 前端控制器请求视图解析器去进行视图解析。

    根据逻辑视图名解析成真正的视图(jsp)。

  9. 视图解析器向前端控制器返回view。

  10. 前端控制器进行视图渲染。

    视图渲染将模型数据(在Model and View对象中)填充到request域。

  11. 前端控制器向用户响应结果。

组件:

  • 前端控制器 DispatcherServlet

    接收请求、响应结果,相当于转发器。中央处理器

    有了DispatcherServlet减少了其他组件之间的耦合度。

  • 处理器映射器 HandelMapping

    根据请求的url找到对应的处理器。

  • 处理器适配器 HandlerAdaptor

    按照特定规则(HandlerAdaptor要求的规则)去执行Hanlder。

  • 处理器 Handler

    又称Controller

    【注意】编写 Handler时按照HandlerAdaptor的要求去做,这样适配器才可以去正确执行 Handler。

    需要程序员开发。

  • 视图解析器 View resolver

    进行视图解析,根据逻辑视图名解析成真正的视图(view)。

  • 视图 View

    View是一个接口,实现类支持不同的View类型(jsp、freemarker、pdf…)

    需要程序员开发jsp。

内容概要:本文深入探讨了Kotlin语言在函数式编程和跨平台开发方面的特性和优势,结合详细的代码案例,展示了Kotlin的核心技巧和应用场景。文章首先介绍了高阶函数和Lambda表达式的使用,解释了它们如何简化集合操作和回调函数处理。接着,详细讲解了Kotlin Multiplatform(KMP)的实现方式,包括共享模块的创建和平台特定模块的配置,展示了如何通过共享业务逻辑代码提高开发效率。最后,文章总结了Kotlin在Android开发、跨平台移动开发、后端开发和Web开发中的应用场景,并展望了其未来发展趋势,指出Kotlin将继续在函数式编程和跨平台开发领域不断完善和发展。; 适合人群:对函数式编程和跨平台开发感兴趣的开发者,尤其是有一定编程基础的Kotlin初学者和中级开发者。; 使用场景及目标:①理解Kotlin中高阶函数和Lambda表达式的使用方法及其在实际开发中的应用场景;②掌握Kotlin Multiplatform的实现方式,能够在多个平台上共享业务逻辑代码,提高开发效率;③了解Kotlin在不同开发领域的应用场景,为选择合适的技术栈提供参考。; 其他说明:本文不仅提供了理论知识,还结合了大量代码案例,帮助读者更好地理解和实践Kotlin的函数式编程特性和跨平台开发能力。建议读者在学习过程中动手实践代码案例,以加深理解和掌握。
内容概要:本文深入探讨了利用历史速度命令(HVC)增强仿射编队机动控制性能的方法。论文提出了HVC在仿射编队控制中的潜在价值,通过全面评估HVC对系统的影响,提出了易于测试的稳定性条件,并给出了延迟参数与跟踪误差关系的显式不等式。研究为两轮差动机器人(TWDRs)群提供了系统的协调编队机动控制方案,并通过9台TWDRs的仿真和实验验证了稳定性和综合性能改进。此外,文中还提供了详细的Python代码实现,涵盖仿射编队控制类、HVC增强、稳定性条件检查以及仿真实验。代码不仅实现了论文的核心思想,还扩展了邻居历史信息利用、动态拓扑优化和自适应控制等性能提升策略,更全面地反映了群体智能协作和性能优化思想。 适用人群:具备一定编程基础,对群体智能、机器人编队控制、时滞系统稳定性分析感兴趣的科研人员和工程师。 使用场景及目标:①理解HVC在仿射编队控制中的应用及其对系统性能的提升;②掌握仿射编队控制的具体实现方法,包括控制器设计、稳定性分析和仿真实验;③学习如何通过引入历史信息(如HVC)来优化群体智能系统的性能;④探索中性型时滞系统的稳定性条件及其在实际系统中的应用。 其他说明:此资源不仅提供了理论分析,还包括完整的Python代码实现,帮助读者从理论到实践全面掌握仿射编队控制技术。代码结构清晰,涵盖了从初始化配置、控制律设计到性能评估的各个环节,并提供了丰富的可视化工具,便于理解和分析系统性能。通过阅读和实践,读者可以深入了解HVC增强仿射编队控制的工作原理及其实际应用效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值