【spring(五)】SpringMvc总结 SSM整合流程
目录
一、SpringMVC简介:
二、SpringMVC快速入门:
三、SpringMVC bean的管理:⭐
①配置bean
②扫描bean
四、SpringMVC配置类:⭐
五、SpringMVC 请求与响应
六、SpringMVC REST风格
七、SSM整合 异常处理:
八、SSM整合流程:⭐
九、SpringMVC 拦截器:
一、SpringMVC简介:
1.SpringMVC是一种表现层框架技术
2.SpringMVC用于进行表现层功能开发

与原始Servlet对比:

二、SpringMVC快速入门:
①:使用SpringMVC技术需要先导入SpringMVC坐标与Servlet坐标
<dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version><scope>provided</scope>
</dependency>
<dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.2.10.RELEASE</version>
</dependency>
②:创建SpringMVC控制器类(等同于Servlet功能)
@RestController
public class BookController {@RequestMapping("/save")@ResponseBodypublic String save(){return null;}
}
③:初始化SpringMVC环境(同Spring环境),设定SpringMVC加载对应的bean
@Configuration
@ComponentScan({"com.itpan.controller"})
@EnableWebMvc
public class SpringMVCConfig {
}
三、SpringMVC bean的管理:⭐
①配置bean
①三层架构中的bean
控制层controller:@restcontroller = @controller + @responsebody
业务层service:@service
持久层dao:@reposity
②其他bean(第三方,自己写的……)
加入@bean注解
②扫描bean
在springconfig配置文件上加入@ComponentScan({"包名1", "包名2",……})
总结:
SpringMVC入门程序开发总结(1+N)
一次性工作
创建工程,设置服务器,加载工程
导入坐标
创建web容器启动类,加载SpringMVC配置,并设置SpringMVC请求拦截路径
SpringMVC核心配置类(设置配置类,扫描controller包,加载Controller控制器bean
多次工作
定义处理请求的控制器类
定义处理请求的控制器方法,并配置映射路径(@RequestMapping)与返回json数据(@ResponseBody)
四、SpringMVC配置类:⭐
SpringMVC等同于Web容器,Spring是Spring-web的子容器,所以同时加载Spring和SpringMVC会有bean加载冲突问题
解决办法:ServletConfig配置类
加载SpringMVC配置

加载Spring配置

设定SpringMVC拦截请求路径

五、SpringMVC 请求与响应
见文章:http://t.csdnimg.cn/puThL
获取请求参数:http://t.csdnimg.cn/pu0KD
六、SpringMVC REST风格
与原始风格做对比
优点:
隐藏业务行为,无法通过地址得知对资源的何种操作
简化书写

通过请求类型区分业务操作

七、SSM整合 异常处理:
程序遇到异常会抛给他的调用者,就这样一层一层往上抛,如果不处理,最后会抛给jvm
步骤分析:
- 判定异常分类:
- 业务异常(用户请求有误)
- 运行异常(代码有BUG)
- 其他异常(不确定异常,例如系统崩了,服务器坏了等等)
- 创建异常类:
- 在可能出现异常的地方抛出异常,统一处理:
- 定义异常处理类:
模拟实现:
AOP思想
//@RestControllerAdvice用于标识当前类为REST风格对应的异常处理器
@RestControllerAdvice
public class ProjectExceptionAdvice {//@ExceptionHandler用于设置当前处理器类对应的异常类型@ExceptionHandler(SystemException.class)public Result doSystemException(SystemException ex){//记录日志//发送消息给运维//发送邮件给开发人员,ex对象发送给开发人员return new Result(ex.getCode(),null,ex.getMessage());}@ExceptionHandler(BusinessException.class)public Result doBusinessException(BusinessException ex){return new Result(ex.getCode(),null,ex.getMessage());}//除了自定义的异常处理器,保留对Exception类型的异常处理,用于处理非预期的异常@ExceptionHandler(Exception.class)public Result doOtherException(Exception ex){//记录日志//发送消息给运维//发送邮件给开发人员,ex对象发送给开发人员return new Result(Code.SYSTEM_UNKNOW_ERR,null,"系统繁忙,请稍后再试!");}
}
模拟异常:
public Book getById(Integer id) {//模拟业务异常,包装成自定义异常if(id == 1){throw new BusinessException(Code.BUSINESS_ERR,"请不要使用你的技术挑战我的耐性!");}//模拟系统异常,将可能出现的异常进行包装,转换成自定义异常try{int i = 1/0;}catch (Exception e){throw new SystemException(Code.SYSTEM_TIMEOUT_ERR,"服务器访问超时,请重试!",e);}return bookDao.getById(id);}
八、SSM整合流程:⭐
前面已经学了 Mybatis 、 Spring 和 SpringMVC 三个框架,现在要整合这三个框架,完成业务功能的简单开发。

SpringConfig配置类:
@Configuration
@ComponentScan({"com.itpan.service"}) // 组件扫描 为防止spring和springMVC重复扫描只扫描到service
@PropertySource({"classpath:jdbc.properties"}) // 加载数据库配置文件
@Import({JdbcConfig.class, MybatisConfig.class}) // 导入配置文件
public class SpringConfig {
}
jdbcConfig配置类:
public class JdbcConfig {@Value("${jdbc.driver}")private String driver;@Value("${jdbc.url}")private String url;@Value("${jdbc.username}")private String username;@Value("${jdbc.password}")private String password;// 管理第三方的bean,供spring使用@Beanpublic DataSource dataSource(){DruidDataSource dataSource = new DruidDataSource();dataSource.setDriverClassName(driver);dataSource.setUrl(url);dataSource.setUsername(username);dataSource.setPassword(password);return dataSource;}
}
jdbc.properties:略
jdbc.driver=com.itpan.jdbc.Driver
jdbc.url=jdbc:mysql//localhost:3306/ssm_db
jdbc.username=root
jdbc.password=root
MybatisConfig配置类:
public class MybatisConfig {// 配置数据库连接池的bean,方法的参数也是bean的自动装配@Beanpublic SqlSessionFactoryBean sqlSessionFactory(DataSource dataSource){SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();factoryBean.setDataSource(dataSource);factoryBean.setTypeAliasesPackage("com.itpan.domain");return factoryBean;}// 配置扫描Dao包下的bean@Beanpublic MapperScannerConfigurer mapperScannerConfigurer(){MapperScannerConfigurer msc = new MapperScannerConfigurer();msc.setBasePackage("com.itpan.dao");return msc;}
}
ServletConfig配置类:
public class ServletConfig extends AbstractAnnotationConfigDispatcherServletInitializer {@Overrideprotected Class<?>[] getRootConfigClasses() {return new Class[]{SpringConfig.class};}@Overrideprotected Class<?>[] getServletConfigClasses() {return new Class[]{SpringMVCConfig.class};}// 拦截路径@Overrideprotected String[] getServletMappings() {return new String[]{"/"};}
}
SpringMVC配置类:
@Configuration
@ComponentScan({"com.itpan.controller"})
@EnableWebMvc
public class SpringMVCConfig {
}

九、SpringMVC 拦截器:
见文章:http://t.csdnimg.cn/JqJ6b
相关文章:
【spring(五)】SpringMvc总结 SSM整合流程
目录 一、SpringMVC简介: 二、SpringMVC快速入门: 三、SpringMVC bean的管理:⭐ ①配置bean ②扫描bean 四、SpringMVC配置类:⭐ 五、SpringMVC 请求与响应 六、SpringMVC REST风格 七、SSM整合 异常处理: 八、…...
1、windows10系统下Qt5.12.0与卸载
一、安装包下载 1、Qt社区下载 https://download.qt.io/archive/qt/5.12/5.12.10/qt-opensource-windows-x86-5.12.10.exe 2、百度网盘下载 链接:百度网盘 请输入提取码 3、Qt官网下载: Try Qt | 开发应用程序和嵌入式系统 | Qt 二、安装提示 下…...
WebGL/threeJS面试题扫描与总结
什么是 WebGL?什么是 Three.js?请解释three.js中的WebGL和Canvas的区别? WebGL(全写Web Graphics Library)是一种3D绘图协议,这种绘图技术标准允许把JavaScript和OpenGL ES 2.0结合在一起,通过增加OpenGL ES 2.0的一个…...
Qt connect()方法Qt::ConnectionType
connect() Qt,绑定信号和槽原型: static QMetaObject::Connection connect(const QObject *sender, const char *signal,const QObject *receiver, const char *member, Qt::ConnectionType Qt::AutoConnection);static QMetaObject::Connection conn…...
HIVE SQL时间函数
目录 current_timestamp()获取当前时间unix_timestamp()获取当前时区的UNIX时间戳from_unixtime()时间戳转日期函数unix_timestamp(string date)日期转时间戳函数提取日期中的年月日时分秒weekofyear (string date)日期转周函数日期比较函数datediff(string enddate, string st…...
linux磁盘的LVM、交换分区以及文件系统
目录 逻辑卷LVM LVM管理 LVM特点 LVM的制作 创建物理卷 创建卷组 创建逻辑卷 格式化文件系统 挂载逻辑卷 LVM的扩容 添加硬盘做物理卷 卷组扩容 扩容逻辑卷 给文件系统扩容 LVM移除 LVM的缩容 交换分区 查看当前交换分区:free Swap:虚…...
【HDFS】ActiveNamenodeResolver#getNamespaces 方法调用点梳理
获取所有的注册在router里的active状态的集群。 /*** Get a list of all namespaces that are registered and active in the* federation.** @return List of name spaces in the federation* @throws IOException Throws exception if the namespace list is not* av…...
算法—双指针
双指针算法可以帮忙把时间复杂度降低一个维度,即原本O(n2)降为O(n);将O(n)降为O(1) 移动零 移动零 题目解析 将所有0移动到末尾保持非0元素相对顺序对数组进行原地操作(不开辟额外空间) 算法原理 数组…...
[Oracle]编写程序,键盘输入n,计算1+前n项之和。测试案例:输入:10 输出:22.47
编写程序,键盘输入n,计算1前n项之和。 测试案例: 输入:10 输出:22.47 代码如下: set serveroutput on declare v_sum number:0;v_n number;beginv_n:&n;for i in 1..v_n loopv_sum:v_sumsqrt(i); end loop; d…...
【视觉SLAM十四讲学习笔记】第三讲——旋转向量和欧拉角
专栏系列文章如下: 【视觉SLAM十四讲学习笔记】第一讲——SLAM介绍 【视觉SLAM十四讲学习笔记】第二讲——初识SLAM 【视觉SLAM十四讲学习笔记】第三讲——旋转矩阵 本章将介绍视觉SLAM的基本问题之一:如何描述刚体在三维空间中的运动? 旋转向…...
【UGUI】制作用户注册UI界面
这里面主要的操作思想就是 1.打组 同一个事情里面包含两个UI元素都应该打组便于管理和查找 2.设置锚点位置 每次创建一个UI都应该设置他的锚点以便于跟随画布控制自己的:相对位置 3. 设置尺寸(像素大小) 每一次UI元素哪怕是作为父物体的…...
【UE】透视效果
效果 步骤 1. 新建一个空白工程 2. 添加一个第三人称游戏和初学者内容包到内容浏览器 3. 新建一个材质,这里命名为“M_Perspective” 打开“M_Perspective”,设置材质域为后期处理 添加三个“SceneTexture”节点,场景纹理ID选项分别设置为“…...
前端下载文件或者图片方式,window.open或者a标签形式
首先分别讲一下下载文件的方式都有哪些 1.通过a标签的方式下载文件 <a href"http://www.baidu.com" download"baidu.html">下载</a> 我们点击下载,发现是跳转到了百度的首页,并没有真的下载文件。 因为a标签下载只能…...
webpack配置scss loader
国内GPT站点:https://www.atalk-ai.com 在 Webpack 中配置 sass-loader 用于处理 .scss 文件通常涉及以下步骤: 安装必要的依赖: 你需要安装 sass-loader,以及 sass 本身(sass 是 node-sass 的替代品,更快且…...
k8s有状态部署mysql主从(local pv持久化)
1、修改自己对应的命名空间 2、local pv的方式必须先创建好目录在给权限 3、sts部署文件密码都要修改好在部署 yaml资源文件如下: #配置mysql的root密码再部署,如果部署了在修改root密码就会失败,必须在初始化就把root密码修改好 #部署采…...
下载并安装anaconda和VScode,配置虚拟环境,并使用VScode运行代码
文章目录 前言软件下载Anaconda下载VScode下载 软件安装Anaconda安装Vscod安装 配置虚拟环境并运行代码Anaconda创建环境VScode使用,运行代码1. 打开代码所在文件夹2. 选择解释器3. 运行代码 总结 前言 运行python代码,需要2个软件如下: Ana…...
拼图 游戏
运行出的游戏界面如下:按住A不松开,显示完整图片;松开A显示随机打乱的图片 User类 package domain;/*** ClassName: User* Author: Kox* Data: 2023/2/2* Sketch:*/ public class User {private String username;private String password;p…...
python循环语句和函数
1.使用for循环打印9*9乘法表 for i in range(1, 10):for j in range(1, i1):print(i, "*", j, "", i*j, end"\t")print()结果: 2.使用while循环打印9*9乘法表 i 1 while i < 10:j 1while j < i1:print(i, "*", j…...
php框架dcat-admin速查笔记
要想灵活的使用dcat-admin框架开发,必须知道框架有哪些类提供给我们使用. 每一个自定义的按钮,弹框,信息展示,小组件都用到特定的类和接口. 常用核心类 Dcat\Admin\Http\Controllers\AdminController 需要继承的公共控制器 Dcat\Admin\Layout\Content 布局核心 Dcat\Admin\Gr…...
【Java】文件I/O-文件内容操作-输入输出流-Reader/Writer/InputStream/OutputStream四种流
导读 在文件I/O这一节的知识里,对文件的操作主要分为两大类: ☑️针对文件系统进行的操作 ☑️针对文件内容进行的操作 上文已经讲了针对文件系统即File类的操作,这篇文章里博主就来带了解针对文件内容的操作,即输入输出流&am…...
忍者像素绘卷应用场景:微信小程序‘忍者学院’像素头像认证系统
忍者像素绘卷应用场景:微信小程序忍者学院像素头像认证系统 1. 项目背景与价值 微信小程序"忍者学院"作为一款面向动漫爱好者的社交平台,面临着用户头像个性化需求日益增长的挑战。传统头像系统存在两个核心痛点: 同质化严重&am…...
Agent 不是玄学!前端只需要会做步骤可视化就够了
“AI 智能体”“思考链”“工具调用”—— 这些词听着就像 “AI 要统治世界”,是不是觉得离前端特别远?其实不然!对前端来说,Agent 就是 “一个会自己做任务的 AI”—— 比如 “让 AI 自动查天气、写周报、发邮件”,你…...
小白也能玩转大模型!Llama Factory免代码训练平台入门
小白也能玩转大模型!Llama Factory免代码训练平台入门 1. 什么是Llama Factory? 想象一下,你有一个智能助手,但它总是回答一些不太符合你需求的内容。这时候,你就需要"教"它变得更懂你——这就是大模型微调…...
Pandas :索引机制与数据访问
Pandas 的运行逻辑建立在索引对象之上。索引对象不仅用于显示标签,更承担“标签查找”的职责。所有基于标签的访问与运算,都会先经过索引对象完成查找与匹配,再进入数据区域。示例数据:import pandas as pd df pd.DataFrame({ …...
Jedi-Vim 终极自定义指南:如何集成其他Python分析工具提升开发效率
Jedi-Vim 终极自定义指南:如何集成其他Python分析工具提升开发效率 【免费下载链接】jedi-vim Using the jedi autocompletion library for VIM. 项目地址: https://gitcode.com/gh_mirrors/je/jedi-vim Jedi-Vim 是一款强大的 Vim 插件,它通过集…...
qmcdump:QQ音乐加密文件解码完全解决方案
qmcdump:QQ音乐加密文件解码完全解决方案 【免费下载链接】qmcdump 一个简单的QQ音乐解码(qmcflac/qmc0/qmc3 转 flac/mp3),仅为个人学习参考用。 项目地址: https://gitcode.com/gh_mirrors/qm/qmcdump 1 解析问题&#x…...
AI绘画新体验:图图的嗨丝造相快速上手,轻松生成时尚渔网袜风格图片
AI绘画新体验:图图的嗨丝造相快速上手,轻松生成时尚渔网袜风格图片 1. 认识图图的嗨丝造相-Z-Image-Turbo 1.1 什么是嗨丝造相模型 图图的嗨丝造相-Z-Image-Turbo是一款专注于生成时尚渔网袜风格图片的AI绘画模型。它基于先进的图像生成技术ÿ…...
Phi-4-mini-reasoning开发者实操:tail日志定位推理超时问题全记录
Phi-4-mini-reasoning开发者实操:tail日志定位推理超时问题全记录 1. 问题背景与现象 最近在使用Phi-4-mini-reasoning模型进行数学题推理时,发现部分复杂题目会出现响应超时的情况。具体表现为: 提交题目后,页面长时间显示&qu…...
SeqGPT-560m生成效果实测:在中文语法纠错与润色任务中的表现
SeqGPT-560m生成效果实测:在中文语法纠错与润色任务中的表现 1. 项目背景介绍 今天我们来实测一个特别实用的AI工具——SeqGPT-560m在中文语法纠错与文本润色方面的表现。这个轻量级模型虽然参数不多,但在处理中文文本时展现出了令人惊喜的能力。 本项…...
墨语灵犀网络安全知识库:基于AI的威胁情报分析与解读
墨语灵犀网络安全知识库:让AI成为你的安全分析师 最近和几个做安全运营的朋友聊天,他们都在抱怨同一件事:每天面对海量的安全告警和晦涩的漏洞报告,眼睛都快看花了。一份新的漏洞描述扔过来,光是理解它到底在说什么、…...
