一文详解SpringMVC的异常处理及拦截器

563 阅读3分钟

「这是我参与2022首次更文挑战的第27天,活动详情查看:2022首次更文挑战」。

SpringMVC异常处理:

springmvc框架采用的是统一,全局的异常处理。

把controller中的所有异常处理都集中到一个地方。 采用的是aop的思想。把业务逻辑和异常处理代码分开。解耦合。

使用两个注解

1.@ExceptionHandler

2.@ControllerAdvice

拦截器:

1)拦截器是springmvc中的一种,需要实现HandlerInterceptor接口。

2)拦截器和过滤器类似,功能方向侧重点不同。 过滤器是用来过滤器请求参数,设置编码字符集等工作。

拦截器是拦截用户的请求,做请求做判断处理的。

3)拦截器是全局的,可以对多个Controller做拦截。

一个项目中可以有0个或多个拦截器, 他们在一起拦截用户的请求。

拦截器常用在:用户登录处理,权限检查, 记录日志。

拦截器的使用步骤:

1.定义类实现HandlerInterceptor接口 2.在springmvc配置文件中,声明拦截器, 让框架知道拦截器的存在。

拦截器的执行时间:

1)在请求处理之前, 也就是controller类中的方法执行之前先被拦截。

2)在控制器方法执行之后也会执行拦截器。

3)在请求处理完成后也会执行拦截器。

拦截器:看做是多个Controller中公用的功能,集中到拦截器统一处理。使用的aop的思想

=================================================================================

多个拦截器:

第一个拦截器preHandle=true , 第二个拦截器preHandle=true

111111-拦截器的MyInterceptor的preHandle()

22222-拦截器的MyInterceptor的preHandle()

=====执行MyController中的doSome方法=====

22222-拦截器的MyInterceptor的postHandle()

111111-拦截器的MyInterceptor的postHandle()

22222-拦截器的MyInterceptor的afterCompletion()

111111-拦截器的MyInterceptor的afterCompletion()


第一个拦截器preHandle=true , 第二个拦截器preHandle=false

111111-拦截器的MyInterceptor的preHandle() 22222-拦截器的MyInterceptor的preHandle() 111111-拦截器的MyInterceptor的afterCompletion()


第一个拦截器preHandle=false , 第二个拦截器preHandle=true|false

111111-拦截器的MyInterceptor的preHandle()

==================================================================== 拦截器和过滤器的区别

1.过滤器是servlet中的对象, 拦截器是框架中的对象 2.过滤器实现Filter接口的对象, 拦截器是实现HandlerInterceptor 3.过滤器是用来设置request,response的参数,属性的,侧重对数据过滤的。 拦截器是用来验证请求的,能截断请求。 4.过滤器是在拦截器之前先执行的。 5.过滤器是tomcat服务器创建的对象 拦截器是springmvc容器中创建的对象 6.过滤器是一个执行时间点。 拦截器有三个执行时间点 7.过滤器可以处理jsp,js,html等等 拦截器是侧重拦截对Controller的对象。 如果你的请求不能被DispatcherServlet接收, 这个请求不会执行拦截器内容 8.拦截器拦截普通类方法执行,过滤器过滤servlet请求响应

===========================================================================