SSM整合快速学习

目录

步骤:

一、环境搭建

1.创建JdbcConfig配置类

2.创建JdbcConfig配置类

3.创建MybatisConfig配置类

4.创建jdbc.properties

5.创建SpringMVC配置类

6.创建Web项目入口配置类

二、功能模块开发

步骤1:创建数据库及表

步骤2:编写模型类

步骤3:编写Dao接口

步骤4:编写Service接口和实现类

步骤5:编写Contorller类

三、统一结果封装

四、统一异常处理

异常处理器的使用

步骤1:创建异常处理器类

步骤2:让程序抛出异常

步骤3:运行程序,测试

异常处理器类返回结果给前端

项目异常处理方案

步骤1:自定义异常类

步骤2:将定义的异常包成自定义异常

步骤3:在异常处理器类中处理自定义异常

总结

五、拦截器

​编辑拦截器的实现

步骤1:创建拦截器类

步骤2:配置拦截器类

总结

拦截器参数

前置处理方法

后置处理方法

完成处理方法

拦截器链配置

 配置多个拦截器

步骤1:创建拦截器类

步骤2:配置拦截器类

那多个拦截器是如何执行的呢?

步骤:

一、环境搭建

1.创建JdbcConfig配置类

2.创建JdbcConfig配置类

3.创建MybatisConfig配置类

4.创建jdbc.properties

5.创建SpringMVC配置类

6.创建Web项目入口配置类

二、功能模块开发

步骤1:创建数据库及表

步骤2:编写模型类

这里是以一个商品类举例的

步骤3:编写Dao接口

步骤4:编写Service接口和实现类

步骤5:编写Contorller类

三、统一结果封装

我们现在可以发现一个问题,在Controller层中增删改、查询单个、查询所有返回给前端的数据不统一。这对于前后端交互是很不方便的。

这个时候就可以使用一个类将数据返回结果统一一下。如下图所示。

这里我们设置的统一返回结果类为:

这里面用到了Code,所以也要定义一下返回码Code

修改Controller

四、统一异常处理

在代码执行中出现异常是不可避免的,异常主要分以下几种

  • 框架内部抛出的异常:因使用不合规导致

  • 数据层抛出的异常:因外部服务器故障导致(例如:服务器访问超时)

  • 业务层抛出的异常:因业务逻辑书写错误导致(例如:遍历业务书写操作,导致索引异常等)

  • 表现层抛出的异常:因数据收集、校验等规则导致(例如:不匹配的数据类型间导致异常)

  • 工具类抛出的异常:因工具类书写不严谨不够健壮导致(例如:必要释放的连接长期未释放等)

  1. 各个层级均出现异常,异常处理代码书写在哪一层?

    所有的异常均抛出到表现层进行处理

  2. 异常的种类很多,表现层如何将所有的异常都处理到呢?

    异常分类

  3. 表现层处理异常,每个方法中单独书写,代码书写量巨大且意义不强,如何解决?

    AOP、

SpringMVC已经为我们提供了一套解决方案

如何使用呢?

异常处理器的使用

步骤1:创建异常处理器类

步骤2:让程序抛出异常

步骤3:运行程序,测试

异常处理器类返回结果给前端

项目异常处理方案

上述的异常处理方法是一个统一的概念,没有对异常进行分类,下面我们对异常进行分类。

  • 业务异常(BusinessException)

        用户在页面输入内容的时候未按照指定格式进行数据填写,如在年龄框输入的是字符串

  •  系统异常(SystemException)

        项目运行过程中可预计但无法避免的异常比如数据库或服务器宕机

  • 其他异常(Exception)

        编程人员未预期到的异常,如:用到的文件不存在

将异常分类以后,针对不同类型的异常,要提供具体的解决方案:

  • 业务异常(BusinessException)

    • 发送对应消息传递给用户,提醒规范操作

      • 大家常见的就是提示用户名已存在或密码格式不正确等

  • 系统异常(SystemException)

    • 发送固定消息传递给用户,安抚用户

      • 系统繁忙,请稍后再试

      • 系统正在维护升级,请稍后再试

      • 系统出问题,请联系系统管理员等

    • 发送特定消息给运维人员,提醒维护

      • 可以发送短信、邮箱或者是公司内部通信软件

    • 记录日志

      • 发消息和记录日志对用户来说是不可见的,属于后台程序

  • 其他异常(Exception)

    • 发送固定消息传递给用户,安抚用户

    • 发送特定消息给编程人员,提醒维护(纳入预期范围内)

      • 一般是程序没有考虑全,比如未做非空校验等

    • 记录日志

具体要怎么实现呢?

步骤1:自定义异常类

  • 让自定义异常类继承RuntimeException的好处是,后期在抛出这两个异常的时候,就不用在try...catch...或throws了

  • 自定义异常类中添加code属性的原因是为了更好的区分异常是来自哪个业务的

步骤2:将定义的异常包成自定义异常

具体的包装方式有:

  • 方式一:try{}catch(){}在catch中重新throw我们自定义异常即可。

  • 方式二:直接throw自定义异常即可

步骤3:在异常处理器类中处理自定义异常

在这里面定义的会将异常信息返回给前端

总结

项目的整个异常处理方式如下图

五、拦截器


拦截器的实现

步骤1:创建拦截器类

让类实现HandlerInterceptor接口,重写接口中的三个方法。

就是拦截器中的preHandler方法,如果返回true,则代表放行,会执行原始Controller类中要请求的方法,如果返回false,则代表拦截,后面的就不会再执行了。

步骤2:配置拦截器类

这里配置的是对/books,发送http://localhost/books ,就会看到如下输出

如果发送http://localhost/books/100会发现拦截器没有被执行,原因是拦截器的addPathPatterns方法配置的拦截路径是/book

总结

拦截器的整个执行流程如下:

当有拦截器后,请求会先进入preHandle方法,

如果方法返回true,则放行继续执行后面的handle[controller的方法]和后面的方法

如果返回false,则直接跳过后面方法的执行。

拦截器参数

前置处理方法

后置处理方法

使用率不高

完成处理方法

使用率不高

这三个方法中,最常用的是preHandle,在这个方法中可以通过返回值来决定是否要进行放行,我们可以把业务逻辑放在该方法中,如果满足业务则返回true放行,不满足则返回false拦截。

拦截器链配置

如果一个项目中有多个拦截器。该如何配置,执行顺序又是怎么样的

 配置多个拦截器
步骤1:创建拦截器类

跟前面一样再定义一个拦截器类

步骤2:配置拦截器类

跟前面一样就是多写了一遍

那多个拦截器是如何执行的呢?

和栈一样,先进后出。

  • 当配置多个拦截器时,形成拦截器链

  • 拦截器链的运行顺序参照拦截器添加顺序为准

  • 当拦截器中出现对原始处理器的拦截,后面的拦截器均终止运行

  • 当拦截器运行中断,仅运行配置在前面的拦截器的afterCompletion操作

  • 21
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值