Spring MVC 和Spring JDBC

news2024/11/24 7:01:16

目录

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")
 @ResponseBody
 public 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.coloradmin.cn/o/1091986.html

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

相关文章

【Python】Python语言基础(上)

第一章 前言 1. Python简介 Python语言并不是新的语言,它早于HTTP 1.0协议5年,早于Java语言 4年。 ​ Python是由荷兰人Guido van Rossum(吉多范罗苏姆)于1989年圣诞节期间在阿姆斯特丹休假时为了打发无聊的假期而编写的一个脚本…

利用 Amazon CodeWhisperer 激发孩子的编程兴趣

我是一个程序员,也是一个父亲。工作之余我会经常和儿子聊他们小学信息技术课学习的 Scratch 和 Kitten 这两款图形化的少儿编程工具。 我儿子有一次指着书房里显示器上显示的 Visual Studio Code 问我,“为什么我们上课用的开发界面,和爸爸你…

巴以冲突中暴露的摄像头正对安全构成威胁

巴以冲突爆发后,许多配置不当的安全摄像头正暴露给黑客活动分子,使其周遭人员面临巨大安全风险。 Cyber​​news 研究人员发现,在以色列至少有165 个暴露的联网 RTSP 摄像头,在巴勒斯坦有 29 个暴露的 RTSP 摄像头。在巴勒斯坦&am…

CCPlotR | 轻松拿捏单细胞分析之细胞交互!~

1写在前面 周末了各位,昨天去看了奥本海默,不得不说,大神就是大神。😘 比起我们的电影,似乎诺兰更好地还原了奥本海默的真实。🧐 言归正传,今天分享的是CCPlotR包,用于基于scRNAseq数…

SwiftUI Swift CoreData 计算某实体某属性总和

有一个名为 Item 的实体,它有一个名为 amount 的 Double 属性,向你的 View 添加一个计算属性: Code: struct ContentView: View {Environment(\.managedObjectContext) private var viewContextFetchRequest(sortDescriptors: [NSSortDescri…

Codeforces Round 903 (Div. 3) C(矩形旋转之后对应的坐标)

题目链接:Codeforces Round 903 (Div. 3) C 题目: 思想: 旋转之后对应的坐标: (i,j)(n1-j,i)(n1-i,n1-j)(j…

CSS的布局 Day03

一、显示模式: 网页中HTML的标签多种多样,具有不同的特征。而我们学习盒子模型、使用定位和弹性布局把内容分块,利用CSS布局使内容脱离文本流,使用定位或弹性布局让每块内容摆放在想摆放的位置,让网站页面布局更合理、…

VCAP-DCV VMware vSphere: 运维、扩展和安全防护 [V8.0]

VMware官方授权合作机构,全国招生! VCP-DCV VMware vSphere:安装、配置和管理[V8.x]-CSDN博客本课程重点讲授如何安装、配置和理 VMware vSphere 8.0(包括 VMware ESXi™ 8.0 和 VMware vCenter Server™ 8.0)。使用 …

代码随想录算法训练营第二十天丨 二叉树part07

530.二叉搜索树的最小绝对差 思路 题目中要求在二叉搜索树上任意两节点的差的绝对值的最小值。 注意是二叉搜索树,二叉搜索树是有序的。 遇到在二叉搜索树上求什么最值啊,差值之类的,就把它想成在一个有序数组上求最值,求差值…

出游热潮再起,IPIDEA代理IP帮你应对旅游数据采集的挑战

随着互联网的快速发展,旅游行业也随之迅速发展。在线旅游预订已经成为人们出行前的必要步骤,然而,旅游信息的采集却是一项具有挑战性的任务。为了从酒店和航空公司网站、在线旅行社和其他类似来源收集数据,企业需要克服许多障碍。…

Spring源码解析——@Transactional注解的声明式事物介绍

正文 面的几个章节已经分析了spring基于AspectJ的源码,那么接下来我们分析一下Aop的另一个重要功能,事物管理。最全面的Java面试网站 事务的介绍 1.数据库事物特性 原子性 多个数据库操作是不可分割的,只有所有的操作都执行成功&#xff…

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

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

基于供需优化的BP神经网络(分类应用) - 附代码

基于供需优化的BP神经网络(分类应用) - 附代码 文章目录 基于供需优化的BP神经网络(分类应用) - 附代码1.鸢尾花iris数据介绍2.数据集整理3.供需优化BP神经网络3.1 BP神经网络参数设置3.2 供需算法应用 4.测试结果:5.M…

css样式导入模板

直入主题 添加<link>标签到标题下面&#xff0c;输入rel"stylesheet",type"text/css",在href属性里写入路径 <title>标题</title> <link rel"stylesheet" type"text/css" href"xxx.css" /> 像这样就…

接口测试(含文档)

1、简介 测试系统组件之间的接口。 2、分类 2.1 外部接口 被测系统和外部系统之间的接口。&#xff08;例如电商与支付宝之间的支付接口&#xff0c;只需要测试正例即可&#xff09; 2.2 内部接口 2.2.1 提供给内部系统使用的内部接口。&#xff08;只需要测试正例即可&a…

Android Handler/Looper视角看UI线程的原理

概述 Handler/Looper机制是android系统非重要且基础的机制&#xff0c;即使在rtos或者linux操作系统上开发应用框架时&#xff0c;也经常借鉴这个机制。通过该机制机制可以让一个线程循环处理事件&#xff0c;事件处理逻辑即在Handler的handleMessge种。本文建议android8.1源码…

Step 1 搭建一个简单的渲染框架

Step 1 搭建一个简单的渲染框架 万事开头难。从萌生到自己到处看源码手抄一个mini engine出来的想法&#xff0c;到真正敲键盘去抄&#xff0c;转眼过去了很久的时间。这次大概的确是抱着认真的想法&#xff0c;打开VS从零开始抄代码。不知道能坚持多久呢。。。 本次的主题是搭…

一文让你玩转Linux多进程开发

Linux多进程开发 主要介绍多进程开发时的要点 进程状态转换 进程反应了进程执行的变化。 进程的状态分为三种 ,运行态,阻塞态,就绪态 在五态模型中分为以下几种,新建态&#xff0c;就绪态&#xff0c;运行态&#xff0c;阻塞态,终止态。 运行态&#xff1a;进程占用处理器正在运…

CSS结构选择器的使用

结构选择器 style>ul li:first-child {//选出第一个孩子进行变色background-color: blue;}</style><ul><li>我是第1个孩子</li><li>我是第2个孩子</li><li>我是第3个孩子</li><li>我是第4个孩子</li><li>…

基于linux的基础线程知识大总结

文章目录 1.线程的基础概念认知1.1什么是线程1.2线程的优缺点1.3一些页表知识的额外补充1.4进程和线程的对比 2.线程的基本控制2.1POSIX线程库2.2创建一个新的线程2.3有关线程id的解释和线程栈区的地址空间布局2.4线程终止2.5线程等待2.6线程分离 3.线程间互斥3.1基本概念3.2互…