SpringMVC(2)

前言

这一节我们终结springmvc

1. SSM整合配置

在这里插入图片描述
先导入坐标

在这里插入图片描述
先创建包
在这里插入图片描述
配置类
在这里插入图片描述
然后开始创建jdbc的config和mybatis的config,还有properties
在这里插入图片描述
SpringConfig:
在这里插入图片描述

jdbc.properties:
在这里插入图片描述
JdbcConfig:

在这里插入图片描述
MybatisConfig:
在这里插入图片描述

下面开始spring整合mvc:ServletConfig和SpringMvcConfig

ServletConfig:

在这里插入图片描述

SpringMvcConfig:

在这里插入图片描述
启动的时候会加载SpringConfig.class(根)和SpringMvcConfig.class(web)两个配置类和对应bean,但是springmvc的容器能访问spring的容器,spring的容器不能访问springmvc的容器,不想要麻烦额度话,可以都写在getServletConfigClasses这个里面

2. 功能模块开发

2.1 造表

在这里插入图片描述

2.2 其他

pojo的映射封装对象
就是写类了

在这里插入图片描述

先创建文件

在这里插入图片描述
BookDao:

在这里插入图片描述
BookService:

和dao层的方法没有什么区别,区别就是没有注解,void改boolean,然后就是要有文档注释

在这里插入图片描述
然后写其实现类

BookServiceImpl:
在这里插入图片描述
alt+回车

在这里插入图片描述
点第一个

在这里插入图片描述
还是点第一个

在这里插入图片描述
去掉勾就可以了
在这里插入图片描述
这样就不会爆红了

在这里插入图片描述
BookController:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
就这样我们所有后台的功能就写完了

3.接口测试

我们写完之后要对service层进行测试,还要用postman对表现层进行接口测试

3.1 业务层接口测试

我们就要在test中测试了

这里插播一下,我们少导入了spring的测试坐标,不导入的话,就不能用junit测试了
在这里插入图片描述
在这里插入图片描述
这个我们写完就能用了

这里再插播一条,我们没有导入spring-jdbc的坐标所以会报错
在这里插入图片描述
完整的pom文件是这样的

在这里插入图片描述
在这里插入图片描述
这样我们就测试完了

3.2 表现层接口测试

部署tomcat
在这里插入图片描述
注意我们这里Tomcat如果URL不想写端口号的时候,端口号就要设置为80才行,因为80就是Tomcat的默认端口号

但是我们运行却会出错,就是tomcat都无法部署
在这里插入图片描述
这段报错交给ai,发现是没有加载上properties文件

原配置类:
在这里插入图片描述
在这里插入图片描述
我们在前面加上classpath其实就可以找到properties文件了,因为原来的范围小了,所以找不到

在这里插入图片描述
这样我们就可以成功部署了

我们在修改一下我们的properties文件

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
然后数据库还真的多了这一条数据—》f5是刷新数据库在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在增加一个14的数据

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.3 事务处理

1.开启注解式事务驱动
在spring的配置中开启@EnableTransactionManagement
SpringConfig:
在这里插入图片描述

2.配置事务管理器
在jdbcconfig那里写
JdbcConfig:

在这里插入图片描述

3.添加事务,配到接口上
BookService:
在业务层接口上面添加就可以了
@Transactional
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4. 表现层与前端数据传输协议定义

在这里插入图片描述
我们要统一数据格式

我们创建一个结果模型类,封装数据到data属性中
在这里插入图片描述

这又是一个问题,问题就是同一个true对应不同多个操作
所以我们要做一个标识
在这里插入图片描述
我们用20031表示删除
在这里插入图片描述
查询中20040表示查询失败
20041表示查询成功

在这里插入图片描述
我们用msg来存储查询失败的信息

所以data里面存传输数据,没有就是null,code表示传的是什么数据,msg是传输失败的信息

在这里插入图片描述

5. 表现层与前端数据传输数据协议实现

我们把这个类定义在controller下

在这里插入图片描述

在这里插入图片描述
BookController:

我们这个里面的方法全部都return成result类型的
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
这样的话,前端拿到我们的数据,先看code知道是一个啥操作,再看data取数据,万一失败了就看msg信息

6. 异常处理器

在这里插入图片描述

在这里插入图片描述
框架内部抛出的异常:使用不规范–》mybatis配置文件写错了
数据层:数据库相关问题
业务层:数据处理
表现层:收集数据

把所有层的异常都往上抛出去,不要处理,数据层抛到业务层,业务层抛到表现层,所以所有的异常都抛到表现层,怎么写呢,但是每个方法都单独处理,太麻烦了,我们用aop思想
异常处理器,可以其中统一处理异常
在这里插入图片描述
这个我们要在表现层里面去写
在这里插入图片描述

现在我们创建一个异常

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

这样就成功了

但是我们还要返回给前端看一下

ProjectExcetionAdvice:
在这里插入图片描述
我们这样写就可以返回这个数据了
在这里插入图片描述

这样就算是抛异常,也能做到格式统一了

在这里插入图片描述
在这里插入图片描述

7. 项目异常处理

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

我们先来定义两种自定义异常,把上面两种异常弄出来

在这里插入图片描述

在这里插入图片描述
2.在可能引发异常的地方,把这些异常进行一个处理

BookServiceImpl:
在这里插入图片描述
这样就把各种各样可能会出现的异常都包装成了同一个异常

这样就有了表现层和系统层面的两种异常了

但是666我们写的不专业,我们可以自己来定义

就在code中写常量,写状态码就可以了
code:

在这里插入图片描述

timeout是超时的意思

BookServiceImpl:
在这里插入图片描述
ProjectExcetionAdvice:处理器
其实我们真正处理异常不能这么做,应该把return的内容try起来才对
反正我们就是造出来了我们需要的系统异常和业务层异常

我们就在处理器这里处理这两种异常

在这里插入图片描述
我们现在来运行,只要单个查询没有输入1,就会出异常

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
实际开发的时候,我们可以用aop,来很多异常都包装成自己定义的异常
在这里插入图片描述
在这里插入图片描述

8. 前后端协议联调(列表功能)

在这里插入图片描述
在这里插入图片描述
粘贴过来还不能直接使用,我们前面说过了,我们要先放行

在创建一个配置类SpringMvcSupport

在这里插入图片描述

然后在springmvc中加载这个配置类

SpringMvcConfig:
在这里插入图片描述
在这里插入图片描述
books.html:
在这里插入图片描述

现在我们在getAll中发生ajax请求

在这里插入图片描述
在这里插入图片描述

9. 前后端协议联调(添加功能)

9.1 可见

就是新增按钮,弹出一个添加框
在这里插入图片描述
默认是不可显示的,我们要修改visible属性,让它改成可修改的

在这里插入图片描述
点击添加按钮,默认会调用这个方法
设置属性可见就可以了

在这里插入图片描述
在这里插入图片描述

9.2 点按钮传数据

在这里插入图片描述

就是这个方法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

9. 前后端协议联调(添加功能状态处理)

就是添加数据失败该这么办呢
20011是成功,20010是失败,服务器挂了是其他情况
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
怎么演示失败呢
BookServiceImpl:
在这里插入图片描述
但是我们return true,所以一直是成功的
所以我们要根据dao的返回值来确定service层返回true还是false
BookDao:
在这里插入图片描述
我们dao的返回值int就是sql语句执行影响的行数
BookServiceImpl:

在这里插入图片描述
这样子的话我们的controller里面就可以得到false了

在这里插入图片描述
在这里插入图片描述

因为我们在在设计type的时候,长度是20,所以只要我们输入的大于20长度就可以false了
在这里插入图片描述
但是我们点击了确定却没有弹出一个框
我们看一下日志

在这里插入图片描述
在这里插入图片描述
这样我们就看出了它走的是sql异常,被异常处理器给拿走了
所以我们只需要在else那里弹出来就可以了

在这里插入图片描述
这样子我们就有弹窗了

在这里插入图片描述
虽然20010没有激活,先不管了
还有就是getall这个方法不管是执行失败还是成功都要执行的,所以用finally
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
但是有个小问题就是,我们再次点击新增,就还是上次的了

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这里有一个充值表单的操作,这样的话,我们点击新增就是全新的了
在这里插入图片描述

然后就是一弹出弹框就调用这个方法,保证每次点击都是空白的
在这里插入图片描述
这样这个就可以了

失败的话就不用关闭窗口,继续检查数据就可以了

10. 前后台协议协调(修改功能)

10.1 展示修改信息

在这里插入图片描述
在这里插入图片描述
就是点击编辑按钮,可以查询
在这里插入图片描述
在这里插入图片描述
我们先看看这个row
在这里插入图片描述
我们点击编辑就有这个效果了,所以这个row就是JSON数据
我们在row里面查询id,在传递过去
在这里插入图片描述
在这里插入图片描述
dialogFormVisible4Edit就是那个弹层的显示属性

在这里插入图片描述
在这里插入图片描述
但是我们点击却报错了,我们来调试一下

在这里插入图片描述
在这里插入图片描述
我们发现来了一个null
为什么呢
在这里插入图片描述
然后我们就发现问题了,原来是因为我们以前有模拟异常的代码,去掉就可以了
在这里插入图片描述

在这里插入图片描述
这样就可以了

在来处理一下错误

在这里插入图片描述
在这里插入图片描述
我们在设置一个错误的

在这里插入图片描述
点击第一个的编辑按钮就可以了

在这里插入图片描述

10.2 修改

在这里插入图片描述
和添加功能基本一模一样

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
而且看那里确实改了
但是我们弹层没有关,因为拷贝的是原来的增加弹层的关闭

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
所以相比增加没什么变化

11. 前后台协议协调(删除功能)

传id删除即可

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
但是我们没有操作完页面刷新操作,加上finally即可

在这里插入图片描述
在这里插入图片描述
但是我们仍然没有实时更新,为什么呢,因为getall调用比删除快
所以我们把getall放在axios后面试试

在这里插入图片描述
这样就可以了
在这里插入图片描述

11.2 取消删除

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

12. 拦截器简介

案例我们就讲到这里,开始讲新的内容

在这里插入图片描述
拦截器和过滤器差不多
在这里插入图片描述
进去要经过拦截器,出去也要经过拦截器

在这里插入图片描述
springmvc的内容就是
在这里插入图片描述
就是这里的内容

拦截器就是在控制器前或者后执行,用来增强功能

13. 入门案例

13.1 制造拦截器功能类

在这里插入图片描述
我们打开以前的一个模块来测试,就是springmvc_02

现在开始写
ProjectInterceptor:
在这里插入图片描述
因为它是为sprnigmvc服务的,所以springmvc肯定要加载它才行
在这里插入图片描述
然后再开始扫描

在这里插入图片描述

13.2 配置拦截器执行位置

SpringMvcSupport:
原:
在这里插入图片描述

现在:
在这里插入图片描述
然后SpringMvcConfig加载这个配置类

在这里插入图片描述
第一定义拦截器类ProjectInterceptor,变成bean,第二写配置类,就是SpringMvcSupport,去覆盖最后一个方法
在这里插入图片描述
在这里插入图片描述
book===>save是我们的原始操作,preHandle…是在它之前执行的操作
postHandle在之后执行的操作
afterCompletion是在完成之后,在post后面
所以拦截器可以在方法的前和后执行
在这里插入图片描述
这个拦截器就不能拦截这个了,因为不是/books,还多了一个1

SpringMvcSupport:
在这里插入图片描述
可以这样写,就是所以以books开头的操作

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

如果这里改为false的话,就是这样了

在这里插入图片描述
只有这一个了。所以这个false的意思就是,可以终止原始操作的运行,一旦终止了原始操作,那么在原始操作之后的东西,也无法执行了

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注意我们现在写的配置类和springmvc一直处于同一层,可以优化一下

SpringMvcConfig:
在这里插入图片描述

在这里插入图片描述

这样的话,就可以把SpringMvcSupport里面的方法拿过来了
而且也不用扫描SpringMvcSupport了

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

14. 拦截器参数

在这里插入图片描述
拦截器参数就是上面的形参

在这里插入图片描述

这里就是header

在这里插入图片描述

在这里插入图片描述
第一个就是我们取到的

在这里插入图片描述
我们来打印一下header

在这里插入图片描述
就是在描述这个类
这其实是一个类,就是HandleMethod
这个类封装了我们的方法

在这里插入图片描述
下面我们开始讲第二个方法里面的参数

在这里插入图片描述
多了一个modelAndView

这个其实封装了我们mvc页面跳转的数据
在这里插入图片描述

ex实际上可以得到原始程序出现的异常
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

15. 拦截器链配置

先配两个拦截器

在这里插入图片描述
开始配置

SpringMvcConfig:
在这里插入图片描述
在这里插入图片描述

然后我们这样写的话,就会先执行projectInterceptor,在执行projectInterceptor2,和我们配置的顺序有关,pre和定义顺序一样,post就是相反的了

在这里插入图片描述
然后我们把第一个的pre改成false

在这里插入图片描述
看得出来,只运行了第一个pre
flase直接终止了后面的拦截器
在这里插入图片描述
3如果返回false的话,1,2,3的pre都会执行,post都不执行,但是1,2的sfter仍然执行
2return false,就执行那个after1了

就是谁false,post一个不执行,然后它前面的after要执行
一般我们只做一个拦截器

总结

springmvc我们就讲完了

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

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

相关文章

零基础Python学习

1.环境搭建 1.1 安装运行环境python3.13 Welcome to Python.org 1.2 安装集成开发环境PyCharm PyCharm: the Python IDE for data science and web development 1.3 创建项目 && 设置字体 2.基础语法 2.1 常量与表达式 在python中整数除整数不会优化,所…

vue3项目创建方式记录

目录 创建vue3常用的方式有三种:一.使用vue cli创建二.使用vite创建三.使用vue3官方推荐创建方式(create-vue) 创建vue3常用的方式有三种: 一.使用vue cli创建 vue create 项目名二.使用vite创建 vite是下一代前端开发与构建工…

用MATLAB符号工具建立机器人的动力学模型

目录 介绍代码功能演示拉格朗日方法回顾求解符号表达式数值求解 介绍 开发机器人过程中经常需要用牛顿-拉格朗日法建立机器人的动力学模型,表示为二阶微分方程组。本文以一个二杆系统为例,介绍如何用MATLAB符号工具得到微分方程表达式,只需要…

SpringAi整合大模型(进阶版)

进阶版是在基础的对话版之上进行新增功能。 如果还没弄出基础版的,请参考 https://blog.csdn.net/weixin_54925172/article/details/144143523?sharetypeblogdetail&sharerId144143523&sharereferPC&sharesourceweixin_54925172&spm1011.2480.30…

Android电视项目焦点跨层级流转

1. 背景 在智家电视项目中,主要操作方式不是触摸,而是遥控器,通过Focus进行移动,确定点击进行的交互,所以在电视项目中焦点、选中、确定、返回这几个交互比较重要。由于电视屏比较大,在一些复杂页面中会存…

yolo辅助我们健身锻炼

使用软件辅助健身能够大大提升运动效果并帮助你更轻松地达成健身目标。确保每次锻炼都更加高效且针对性强,精确记录你的训练进度,帮助你更清晰地看到自己的进步,避免无效训练。 借助YOLO11的尖端计算机视觉技术,跟踪和分析锻炼变得异常简单。它可以无缝检测和监控多种锻炼…

Flume 与 Kafka 整合实战

目录 一、Kafka 作为 Source【数据进入到kafka中,抽取出来】 (一)环境准备与配置文件创建 (二)创建主题 (三)测试步骤 二、Kafka 作为 Sink数据从别的地方抽取到kafka里面】 (…

SRS搭建直播推流服务

学习链接 5分钟教你搭建SRS流媒体服务器 - B站视频 SRS Stack 入门B站合集视频 - SRS官方教程 SRS官网 SRS官网文档 ossrs/srs github SRS for window - 可以安装windows版本的srs,SRS 5.0.89正式支持Windows,每个5.0的版本都会提供安装包 文章目录…

css—轮播图实现

一、背景 最近和朋友在一起讨论的时候,我们提出了这样的一个提问,难道轮播图的效果只能通过js来实现吗?经过我们的一系列的争论,发现了这是可以通过纯css来实现这一效果的,CSS轮播图也是一种常见的网页展示方式&#x…

nacos安装部署

nacos安装部署 1.安装nacos 1.安装nacos nacos的安装很简单下载后解压启动即可,但是在启动前请确保jdk环境正常; 1.首先我们要下载nacos安装包:可以到官网下载,注意我这里使用的是2.1.0版本; 2.下载完成后&#xff0…

tomcat 8.5.35安装及配置

安装包地址: 1.Index of /dist/tomcat/tomcat-8/v8.5.35/binhttps://archive.apache.org/dist/tomcat/tomcat-8/v8.5.35/bin/ 2.通过网盘分享的文件:tomcat 链接: https://pan.baidu.com/s/1z9bD4rIuIRvzQ4okm3iRzw?pwdp24p 提取码: p24p 3.通过官网…

YOLO系列论文综述(从YOLOv1到YOLOv11)【第12篇:YOLOv9——可编程梯度信息(PGI)+广义高效层聚合网络(GELAN)】

YOLOv9 1 摘要2 改进点3 网络架构 YOLO系列博文: 【第1篇:概述物体检测算法发展史、YOLO应用领域、评价指标和NMS】【第2篇:YOLO系列论文、代码和主要优缺点汇总】【第3篇:YOLOv1——YOLO的开山之作】【第4篇:YOLOv2—…

机器学习提高电子病历主要诊断编码正确率的路径分析

摘要 本研究探讨机器学习在强化病历书写质量和提高主要诊断编码正确率方面的应用。介绍了基于机器学习的病历质量分析方法、AI病历质控应用、智能预问诊系统和诊室听译机器人等在病历书写质量提升中的作用,以及基于机器学习的ICD智能诊断编码方法和重症病人ICD自动…

鸿蒙征文|鸿蒙技术分享:使用到的开发框架和技术概览

目录 每日一句正能量前言正文1. 开发环境搭建关键技术:2. 用户界面开发关键技术:3. 应用逻辑开发关键技术:4. 应用测试关键技术:5. 应用签名和打包关键技术:6. 上架流程关键技术:7. 后续维护和更新关键技术…

C++类中多线程的编码方式

问题 在C++代码中,一般的代码是需要封装在类里面,比如对象,方法等。否则就不能很好的利用C++面向对象的能力了。 但是这个方式在处理线程时会碰到一个问题。 考虑下面一个简单的场景: class demoC { public:std::thread t;int x;void threadFunc(){std::cout<<x&…

Android开发仿qq详情下拉头像变大

Android开发仿qq详情下拉头像变大 个人详情界面&#xff0c;很多都有下拉头像变大的效果&#xff0c;其实我觉得这效果还不如点击头像看大图呢 一、思路&#xff1a; 自定义ScrollView 二、效果图&#xff1a; 看视频更直观点&#xff1a; Android开发教程案例分享-仿qq详情…

深入解析下oracle date底层存储方式

之前我们介绍了varchar2和char的数据库底层存储格式&#xff0c;今天我们介绍下date类型的数据存储格式&#xff0c;并通过测试程序快速获取一个日期。 一、环境搭建 1.1&#xff0c;创建表 我们还是创建一个测试表t_code&#xff0c;并插入数据&#xff1a; 1.2&#xff0c;…

golang版本管理工具:scoop使用

安装 Scoophttps://scoop.sh/根据官方文档安装。 第一步&#xff1a;打开PowerShell。(注意不要使用管理员方式打开&#xff0c;否则在执行安装Scoop的过程中&#xff0c;会报错。) 第二步&#xff1a;切到C盘根目录下。 第三步&#xff1a; Set-ExecutionPolicy -Executi…

时装购物系统

私信我获取源码和万字论文&#xff0c;制作不易&#xff0c;感谢点赞支持。 摘 要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;时装购物系统当然也不能排除在外。时装购物…

架构04-透明多级分流系统

零、文章目录 架构04-透明多级分流系统 1、透明多级分流系统 &#xff08;1&#xff09;概述 **定义&#xff1a;**透明多级分流系统是指在用户请求从客户端发出到最终查询或修改数据库信息的过程中&#xff0c;通过多个技术部件对流量进行合理分配&#xff0c;以提高系统的…