当前位置: 首页 > news >正文

【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简介&#xff1a; 二、SpringMVC快速入门&#xff1a; 三、SpringMVC bean的管理&#xff1a;⭐ ①配置bean ②扫描bean 四、SpringMVC配置类&#xff1a;⭐ 五、SpringMVC 请求与响应 六、SpringMVC REST风格 七、SSM整合 异常处理&#xff1a; 八、…...

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、百度网盘下载 链接&#xff1a;百度网盘 请输入提取码 3、Qt官网下载&#xff1a; Try Qt | 开发应用程序和嵌入式系统 | Qt 二、安装提示 下…...

WebGL/threeJS面试题扫描与总结

什么是 WebGL&#xff1f;什么是 Three.js&#xff1f;请解释three.js中的WebGL和Canvas的区别&#xff1f; WebGL(全写Web Graphics Library)是一种3D绘图协议&#xff0c;这种绘图技术标准允许把JavaScript和OpenGL ES 2.0结合在一起&#xff0c;通过增加OpenGL ES 2.0的一个…...

Qt connect()方法Qt::ConnectionType

connect() Qt&#xff0c;绑定信号和槽原型&#xff1a; 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的缩容 交换分区 查看当前交换分区&#xff1a;free Swap&#xff1a;虚…...

【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…...

算法—双指针

双指针算法可以帮忙把时间复杂度降低一个维度&#xff0c;即原本O&#xff08;n2&#xff09;降为O(n)&#xff1b;将O(n)降为O(1) 移动零 移动零 题目解析 将所有0移动到末尾保持非0元素相对顺序对数组进行原地操作&#xff08;不开辟额外空间&#xff09; 算法原理 数组…...

​[Oracle]编写程序,键盘输入n,计算1+前n项之和。测试案例:输入:10 输出:22.47​

编写程序&#xff0c;键盘输入n,计算1前n项之和。 测试案例&#xff1a; 输入&#xff1a;10 输出&#xff1a;22.47 代码如下&#xff1a; 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十四讲学习笔记】第三讲——旋转向量和欧拉角

专栏系列文章如下&#xff1a; 【视觉SLAM十四讲学习笔记】第一讲——SLAM介绍 【视觉SLAM十四讲学习笔记】第二讲——初识SLAM 【视觉SLAM十四讲学习笔记】第三讲——旋转矩阵 本章将介绍视觉SLAM的基本问题之一&#xff1a;如何描述刚体在三维空间中的运动&#xff1f; 旋转向…...

【UGUI】制作用户注册UI界面

这里面主要的操作思想就是 1.打组 同一个事情里面包含两个UI元素都应该打组便于管理和查找 2.设置锚点位置 每次创建一个UI都应该设置他的锚点以便于跟随画布控制自己的&#xff1a;相对位置 3. 设置尺寸&#xff08;像素大小&#xff09; 每一次UI元素哪怕是作为父物体的…...

【UE】透视效果

效果 步骤 1. 新建一个空白工程 2. 添加一个第三人称游戏和初学者内容包到内容浏览器 3. 新建一个材质&#xff0c;这里命名为“M_Perspective” 打开“M_Perspective”&#xff0c;设置材质域为后期处理 添加三个“SceneTexture”节点&#xff0c;场景纹理ID选项分别设置为“…...

前端下载文件或者图片方式,window.open或者a标签形式

首先分别讲一下下载文件的方式都有哪些 1.通过a标签的方式下载文件 <a href"http://www.baidu.com" download"baidu.html">下载</a> 我们点击下载&#xff0c;发现是跳转到了百度的首页&#xff0c;并没有真的下载文件。 因为a标签下载只能…...

webpack配置scss loader

国内GPT站点&#xff1a;https://www.atalk-ai.com 在 Webpack 中配置 sass-loader 用于处理 .scss 文件通常涉及以下步骤&#xff1a; 安装必要的依赖&#xff1a; 你需要安装 sass-loader&#xff0c;以及 sass 本身&#xff08;sass 是 node-sass 的替代品&#xff0c;更快且…...

k8s有状态部署mysql主从(local pv持久化)

1、修改自己对应的命名空间 2、local pv的方式必须先创建好目录在给权限 3、sts部署文件密码都要修改好在部署 yaml资源文件如下&#xff1a; #配置mysql的root密码再部署&#xff0c;如果部署了在修改root密码就会失败&#xff0c;必须在初始化就把root密码修改好 #部署采…...

下载并安装anaconda和VScode,配置虚拟环境,并使用VScode运行代码

文章目录 前言软件下载Anaconda下载VScode下载 软件安装Anaconda安装Vscod安装 配置虚拟环境并运行代码Anaconda创建环境VScode使用&#xff0c;运行代码1. 打开代码所在文件夹2. 选择解释器3. 运行代码 总结 前言 运行python代码&#xff0c;需要2个软件如下&#xff1a; Ana…...

拼图 游戏

运行出的游戏界面如下&#xff1a;按住A不松开&#xff0c;显示完整图片&#xff1b;松开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()结果&#xff1a; 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这一节的知识里&#xff0c;对文件的操作主要分为两大类&#xff1a; ☑️针对文件系统进行的操作 ☑️针对文件内容进行的操作 上文已经讲了针对文件系统即File类的操作&#xff0c;这篇文章里博主就来带了解针对文件内容的操作&#xff0c;即输入输出流&am…...

告别驱动精灵!手把手教你用设备管理器手动修复声卡驱动(以英特尔智音技术为例)

告别驱动精灵&#xff01;手把手教你用设备管理器手动修复声卡驱动&#xff08;以英特尔智音技术为例&#xff09;当笔记本突然失去声音&#xff0c;右下角的小喇叭图标显示红色叉号时&#xff0c;多数人的第一反应是下载各种驱动助手。但你是否想过&#xff0c;Windows自带的设…...

桌面实时股票监控终极指南:5分钟打造你的Windows投资助手

桌面实时股票监控终极指南&#xff1a;5分钟打造你的Windows投资助手 【免费下载链接】TrafficMonitorPlugins 用于TrafficMonitor的插件 项目地址: https://gitcode.com/gh_mirrors/tr/TrafficMonitorPlugins 在当今快节奏的数字时代&#xff0c;投资者们常常需要在工作…...

深入解析tsMuxer:高效无损视频封装解决方案与实战配置指南

深入解析tsMuxer&#xff1a;高效无损视频封装解决方案与实战配置指南 【免费下载链接】tsMuxer tsMuxer is a transport stream muxer for remuxing/muxing elementary streams, EVO/VOB/MPG, MKV/MKA, MP4/MOV, TS, M2TS to TS to M2TS. Supported video codecs H.264/AVC, H…...

3分钟上手!BilibiliDown:免费开源B站视频下载工具终极指南

3分钟上手&#xff01;BilibiliDown&#xff1a;免费开源B站视频下载工具终极指南 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader &#x1f633; 项目地址: https://gitcode.c…...

028、原理图ERC检查与常见错误排查

028 原理图ERC检查与常见错误排查 一次让我通宵的“悬空引脚”教训 几年前做一款工业控制板,原理图画完,自我感觉良好,直接丢给Layout工程师。结果板子回来,上电就烧了一路电源。查了两天,最后发现是一个运放的反馈引脚在原理图上画了线,但网络标号写错了——那个引脚实…...

如何快速提升视频画质:AI视频增强终极指南

如何快速提升视频画质&#xff1a;AI视频增强终极指南 【免费下载链接】video2x A machine learning-based video super resolution and frame interpolation framework. Est. Hack the Valley II, 2018. 项目地址: https://gitcode.com/GitHub_Trending/vi/video2x Vid…...

ChatGPT可视化输出总失真?深度解析其底层渲染引擎限制(基于OpenAI v4.12.3源码逆向分析)

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;ChatGPT可视化输出失真现象的实证观察 在实际工程调试与教学演示中&#xff0c;开发者频繁反馈 ChatGPT&#xff08;尤其是通过 API 或网页界面返回 Markdown 渲染结果&#xff09;对代码块、数学公式、表格及…...

如何免费绕过iOS激活锁:Applera1n完整解决方案指南

如何免费绕过iOS激活锁&#xff1a;Applera1n完整解决方案指南 【免费下载链接】applera1n icloud bypass for ios 15-16 项目地址: https://gitcode.com/gh_mirrors/ap/applera1n 你是否曾因忘记Apple ID密码而面对无法使用的iPhone束手无策&#xff1f;或者购买的二手…...

专业指南:yuzu模拟器完全配置与优化教程

专业指南&#xff1a;yuzu模拟器完全配置与优化教程 【免费下载链接】yuzu 任天堂 Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/yu/yuzu 想在电脑上畅玩任天堂Switch游戏吗&#xff1f;yuzu模拟器为你提供了完美的解决方案。作为目前最受欢迎的开源Sw…...

5分钟掌握BOTW存档编辑器:打造你的完美塞尔达传说冒险

5分钟掌握BOTW存档编辑器&#xff1a;打造你的完美塞尔达传说冒险 【免费下载链接】BOTW-Save-Editor-GUI A Work in Progress Save Editor for BOTW 项目地址: https://gitcode.com/gh_mirrors/bo/BOTW-Save-Editor-GUI 想在《塞尔达传说&#xff1a;旷野之息》中自由探…...