Spring MVC 和Spring JDBC

目录

Spring MVC

MVC模式

核心组件

工作流程

Spring JDBC

Spring JDBC功能和优势

Spring JDBC的关键组件



Spring MVC

Spring MVC(Model-View-Controller)是Spring框架的一个模块,用于构建Web应用程序。它的主要目标是将Web应用程序的不同部分分离开,以提高可维护性、扩展性和测试性。

MVC模式

MVC模式的主要特点就是:分离了模型、视图、控制器三种角色,将业务处理从UI设计中独立出来,封装到模型和控制器设计中去,使得它们相互之间解耦,可以独立扩展而不需要彼此依赖。

  1. 模型(Model): 模型表示应用程序的数据和业务逻辑。它负责管理数据的状态和操作,以及处理与数据相关的任务。模型通常是独立于用户界面的,它与数据存储、检索和操作相关,同时也包括应用程序的核心业务逻辑。

  2. 视图(View): 视图表示用户界面,它负责将模型的数据呈现给用户。视图是与用户界面相关的部分,包括用户界面元素、布局、样式和交互。视图通常是被动的,它从模型中获取数据并将其显示给用户。

  3. 控制器(Controller): 控制器充当模型和视图之间的中介,负责协调用户界面的输入和模型的操作。控制器接收来自用户的请求,调用适当的模型操作来满足请求,然后选择合适的视图来呈现结果。控制器可以处理用户输入、执行业务逻辑和更新模型。

核心组件

Spring MVC遵循经典的MVC模式,以下是Spring MVC的核心组件:

  1. DispatcherServlet(前端控制器): DispatcherServlet是Spring MVC的前端控制器,接收所有的客户端请求,并将请求分发给适当的处理程序(控制器)。它是整个请求处理流程的入口点。

  2. Controller(控制器): 控制器是处理HTTP请求的组件,它接收来自DispatcherServlet的请求,并执行相应的业务逻辑。控制器通常是一个POJO(普通的Java对象)类,可以用注解标记或实现特定接口。

  3. HandlerMapping(处理程序映射): HandlerMapping用于将请求映射到具体的处理程序(控制器)。它根据请求的URL或其他条件,将请求路由到合适的控制器。

  4. Model(模型): 模型表示应用程序的数据和业务逻辑。它通常是一个JavaBean对象,包含应用程序的状态信息。模型是与数据相关的,它负责管理应用程序的状态。

  5. View(视图): 视图表示用户界面,负责渲染模型的数据并将其呈现给用户。视图通常是HTML页面、JSP页面、Thymeleaf模板、FreeMarker模板或其他UI组件。

  6. ViewResolver(视图解析器): ViewResolver用于解析视图名称并找到相应的视图对象。它将视图名称映射到实际的视图组件,以便将模型数据呈现给用户。

  7. ModelAndView: ModelAndView是一个包含模型数据和视图名称的对象。它将模型数据传递给视图,以便视图呈现数据。通常,控制器返回一个ModelAndView对象。

  8. Interceptors(拦截器): 拦截器是一种机制,允许您在请求到达处理程序之前或之后执行一些预处理或后处理操作。拦截器可以用于日志记录、权限检查、国际化等。

  9. Model数据绑定: Spring MVC提供了强大的数据绑定机制,可以将HTTP请求参数映射到Java对象,以及将Java对象的属性绑定到表单字段。这简化了请求和响应数据的处理。

  10. Validation(数据验证): Spring MVC支持数据验证,您可以使用注解或验证器来验证模型数据的有效性。

  11. REST支持: Spring MVC支持RESTful Web服务的构建,包括支持HTTP方法(GET、POST、PUT、DELETE)和资源标识符(URI)的映射。

  12. 异常处理: Spring MVC提供了异常处理机制,允许您自定义异常处理程序来处理应用程序中的异常。

  13. 国际化和本地化: Spring MVC支持国际化和本地化,允许您轻松地构建多语言的应用程序。

工作流程

  1. 请求从客户端(通常是浏览器)发出,该请求被发送到应用程序的前端控制器,即DispatcherServlet。

  2. DispatcherServlet接收请求后会调用HandlerMapping处理器映射器。由此得知该哪个Controller处理请求(并未调用Controller)。

  3. DispatcherServlet将请求交给一个或多个HandlerMapping组件,它们根据请求的URL或其他条件,将请求映射到具体的处理程序(Controller控制器)。

  4. 执行具体的处理程序(Controller控制器)获取ModelAndView,并层层返回给DispatherServlet。

  5. DispatcherServlet将ModelAndView交给ViewResolver解析,然后ViewResolver返回真正的视图。

  6. DispatcherServlet将模型数据填充到视图中。

  7. DispatcherServlet将结果响应到客户端。

前后端分离设计的大环境下,我们不再使用ModelAndView。流程上会使用SpringMVC Restful ⻛格的接⼝,返回json格式的对象数据供前端解析。后端就会用到一个常用的注解:@ResponseBody

 @GetMapping("/user")@ResponseBodypublic User user(){return new User(1,"张三");}

  1. 请求从客户端(通常是浏览器)发出,该请求被发送到应用程序的前端控制器,即DispatcherServlet。

  2. DispatcherServlet接收请求后会调用HandlerMapping处理器映射器。由此得知该哪个Controller处理请求(并未调用Controller)。

  3. DispatcherServlet将请求交给一个或多个HandlerMapping组件,它们根据请求的URL或其他条件,将请求映射到具体的处理程序(Controller控制器)。

  4. Controller 被封装成了 ServletInvocableHandlerMethod,HandlerAdapter 处理器适配器去执⾏ invokeAndHandle ⽅法,完成对 Controller 的请求处理

  5. HandlerAdapter 执⾏完对 Controller 的请求,会调⽤ HandlerMethodReturnValueHandler 去处理返回 值,主要的过程:

    • 调⽤ RequestResponseBodyMethodProcessor,创建 ServletServerHttpResponse(Spring 对原⽣ ServerHttpResponse 的封装)实例

    • 使⽤ HttpMessageConverter 的 write ⽅法,将返回值写⼊ ServletServerHttpResponse 的 OutputStream 输出流中

    • 在写⼊的过程中,会使⽤ JsonGenerator(默认使⽤ Jackson 框架)对返回值进⾏ Json 序列化

  6. 执⾏完请求后,返回的 ModealAndView 为 null,ServletServerHttpResponse ⾥也已经写⼊了响应,所以不⽤关⼼ View 的处理

Spring JDBC

Spring JDBC是Spring框架的一个模块,用于简化和改进Java应用程序与关系型数据库的交互。

Spring JDBC功能和优势

  1. 简化数据库访问: Spring JDBC封装了传统JDBC的复杂性,通过提供模板类(如JdbcTemplate)和异常处理机制,使数据库访问更加简单。

  2. 连接管理: Spring JDBC提供了连接池管理,确保数据库连接的高效复用,从而提高性能和资源利用率。

  3. 异常处理: Spring JDBC提供了一致的异常处理机制,将数据库操作中的各种异常转换为Spring自定义的DataAccessException,使错误处理更加一致和容易。

  4. 批处理: Spring JDBC支持批处理操作,可以一次性执行多个SQL语句,提高数据插入、更新和删除的效率。

  5. 参数设置: Spring JDBC支持参数设置和命名参数,使SQL语句的构建和执行更加方便。

  6. ORM整合: Spring JDBC可以与各种ORM框架(如Hibernate、JPA)集成,提供一致的事务管理和数据访问体验。

  7. 声明式事务管理: Spring JDBC支持声明式事务管理,允许通过注解或XML配置来管理事务,从而简化事务管理代码。

Spring JDBC的关键组件

  • JdbcTemplate: JdbcTemplate是Spring JDBC的核心类,它封装了JDBC的许多操作,如执行SQL查询、更新、批处理等。它提供了一种模板方法,用于执行数据库操作,同时处理连接的获取和释放,以及异常的处理。开发人员只需关注SQL语句和参数设置,不必担心连接管理和异常处理。

  • 数据源(DataSource): 数据源是数据库连接池的接口,Spring JDBC支持各种数据源,包括连接池数据源(如Apache DBCP、C3P0)和应用服务器数据源(如Tomcat JDBC池、WebSphere数据源)。

  • 事务管理: Spring JDBC允许您使用声明式事务管理,通过@Transactional注解或XML配置来定义事务的范围。它支持本地事务和全局事务,可以与不同的事务管理器集成。

  • 异常处理: Spring JDBC将数据库操作中的异常转换为Spring的DataAccessException,这些异常更具表达性,而且不需要捕获所有可能的数据库异常。

  • 命名参数: Spring JDBC支持命名参数,可以使用命名参数替代占位符(?)来设置SQL语句的参数值。

  • 批处理: Spring JDBC提供了BatchPreparedStatementSetter接口和JdbcTemplatebatchUpdate方法,用于执行批处理操作。

总的来说,Spring JDBC的设计和实现旨在提供更简单、更高效、更可维护的数据库访问方式,并与Spring框架的其他模块(如Spring事务管理、Spring AOP)无缝集成,为企业级Java应用程序的数据库操作提供了便捷的解决方案。

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

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

相关文章

比较和同步数据库架构和数据:MssqlMerge Pro Crack

比较和同步数据库架构和数据 适用于Oracle、MySQL 和 MariaDB、SQL Server、PostgreSQL、SQLite、MS Access和跨 DBMS 场景 业界领先的文本比较工具中常用的两面板 UI 快速过滤器显示所有/新/更改/新更改 合并两个方向的更改 轻量级:跨 DBMS 工具小于 20 MB&#xf…

【大数据Hive】hive select 语法使用详解

目录 一、前言 二、Hive select 完整语法树 三、Hive select 操作演示 3.1 数据准备 3.1.1 创建一张表 3.1.2 将数据load加载到t_usa_covid19表 3.1.3 再创建一张分区表 3.1.4 使用动态分区插入数据 3.2 select 常用语法 3.2.1 查询所有字段或者指定字段 3.2.2 查询…

计算机视觉:池化层的作用是什么?

本文重点 在深度学习中,卷积神经网络(CNN)是一种非常强大的模型,广泛应用于图像识别、目标检测、自然语言处理等领域。而池化层作为CNN中的一个关键步骤,扮演着优化神经网络、提升深度学习性能的重要角色。本文将深入探讨池化层的作用及其重要性,帮助读者更好地理解和应…

如何使用JMeter测试导入接口/导出接口

今天一上班,被开发问了一个问题:JMeter调试接口,文件导入接口怎么老是不通?还有导出文件接口,不知道文件导到哪里去了? 我一听,这不是JMeter做接口测试经常遇到的嘛,但是一时半会又…

nodejs+vue考研信息查询系统-计算机毕业设计

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性:…

MSVC编译dcmtk库

官网 https://www.dcmtk.org/en/dcmtk/ 下载源码和支持包 支持包在support文件夹下,选择适合你的MSVC版本 到官网下载cmake,官网cmake.org 解压源码 支持库 打开cmake-gui,填写源码目录(dcmtk解压的源码目录)和编译目录(自定义的目录) 点下面的configure,弹出选…

腾讯云我的世界mc服务器配置怎么选择?

使用腾讯云服务器开Minecraft我的世界服务器配置怎么选择?10人以内玩2核4G就够用了,开我的世界服务器选择轻量应用服务器就够了,腾讯云轻量CPU采用至强白金处理器,大型整合包一般1.12版本的,轻量2核4G配置都差不多的&a…

Lua调用C#类

先创建一个Main脚本作为主入口,挂载到摄像机上 public class Main : MonoBehaviour {// Start is called before the first frame updatevoid Start(){LuaMgr.GetInstance().Init();LuaMgr.GetInstance().DoLuaFile("Main");}// Update is called once p…

JAVA中的垃圾回收

JVM规范说了并不需要必须回收方法区,不具有普遍性,永久代使用的是JVM之外的内存 引用计数:效率要比可达性分析要强,随时发现,随时回收,实现简单,但是可能存在内存泄漏 局部变量表,静态引用变量&…

Apache Dubbo 首个 Node.js 3.0-alpha 版本正式发布

作者:蔡建怿 关于Apache Dubbo3 Apache Dubbo 是一款易用、高性能的 WEB 和 RPC 框架,同时为构建企业级微服务提供服务发现、流量治理、可观测、认证鉴权等能力、工具与最佳实践。经过近几年发展,Dubbo3 已在阿里巴巴集团各条业务线实现全面…

登录中获取验证码的节流

一. 验证码框 <el-input placeholder"请输入验证码" prefix-icon"el-icon-lock" v-model"ruleForm.code"><el-button slot"suffix" :disabled"disabled" type"text" size"mini" click"ch…

JavaFX: 使用本地openjfx包

JavaFX: 使用本地openjfx包 1、注释配置2、下载openjfx包3、导入openjfx的jar包 1、注释配置 build.gradle配置注释&#xff1a; 2、下载openjfx包 下载javaFx地址&#xff1a;https://gluonhq.com/products/javafx/ 3、导入openjfx的jar包

求三维坐标绕坐标轴旋转后的坐标值

目的 旋转矩阵 应用 沿单个坐标轴旋转 沿多个坐标系旋转 目的 由于其他文章原理介绍比较详细&#xff0c;但应用方面较少。本文直接介绍旋转矩阵的应用&#xff0c;条件为坐标系不变&#xff0c;求旋转后的三维坐标。本文方法较傻瓜式&#xff0c;需要自己进行测试以确认是…

Spring Boot 开发环境热部署

Spring Boot 项目无法像前端项目那样&#xff0c;修改源代码后刷新网页就能即时看到效果&#xff0c;需要先暂停运行&#xff0c;再重新启动&#xff0c;最后刷新网页。 为了避免这一麻烦的操作&#xff0c;我们可以设置热部署&#xff0c;启动服务后不论怎么修改源码&#xf…

Compose 组件 - 分页器 HorizontalPager、VerticalPager

一、概念 类似于 ViewPager&#xff0c;1.4 版本之前需要借助 accompanis 库&#xff0c;底层基于 LazyColumn、LazyRow 实现&#xff0c;在使用上也基本相同。默认情况下 HorizontalPager 占据屏幕的整个宽度&#xff0c;VerticalPager 会占据整个高度。 fun HorizontalPager(…

基于 ACK Fluid 的混合云优化数据访问(五):自动化跨区域中心数据分发

作者&#xff1a;车漾 前文回顾&#xff1a; 本系列将介绍如何基于 ACK Fluid 支持和优化混合云的数据访问场景&#xff0c;相关文章请参考&#xff1a; -基于 ACK Fluid 的混合云优化数据访问&#xff08;一&#xff09;&#xff1a;场景与架构 -基于 ACK Fluid 的混合云优…

HTML5播放 M3U8的hls流地址

在HTML5页面上播放M3U8的hls流地址 <!DOCTYPE html> <html> <head> <meta charset"UTF-8"> <title>视频播放</title> <script src"https://cdn.jsdelivr.net/npm/hls.jslatest"></script> &…

pdf格式的简历中的照片太小,如何修改图片的大小

问题描述&#xff1a;在使用一些在线版生成软件制作简历时&#xff0c;比如使用超级简历制作的简历存在着一个照片的尺寸比较小。如何去修改pdf中的证件照大小。 解决办法&#xff1a;使用一些在线编辑pdf的软件&#xff0c;比如我随便找了一个&#xff08;在线编辑pdf&#x…

云开发校园宿舍/企业/部门/物业故障报修小程序源码

微信小程序云开发校园宿舍企业单位部门物业报修小程序源码&#xff0c;这是一款云开发校园宿舍报修助手工具系统微信小程序源码&#xff0c;适用于学校机房、公司设备、物业管理以及其他团队后勤部&#xff0c;系统为简单云开发&#xff0c;不需要服务器域名即可部署&#xff0…

CentOS 挂载新磁盘以及磁盘扩容操作教程

1.搭载新加磁盘 # 查看磁盘 fdisk -l #新盘&#xff08;/dev/sdb&#xff09;创建分区 #虚拟机 fdisk /dev/sdb #阿里云 fdisk /dev/vdb #创建/dev/sdb1为新的PV&#xff08;物理卷&#xff09; 【创建物理卷命令】 #虚拟机 pvcreate /dev/sdb1 #阿里云 pvcreate /dev/vdb1 查…