SSM6 11-27 SpringMvc过滤器和异常处理

try catch:处理异常

throw/throws:不处理 抛出

jvm中断程序运行 打印错误信息

web:经典三层模型:

dao(mapper)

service

web层

SSM6 11-27 SpringMvc过滤器和异常处理_第1张图片

异常抛给web层Controller类的方法,每个方法可能处理异常,可能处理异常代码相似,造成重复代码重复编写

web层再往上抛     ->  前端控制器

SpringMVC处理异常机制如下

SSM6 11-27 SpringMvc过滤器和异常处理_第2张图片

SSM6 11-27 SpringMvc过滤器和异常处理_第3张图片

异常处理器实现:

  • 第一种方式:实现SpringMVC提供的全局异常处理器接口HandlerExceptionResolver
  • 第二种方式:基于注解@ControllerAdvice(标记的类,作为Controller类的通知(增强)类),底层是AOP模式,那么就会很灵活,这个通知类,不需要实现某个接口,继承某个类

第一种方式:

SSM6 11-27 SpringMvc过滤器和异常处理_第4张图片

SSM6 11-27 SpringMvc过滤器和异常处理_第5张图片

SSM6 11-27 SpringMvc过滤器和异常处理_第6张图片

1.异常处理

1.异常分类:

1)系统异常(jdk自带异常),程序有问题

2)业务异常(自定义异常),用户不正当操作导致。

在我们编写的类的方法中  使用throw new自定义一查各类

SSM6 11-27 SpringMvc过滤器和异常处理_第7张图片

SSM6 11-27 SpringMvc过滤器和异常处理_第8张图片

SSM6 11-27 SpringMvc过滤器和异常处理_第9张图片

SSM6 11-27 SpringMvc过滤器和异常处理_第10张图片

判断异常类型 -> instanceof

往model里添加不同数据

SSM6 11-27 SpringMvc过滤器和异常处理_第11张图片

把这个类交给spring管理

SSM6 11-27 SpringMvc过滤器和异常处理_第12张图片

SSM6 11-27 SpringMvc过滤器和异常处理_第13张图片

SSM6 11-27 SpringMvc过滤器和异常处理_第14张图片

SSM6 11-27 SpringMvc过滤器和异常处理_第15张图片

第二种方式

去掉上面这个

MyBookException.java

异常的advice异常通知类 对controller类的方法的增强

@ControlleAdvice

public class BookExceptionController{

@ResponseBody
public Map handleException(BookBaseException){

}

SSM6 11-27 SpringMvc过滤器和异常处理_第16张图片



}

SSM6 11-27 SpringMvc过滤器和异常处理_第17张图片

SSM6 11-27 SpringMvc过滤器和异常处理_第18张图片

throw throws throwable

在处理异常的方法上使用@ExceptionHandler表示这个方法处理那种异常

如果响应json数据给前端,在方法上添加@ResponseBody注解

登录

SSM6 11-27 SpringMvc过滤器和异常处理_第19张图片

SSM6 11-27 SpringMvc过滤器和异常处理_第20张图片

SSM6 11-27 SpringMvc过滤器和异常处理_第21张图片

SSM6 11-27 SpringMvc过滤器和异常处理_第22张图片

SSM6 11-27 SpringMvc过滤器和异常处理_第23张图片

SSM6 11-27 SpringMvc过滤器和异常处理_第24张图片

SSM6 11-27 SpringMvc过滤器和异常处理_第25张图片

SSM6 11-27 SpringMvc过滤器和异常处理_第26张图片

SSM6 11-27 SpringMvc过滤器和异常处理_第27张图片

这个实现类需要注入mapper

SSM6 11-27 SpringMvc过滤器和异常处理_第28张图片

SSM6 11-27 SpringMvc过滤器和异常处理_第29张图片

SSM6 11-27 SpringMvc过滤器和异常处理_第30张图片

SSM6 11-27 SpringMvc过滤器和异常处理_第31张图片

SSM6 11-27 SpringMvc过滤器和异常处理_第32张图片

异常类

SSM6 11-27 SpringMvc过滤器和异常处理_第33张图片

SSM6 11-27 SpringMvc过滤器和异常处理_第34张图片

SSM6 11-27 SpringMvc过滤器和异常处理_第35张图片

SSM6 11-27 SpringMvc过滤器和异常处理_第36张图片

2.文件上传组件

SpringMVC对commits-fileupload的封装
提供文件上传组件: CommonsMultipartResolver 使用的时候,只需要在springmvc的配置文件中配置

提供了接收文件类型的数据类型: MultipartFile

前端要求:

  1. 提交方式: post
  2. 如果是ajax请求的content-type: multipart/form-data 
  3. 表单提交: enctype= multipart/form-data  

SSM6 11-27 SpringMvc过滤器和异常处理_第37张图片

controller 进行参数绑定

SSM6 11-27 SpringMvc过滤器和异常处理_第38张图片

后台要求

common-fileUpload

  • 导入依赖
  • 在springmvc的配置文件中配置CommonsMultipartResolver
  • 在Controller方法使用MultipartFile接收文件

SSM6 11-27 SpringMvc过滤器和异常处理_第39张图片

SSM6 11-27 SpringMvc过滤器和异常处理_第40张图片

SSM6 11-27 SpringMvc过滤器和异常处理_第41张图片

SSM6 11-27 SpringMvc过滤器和异常处理_第42张图片

SSM6 11-27 SpringMvc过滤器和异常处理_第43张图片

SSM6 11-27 SpringMvc过滤器和异常处理_第44张图片

SSM6 11-27 SpringMvc过滤器和异常处理_第45张图片

SSM6 11-27 SpringMvc过滤器和异常处理_第46张图片

SSM6 11-27 SpringMvc过滤器和异常处理_第47张图片

SSM6 11-27 SpringMvc过滤器和异常处理_第48张图片

SSM6 11-27 SpringMvc过滤器和异常处理_第49张图片

3.拦截器(Springmvc  过滤器是javaweb的)

Interceptor

filter

1.过滤器是Javaweb的技术,只要是javaWeb项目就可以使用,拦截器是SpringMVc框架的,项目中添加SpringMVC依赖,才可以使用

2.过滤器配置/*,拦截所有资源请求,拦截器,/** 拦截的经过前端控制器的请求

3.执行时间,过滤器先执行,拦截器是否执行

没有经过前端控制器不会拦截

SSM6 11-27 SpringMvc过滤器和异常处理_第50张图片

SSM6 11-27 SpringMvc过滤器和异常处理_第51张图片
拦截器的实现

1.编写一个类实现拦截器接口Handlerlnterceptor

SSM6 11-27 SpringMvc过滤器和异常处理_第52张图片

SSM6 11-27 SpringMvc过滤器和异常处理_第53张图片

SSM6 11-27 SpringMvc过滤器和异常处理_第54张图片

亦可以是作为异常处理器使用

SSM6 11-27 SpringMvc过滤器和异常处理_第55张图片

SSM6 11-27 SpringMvc过滤器和异常处理_第56张图片

SSM6 11-27 SpringMvc过滤器和异常处理_第57张图片

SSM6 11-27 SpringMvc过滤器和异常处理_第58张图片

SSM6 11-27 SpringMvc过滤器和异常处理_第59张图片

排除请求 那些url(自定义)

SSM6 11-27 SpringMvc过滤器和异常处理_第60张图片

拦截器里面的方法一定都执行吗?它们的顺序是什么?

一个拦截器的执行流程

客户端的请求先经过拦截器的PreHandler()->返回true放行请求可以继续请求,返回false时请求结束,

下一个就是执行处理器当中的方法->再进入拦截器PostHandle()->再走到拦截器的AfterCompletion

->如果上一步都完成了,说明请求完成

多个浏览器的

谁先配谁先执行 -Ainterceptor ->Binterceptor  此时A  B都放行 都会到目标资源

SSM6 11-27 SpringMvc过滤器和异常处理_第61张图片

SSM6 11-27 SpringMvc过滤器和异常处理_第62张图片

SSM6 11-27 SpringMvc过滤器和异常处理_第63张图片

SSM6 11-27 SpringMvc过滤器和异常处理_第64张图片

规律:

1. preHandle()执行顺序与mvc:interceptor顺序一致, postHandl
afterCompletion()与
mvc:interceptor顺序相反

2.处理器能不能执行,要求所有的拦截器的preHandle()返回true才执行

3.只要某个拦截器的preHandle()方法返回true,这个拦截器的afterCompletion()一定执行

拦截器中Prehandle()用的比较多

 

你可能感兴趣的:(SpringMvc,java)