SpringMVC拦截器和异常处理机制

守听  金牌会员 | 2023-7-25 11:06:31 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 901|帖子 901|积分 2703

SpringMVC拦截器和异常处理机制

概念

SpringMVC拦截器类似于过滤器,用于进行预处理和后处理
将拦截器按照一定顺序连接成一条链,就是拦截器链
拦截器和过滤器区别


拦截器的快速入门


  • 创建拦截器类实现HandlerInterceptor接口
  • 配置拦截器
    1.     <mvc:interceptors>
    2.         <mvc:interceptor>
    3.             <mvc:mapping path="/**/"/>
    4.             <bean ></bean>
    5.         </mvc:interceptor>
    6.     </mvc:interceptors>
    复制代码
  • 测试拦截器的拦截效果
    1. package com.myspring.interceptor;
    2. import org.springframework.web.servlet.HandlerInterceptor;
    3. import org.springframework.web.servlet.ModelAndView;
    4. import javax.servlet.http.HttpServletRequest;
    5. import javax.servlet.http.HttpServletResponse;
    6. public class MyHandlerInterceptor implements HandlerInterceptor {
    7. //    覆盖三个方法
    8. //在目标方法(控制类中对应方法)执行前执行
    9.     @Override
    10.     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    11.         String param = request.getParameter("param");
    12.         if("yes".equals(param)){
    13.             //        返回值为false不放行,true放行
    14.             return true;
    15.         }
    16.         else {
    17.             request.getRequestDispatcher("/error.js").forward(request,response);
    18.             return  false;
    19.         }
    20.     }
    21. //在目标方法执行之后,视图返回之前执行
    22.     @Override
    23.     public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
    24.         modelAndView.addObject("name","xiaoming");
    25.     }
    26. //在整个流程都执行完毕后执行
    27.     @Override
    28.     public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
    29.         
    30.     }
    31. }
    复制代码
三个方法的执行:在配置文件中依次配置两个拦截器分别为1和2,则执行顺序是:1的 preHandle >2的preHandle>2的postHandle>1的postHandle>2的afterCompletion>1的afterCompletion
SpringMVC异常处理机制

如图:

异常处理的两种方式:


  • 使用springmvc通过的简单异常处理器SimpleMappingExceptionResolver
  • 使用Spring的异常处理接口HandlerExceptionResolver自定义自己的异常处理器
SimpleMappingExceptionResolver

主要需要进行相应异常与视图的映射配置
在springmvc的配置文件中:
  1.     <mvc:interceptors>
  2.         <mvc:interceptor>
  3.             <mvc:mapping path="/**/"/>
  4.             <bean ></bean>
  5.         </mvc:interceptor>
  6.     </mvc:interceptors>                                       
复制代码
HandlerExceptionResolver自定义异常处理器


  • 创建异常处理器类实现HandlerExceptionResolver
    1. public class MyExceptionResolver implements HandlerExceptionResolver {
    2.     @Override
    3.     //参数Exception是异常对象,返回值是你要跳转的错误页面
    4.     public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
    5.         ModelAndView modelAndView = new ModelAndView();
    6.         if(e instanceof  Exception){
    7.         }
    8.         modelAndView.setViewName("error.jsp");
    9.         return modelAndView;
    10.     }
    11. }
    复制代码
  • 配置异常处理器
    [code][/code]
  • 编写异常页面

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

守听

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表