Spring MVC体系结构和处理请求控制器(一)

一、MVC模式

  • MVC模式是指Model-View-Controller(模型-视图-控制器)模式,是开发Web应用程序时常用的一种代码分层模式
  • MVC模式是软件工程中的一种架构模式,会强制行的把系统的输入、处理和输出分开,是系统从功能上形成Model-View-Controller三个基本部分:

视图(View)-对应组件:JSP或者HTML文件:负责格式化数据并把它们呈现给用户,包括数据展示、数据验证、界面设计等

控制器(Controller)-对应组件:Servlet:负责接收并转发请求,对请求进行处理后指派视图并将响应结果发送给客户端

模型(Model)-对应组件:JavaBean:模型对象拥有最多的处理任务,是应用程序的主体部分,它负责业务逻辑的处理和实现对数据的操作

1.1 MVC整体流程图

1.2 JSP Model1

1.3 JSP Model2

  • Servlet:接受前端请求并调用JavaBean
  • JavaBean:处理业务并操作数据库
  • JSP:将处理结果响应到浏览器呈现给用户

1.4 MVC的优缺点

优点

  • MVC三个模块相互独立,松耦合架构
  • 多视图共享一个模型,大大提高代码的可重用性
  • 控制器提高了应用程序的灵活性和可配置性
  • 有利于软件工程化管理

缺点

  • 增加了系统结构和实现的复杂性,不适合小型项目
  • 视图层与模型之间需要控制器做中间的连接控制,所以效率较低

二、Spring MVC架构

  • 用Controller替换JSP Model2模型中的Servlet
  • Controller收到请求后,完成业务处理并用Model模型对象存储处理结果
  • Controller调用相应的视图解析器View对处理结果进行视图渲染,最终客户端得到响应信息

2.1 Spring MVC环境搭建

2.2 Spring MVC请求处理流程

  1. 浏览器发送请求至前端控制器
  2. 前端控制器收到请求后调用处理器映射器
  3. 处理器映射器找到具体的Handler处理器返回给前端控制器
  4. 前端控制器调用处理器适配器
  5. 处理器适配器去调用具体的处理器(Controller)
  6. Controller返回一个ModelAndView对象给处理器适配器
  7. 处理器适配器将接收到的MdoelAndView对象返回给前端控制器
  8. 前端控制器将ModelAndView对象传给视图解析器进行解析
  9. 视图解析器将解析结果View返回给前端控制器
  10. 前端控制器根据View进行视图渲染
  11. 前端控制器响应浏览器的请求

2.3 Spring MVC体系结构

DispatcherServlet(前端控制器)
  • Spring MVC最核心的类
  • web.xml中配置
Handler(处理器):对应MVC中的C(Controller层)
  • 类型:Object
  • zuoyong:实际处理请求
  • 标注了@RequestMapping的所有方法都可以看做是一个Handler
ModelAndView
  • 逻辑视图名
  • 模型对象

核心组件

HandlerMapping(处理器映射)
  • BeanNameUrlHanderMapping(默认)
    • 将请求URL映射到同名的控制器Bean上
  • DefaultAnnotationHandlerMapping
    • 将请求映射到标注@RequestMapping注解的控制器和处理方法上
  • RequestMappingHandlerMapping
HandlerAdapter(适配器)
  • AnnotationMethodHandlerAdapter
  • RequestMappingHandlerAdapter
ViewResolver(视图解析器)
  • InternalResourceView

2.4 Spring MVC框架特点

  • 清晰地角色划分
  • 灵活的配置功能
  • 提供了大量的控制器接口和实现类
  • 真正做到与View层的实现无关(JSP、Velocity、Xslt等)
  • 国际化支持
  • 面向接口编程
  • Spring提供了Web应用开发的一整套流程,不仅仅是MVC,它们之间可以很方便的结合一起

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[VMware] 修改参数的一个问题

最近在修改VMware虚拟机的时候遇到一个易用性的问题,比如要给一个VM设置一个参数需要在vSphere里点开设置,打开高级选项,添加配置ethernet0.coalescingScheme比如: 如果想要改的VM个数是十个八个,这种方法也许可以&a…

STM32+ESP8266水墨屏天气时钟:文字取模和图片取模教程

项目背景 本次的水墨屏幕项目需要显示一些图片和文字,所以需要对图片和文字进行取模。 取模步骤 1.打开取模软件 2.选择图形模式 3.设置字模选项 注意:本次项目采用的是水墨屏,并且是局部刷新的代码,所以设置字模选项可能有点…

[计算机效率] 资源管理器辅助工具:Clover、QTTabBar

3.21 资源管理器辅助工具:Clover、QTTabBar Clover是一款非常好用的一款资源管理器辅助工具。其实就是给资源管理器增加一个小功能:tab页面。让资源管理器也能想浏览器一样,就算打开多个文件夹,也只是在新的tab页面上。总算是拯救…

苍穹外卖亮点再梳理 ||

一、项目整体亮点: 【注:基于每个亮点,均有整理的相关知识,可在博客中查看】 1.数据库的设计采用RBAC(基于角色访问控制)的权限设计。 RBAC将权限授予角色,然后将用户分配给角色,…

MES实施之工控机和电脑的选择

在MES项目实施过程中,经常会碰到工控机和电脑的选型问题,那么他们的区别是什么? 1、控机和普通个人电脑(PC)相比,具有以下几个区别: 1.运行环境不同:工控机通常需要在各种恶劣的工业环境中运行,如高温、高湿、强电磁干扰等,因此需要具有防尘、防水、抗干扰等特点。而…

【优选算法专栏】专题十八:BFS解决拓扑排序--前言

本专栏内容为:算法学习专栏,分为优选算法专栏,贪心算法专栏,动态规划专栏以及递归,搜索与回溯算法专栏四部分。 通过本专栏的深入学习,你可以了解并掌握算法。 💓博主csdn个人主页:小…

记录Ubuntu 20.04中被困扰半年多之久的疑难的解决

一、我的ubuntu20.04症状描述: 在编辑文字文档的过程中,会不定时的出现鼠标指针随意跳动的情形,严重干扰了做文字编辑、编写代码等工作的进行。先后排除了戴尔笔记本及配件故障、鼠标故障、ubuntu系统中文档编辑软件的故障等可能。 二、原来…

CLI举例:上下行连接路由器(路由引流)

CLI举例:上下行连接路由器(路由引流) 介绍了集群设备,上下行连接路由器的配置举例。 组网需求 如图1所示,上行网络使用BGP,下行网络使用OSPF,多数据中心统一通过路由器R4接入Internet。 希望…

设计模式之迭代器模式(下)

3&#xff09;使用内部类实现迭代器 1.JDK中的迭代器示例 为了能够让迭代器可以访问到聚合对象中的数据&#xff0c;还可以将迭代器类设计为聚合类的内部类 package java.util;public abstract class AbstractList<E> extends AbstractCollection<E> implements…

SWM341系列应用(ADC应用)

SWM341系列 ADC应用 1、测试不同外接输入阻抗的情况 芯片供电3.3v&#xff0c;通过电阻箱进行分压获取被测电压&#xff0c;应用SimpleADC0 例程库。实测外接100K上拉电阻&#xff0c;或外接10K电阻上拉电阻&#xff0c;调整电阻箱获取被测电压3.0v、1.65v、100mV、50mV&#x…

如何解决Python包管理问题:ERROR: Could not find a version that satisfies the requirement

如何解决Python包管理问题&#xff1a;“ERROR: Could not find a version that satisfies the requirement” 文章目录 如何解决Python包管理问题&#xff1a;“ERROR: Could not find a version that satisfies the requirement”错误描述问题分析解决方案检查包名确保网络连…

前端三剑客 —— JavaScript (第二节)

目录 内容回顾 数据类型 基本数据类型&#xff1a; 引用数据类型&#xff1a; 常见运算 算术运算符 比较运算符 逻辑运算符 赋值运算符 自增/减运算符 三目运算符 位运算符 内容回顾 1.概述 2.基本数据 1.使用方式&#xff08;行内、页面、外部&#xff09; 2.对话框…

Facebook直播延迟过高是为什么?

在进行Facebook直播 时&#xff0c;高延迟可能会成为一个显著的问题&#xff0c;影响观众的观看体验和互动效果。以下是一些导致Facebook直播延迟过高的可能原因&#xff1a; 1、网络连接问题 网络连接不稳定或带宽不足可能是导致Facebook直播延迟的主要原因之一。如果您的网络…

华为机试题

目录 第一章、HJ1计算字符串最后一个单词的长度&#xff0c;单词以空格隔开。1.1&#xff09;描述1.2&#xff09;解题第二章、算法题HJ2 计算某字符出现次数1.1&#xff09;题目描述1.2&#xff09;解题思路与答案第三章、算法题HJ3 明明的随机数1.1&#xff09;题目描述1.2&a…

机器学习工程师 |面试作业题记录|本科水平 | 附个人解答

如是我闻&#xff1a; 面试的是一家在加拿大的初创公司&#xff0c;我想他们是需要清纯质朴的廉价劳动力干点杂活&#xff0c;非常符合我目前的情况。祝我成功吧。以下是他们的面试作业题&#xff08;take home questions&#xff09;&#xff0c;主要考察了一些基础知识&#…

Linux虚拟内存简介

Linux&#xff0c;像多数现代内核一样&#xff0c;采用了虚拟内存管理技术。该技术利用了大多数程序的一个典型特征&#xff0c;即访问局部性&#xff08;locality of reference&#xff09;&#xff0c;以求高效使用CPU和RAM&#xff08;物理内存&#xff09;资源。大多数程序…

查看 Linux 接入的 USB 设备速率是 USB2 还是 USB3

查看接入 usb 设备的速率 使用以下命令查看接入的 USB 设备速率&#xff08;每一行最后的 xxM 字样&#xff09;。插入设备前查看一次&#xff0c;插入设备后查看一次&#xff0c;对比即可定位到刚插入的设备是哪一条。 lsusb -t命令输出如下图 对照 USB 速率表 对照 USB 速…

【TensorRT】TensorRT C# API 项目更新 (1):支持动态Bath输入模型推理(下篇)

4. 接口应用 关于该项目的调用方式在上一篇文章中已经进行了详细介绍&#xff0c;具体使用可以参考《最新发布&#xff01;TensorRT C# API &#xff1a;基于C#与TensorRT部署深度学习模型》&#xff0c;下面结合Yolov8-cls模型详细介绍一下更新的接口使用方法。 4.1 创建并配…

构建智能生态:详解同城O2O外卖跑腿APP的开发技术

同城O2O外卖跑腿APP作为这一新型服务的代表&#xff0c;其开发技术成为了当下技术界的热点之一。小编将深入讲解同城O2O外卖跑腿APP的开发技术&#xff0c;以期为开发者提供一些有益的参考和指导。 需求分析与功能设计 在开发同城O2O外卖跑腿APP之前&#xff0c;首先需要进行充…

openlayer实现webgis端绘制制图及编辑

在WebGIS端制图是指通过Web浏览器界面实现地理信息数据的可视化、编辑、分析以及地图产品的制作。这一过程通常涉及以下几个关键环节&#xff1a; **1. 前端技术栈&#xff1a; •HTML/CSS/JavaScript&#xff1a;作为Web开发的基础&#xff0c;用于构建用户界面布局、样式设…