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.mzph.cn/news/106451.shtml

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

相关文章

B2R Raven: 2靶机渗透

B2R Raven: 2靶机渗透 视频参考:ajest :https://www.zhihu.com/zvideo/1547357583714775040?utm_id0 原文参考:ajest :https://zhuanlan.zhihu.com/p/270343652 文章目录 B2R Raven: 2靶机渗透1 启动靶机,查看后网卡…

CocosCreator 面试题(十一)Cocos Creator 屏幕适配

Cocos Creator 提供了多种屏幕适配的方式,以确保游戏在不同设备上能够正确显示和布局。 以下是 Cocos Creator 中常用的屏幕适配方式及其说明。 1、 Cocos Creator 项目设置中统一配置设计分辨率和屏幕适配 在同一个项目里的多个 Canvas 的设计分辨率仍然采用同一…

HBuilder创建uniapp默认项目导入uview(胎教)

1:更新HBuilder 建议更新 2:更新插件 我本人在没有更新插件的情况下报错了,找到了**这个大佬**解决问题,所以建议更新插件 先卸载uni-app(Vue2)编译 再重新安装 uni-app(Vue2)…

qemu基础篇——VSCode 配置 GDB 调试

文章目录 VSCode 配置 GDB 调试安装 VSCode 插件调试文件创建调试配置配置脚本qemu 启动脚 启动调试报错情况一报错情况二报错情况三 调试界面运行 GDB 命令查看反汇编断点查看内核寄存器查看变量参考链接 VSCode 配置 GDB 调试 qemu-基础篇——arm 裸机调试环境搭建 上一节中…

LuaJit交叉编译移植到ARM Linux

简述 Lua与LuaJit的主要区别在于LuaJIT是基于JIT(Just-In-Time)技术开发的,可以实现动态编译和执行代码,从而提高了程序的运行效率。而Lua是基于解释器技术开发的,不能像LuaJIT那样进行代码的即时编译和执行。因此&…

利用ChatGPT练习口语

目录 ChatGPT 这两天发布了一个激动人心的新功能,App端(包括iOS和Android)开始支持语音对话以及图片识别功能。 这两个功能一如既往的优先开放给Plus用户使用,现在将App更新到最新版本,就能体验。 为什么说激动人心&a…

2023年中国汽车智能工厂市场规模不断增大,智能化已成趋势[图]

汽车智能工厂是在数字化工厂的基础上,通过互联网技术与工业技术结合,数据监管设备以及AI等技术的结合,实现汽车整车从原材料及零部件的生产到运输、组装一系列的自动化生产。汽车智能工厂很大程度上降低成本和人为干扰,实现自动化…

19 | 如何搞清楚事务、连接池的关系?正确配置是怎样的

事务的基本原理 在学习 Spring 的事务之前,你首先要了解数据库的事务原理,我们以 MySQL 5.7 为例,讲解一下数据库事务的基础知识。 我们都知道 当 MySQL 使用 InnoDB 数据库引擎的时候,数据库是对事务有支持的。而事务最主要的作…

2018-2019 ACM-ICPC, Asia Nanjing Regional Contest G. Pyramid(组合数学 计数)

题目 t(t<1e6)组样例&#xff0c;每次给定一个n(n<1e9)&#xff0c;统计边长为n的上述三角形的等边三角形个数 其中等边三角形的三个顶点&#xff0c;可以在所有黑色三角形&白色三角形的顶点中任取&#xff0c; 答案对1e97取模 思路来源 申老师 & oeis A0003…

Unity引擎:收费模式和服务升级,为游戏开发带来更多可能性

Unity 引擎的收费模式和配套服务升级已经引起了广泛的关注和讨论。自 2024 年 1 月 1 日起&#xff0c;Unity 将根据游戏的安装量对开发者进行收费。这将会影响到很多游戏开发者和玩家。本文将探讨 Unity 引擎的收费模式和配套服务更新&#xff0c;以及对游戏开发者和玩家的影响…

报道 | 2023-2024年1月国际运筹优化会议汇总

2023年10月、11月、12月召开会议汇总&#xff1a; 2023 International Conference on Optimization and Applications (ICOA) Location: Abu Dhabi, United Arab Emirates Important dates: Conference: October 05-06, 2023 Details: https://lct.ac.ae/en/icoa/ 2023 INF…

python项目之AI动物识别工具的设计与实现(django)

项目介绍&#xff1a; &#x1f495;&#x1f495;作者&#xff1a;落落 &#x1f495;&#x1f495;个人简介&#xff1a;混迹java圈十余年&#xff0c;擅长Java、小程序、Python等。 &#x1f495;&#x1f495;各类成品java毕设 。javaweb&#xff0c;ssm&#xff0c;spring…

Java调用FFmpeg

Java调用FFmpeg 1、FFmepg基础知识1.1 下载 FFmpeg1.2 FFmpeg 工具使用 2、Java使用2.1 FFmpeg源码编译2.2 Java集成FFmpeg2.2.1 JNI2.2.2 Java调用执行 FFmpeg 工具 命令 1、FFmepg基础知识 About FFmpeg ffmpeg(计算机程序) - 百度百科 FFmpeg/FFmpeg - GitHub CSDN&#xf…

POI报表的高级应用

POI报表的高级应用 掌握基于模板打印的POI报表导出理解自定义工具类的执行流程 熟练使用SXSSFWorkbook完成百万数据报表打印理解基于事件驱动的POI报表导入 模板打印 概述 自定义生成Excel报表文件还是有很多不尽如意的地方&#xff0c;特别是针对复杂报表头&#xff0c;单…

解决react样式组合时css module动态样式失效的问题

现象&#xff1a; <button disabled{invalid} className{ "btn btn-primary btn-lg" invalid ? styles.btnDisabled : "" } > 注册 </button> 上面采用字符串拼接的方式&#xff0c;组合class&#xff0c;但是css module的动态样式style…

Bootstrap的导航菜单组件相关知识

目录 01-最基本的导航示例02-设置导航的对齐方式02-1-设置导航在水平方向上的对齐方式 02-2-设置导航在垂直方向上进行布局03-设计标签页导航04-带下拉菜单的标签页导航05-设计胶囊式导航05-1-基本的胶囊式导航05-2-带下拉菜单的胶囊式导航 06-让导航菜单项可以切换(激活导航菜…

发布npm包质量分测试

查询质量分接口 https://registry.npmjs.org/-/v1/search?textcanvas-plus v0.0.1 quality 0.2987 新建文件夹 canvas-plus 执行命令 npm init 生成package.json {"name": "3r/canvas-plus","version": "0.0.1","descript…

NewStarCTF2023week2-Unserialize?

代码审计&#xff1a; 定义了一个eval类&#xff0c;该类下有一个私有变量cmd和公有成员函数destruct()&#xff0c;该函数在对象的所有引用都被删除或类被销毁时会自动调用&#xff1b; 调用该函数则会执行一个正则表达式进行正则匹配&#xff0c;过滤掉了一些常用命令和bas…

周记之学习总结

你在人群中看到的每一个耀眼的女孩&#xff0c;都是踩着刀尖过来的。你如履平地般地舒适坦然&#xff0c;当然不配拥有任何光芒&#xff1b; 10.11-10.12 思来想去还是不舍得&#xff0c;搞了一下这个jwt&#xff0c;看了很多视频和博客&#xff0c;一直没看懂&#xff0c;两…

没有前端如何测试后端跨域问题

一、问题 前段时间对项目中的跨域做了相关的处理&#xff0c;网上有很多跨域的解决方案。前端解决&#xff0c;后端解决&#xff0c;nginx代理解决。我采用的是在后端中使用Cors来解决跨域的问题。但是前端项目还没有搭建起来&#xff0c;并不知道Cors的解决方案是否会生效&am…