文章目录
SpringMVC拦截器 & SpringMVC异常处理
一、拦截器(interceptor)的作用
SpringMVC的拦截器与JavaWeb阶段的Servlet开发中的过滤器Filter非常相像。
其作用是用来对处理器进行预处理和后处理。
当多个拦截器按照一定的顺序结成一条链,那么这条链就被称为拦截器链(Interceptor Chain)
在访问被拦截的方法或字段时,拦截器链中的拦截器就会按其之前定义的顺序被调用。拦截器也是AOP思想的具体实现。
1、拦截器于过滤器的区别
区别 | 过滤器 | 拦截器 |
---|---|---|
使用范围 | 是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以来,遇到的异常主要是两种
- 预期异常:通过捕获异常进而获取异常信息(try …catch…)
- 运行时异常RuntimeException:通过规范代码开发、测试等手段减少运行时异常的出现
在SpringMVC框架中,系统产生的异常都可以由框架统一处理,从而返回特定的报错视图或者把错误信息存进日志
系统的Dao、Service、Controller出现异常的时候,都用throw Exception向上抛出,最后Spring前端控制器交由异常处理器进行处理
1、SpringMVC异常处理的方式
- 使用Spring MVC提供的简单异常处理器SimpleMappingExceptionResolver
- 实现Spring的异常处理接口HandlerExceptionResolver 自定义自己的异常处理器
1.1、简单异常处理器SimpleMappingExceptionResolver
简单异常处理器的使用就很简单了,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; } }
② 配置异常处理器
<bean id="exceptionResolver" class="com.kang.exception.MyExceptionResolver"/>
③ 编写异常页面
④ 测试异常跳转
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/95012.html