try catch:处理异常
throw/throws:不处理 抛出
jvm中断程序运行 打印错误信息
web:经典三层模型:
dao(mapper)
service
web层
异常抛给web层Controller类的方法,每个方法可能处理异常,可能处理异常代码相似,造成重复代码重复编写
web层再往上抛 -> 前端控制器
SpringMVC处理异常机制如下
异常处理器实现:
- 第一种方式:实现SpringMVC提供的全局异常处理器接口HandlerExceptionResolver
- 第二种方式:基于注解@ControllerAdvice(标记的类,作为Controller类的通知(增强)类),底层是AOP模式,那么就会很灵活,这个通知类,不需要实现某个接口,继承某个类
第一种方式:
1.异常处理
1.异常分类:
1)系统异常(jdk自带异常),程序有问题
2)业务异常(自定义异常),用户不正当操作导致。
在我们编写的类的方法中 使用throw new自定义一查各类
判断异常类型 -> instanceof
往model里添加不同数据
把这个类交给spring管理
第二种方式
去掉上面这个
MyBookException.java
异常的advice异常通知类 对controller类的方法的增强
@ControlleAdvice
public class BookExceptionController{
@ResponseBody
public Map handleException(BookBaseException){
}
}
throw throws throwable
在处理异常的方法上使用@ExceptionHandler表示这个方法处理那种异常
如果响应json数据给前端,在方法上添加@ResponseBody注解
登录
这个实现类需要注入mapper
异常类
2.文件上传组件
SpringMVC对commits-fileupload的封装
提供文件上传组件: CommonsMultipartResolver 使用的时候,只需要在springmvc的配置文件中配置提供了接收文件类型的数据类型: MultipartFile
前端要求:
- 提交方式: post
- 如果是ajax请求的content-type: multipart/form-data
- 表单提交: enctype= multipart/form-data
controller 进行参数绑定
后台要求
common-fileUpload
- 导入依赖
- 在springmvc的配置文件中配置CommonsMultipartResolver
- 在Controller方法使用MultipartFile接收文件
3.拦截器(Springmvc 过滤器是javaweb的)
Interceptor
filter
1.过滤器是Javaweb的技术,只要是javaWeb项目就可以使用,拦截器是SpringMVc框架的,项目中添加SpringMVC依赖,才可以使用
2.过滤器配置/*,拦截所有资源请求,拦截器,/** 拦截的经过前端控制器的请求
3.执行时间,过滤器先执行,拦截器是否执行
没有经过前端控制器不会拦截
拦截器的实现
1.编写一个类实现拦截器接口Handlerlnterceptor
亦可以是作为异常处理器使用
排除请求 那些url(自定义)
拦截器里面的方法一定都执行吗?它们的顺序是什么?
一个拦截器的执行流程
客户端的请求先经过拦截器的PreHandler()->返回true放行请求可以继续请求,返回false时请求结束,
下一个就是执行处理器当中的方法->再进入拦截器PostHandle()->再走到拦截器的AfterCompletion
->如果上一步都完成了,说明请求完成
多个浏览器的
谁先配谁先执行 -Ainterceptor ->Binterceptor 此时A B都放行 都会到目标资源
规律:
1. preHandle()执行顺序与mvc:interceptor顺序一致, postHandl
afterCompletion()与
mvc:interceptor顺序相反
2.处理器能不能执行,要求所有的拦截器的preHandle()返回true才执行
3.只要某个拦截器的preHandle()方法返回true,这个拦截器的afterCompletion()一定执行
拦截器中Prehandle()用的比较多