文章目录
- SpringMVC拦截器 & SpringMVC异常处理
- 一、拦截器(interceptor)的作用
-
- 1、拦截器于过滤器的区别
- 二、拦截器的使用
- 三、SpringMVC异常处理概论
-
- 1、SpringMVC异常处理的方式
-
- 1.1、简单异常处理器SimpleMappingExceptionResolver
- 1.2、自定义自己的异常处理器
SpringMVC拦截器 & SpringMVC异常处理 一、拦截器(interceptor)的作用
SpringMVC的拦截器与JavaWeb阶段的Servlet开发中的过滤器Filter非常相像。1、拦截器于过滤器的区别
其作用是用来对处理器进行预处理和后处理。
当多个拦截器按照一定的顺序结成一条链,那么这条链就被称为拦截器链(Interceptor Chain)
在访问被拦截的方法或字段时,拦截器链中的拦截器就会按其之前定义的顺序被调用。拦截器也是AOP思想的具体实现。
区别 | 过滤器 | 拦截器 |
---|---|---|
使用范围 | 是servlet规范的一部分,任何JavaWeb工厂都可以使用 | 是springMVC框架自己使用的,只有使用了springMVC框架的工程才能用 |
拦截范围 | 在url-pattern中配置了/*之后,可以对所有要访问的资源拦截 | 在< mvc:mapping path=“”/ >中配置了/**之 后,也可以多所有资源进行拦截,但是可以通 过标签 排除不需要拦截的资源 |
- 创建拦截器类实现HandlerInterceptor接口
- 配置拦截器
- 测试拦截器的拦截效果
public class PrivilegeIntercepetor implements HandlerInterceptor {@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//在目标方法执行之前执行(这个经常用)
//比如用于判断用户是否已经登录
}@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
//目标方法执行之后,视图对象返回之前执行
//这里有一个ModelAndView,可以用于修改controlet存进域里面的数据
}@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
//在目标方法执行之后,视图对象返回之前执行
//不常用,一般用来收尾
}
}
文章图片
三、SpringMVC异常处理概论
学习Java以来,遇到的异常主要是两种
在SpringMVC框架中,系统产生的异常都可以由框架统一处理,从而返回特定的报错视图或者把错误信息存进日志
- 预期异常:通过捕获异常进而获取异常信息(try …catch…)
- 运行时异常RuntimeException:通过规范代码开发、测试等手段减少运行时异常的出现
系统的Dao、Service、Controller出现异常的时候,都用throw Exception向上抛出,最后Spring前端控制器交由异常处理器进行处理
文章图片
1、SpringMVC异常处理的方式
1.1、简单异常处理器SimpleMappingExceptionResolver
- 使用Spring MVC提供的简单异常处理器SimpleMappingExceptionResolver
- 实现Spring的异常处理接口HandlerExceptionResolver 自定义自己的异常处理器
简单异常处理器的使用就很简单了,SpringMVC已经自定义好了该类型转换器,使用的时候只需要根据项目进行相应异常与视图的映射配置即可
文章图片
这里的视图显示顺序也很简单,首先会寻找Spring处理的异常是否在map里面,如果是是则执行对应的代码返回对应的视图,如果不是则在显示默认错误视图1.2、自定义自己的异常处理器
步骤:
① 创建异常处理器类实现HandlerExceptionResolver
public class MyExceptionResolver implements HandlerExceptionResolver { @Override public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { //判断该异常是否是自己想要处理的异常 if(e instandceof MyException){ //处理异常的代码实现 //创建ModelAndView对象 ModelAndView modelAndView = new ModelAndView(); //返回对应的错误视图 modelAndView.setViewName("exceptionPage"); } return modelAndView; } }
② 配置异常处理器
③ 编写异常页面
【SSM|SpringMVC拦截器 & SpringMVC异常处理】④ 测试异常跳转
推荐阅读
- java|卷积神经网络改进想法初探(备份)
- 安全与认证|原代码审计笔记-安全缺陷
- java|Java技术之高频面试题
- spring|spring boot security自定义配置授权服务器实现Oauth2授权(支持密码和授权码两种模式)
- Spring|SpringSecurity + JWT自定义授权
- springboot 集成 spring security 自定义登录
- springsecurity|SpringSecurity自定义登录界面
- Kotlin|浅谈Android dataBinding使用
- 微服务Springcloud|微服务 - gateway网关配置