SSM——SpringMVC笔记3——拦截器和异常处理

9 篇文章 0 订阅
3 篇文章 0 订阅

SpringMVC拦截器

拦截器(interceptor)的作用

  • SpringMVC的拦截器类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理。
  • 将拦截器按一定的顺序联结成一条链,这条链称为拦截器链(interceptor Chain)。在访问被拦截的方法或字段,拦截器链中的拦截器就会按其之前定义的顺序被调用。拦截器也是AOP思想的具体体现。

拦截器快速入门

  1. 创建拦截器类实现HandlerInterceptor接口
 public class MyInterceptor1 implements HandlerInterceptor {
           //在目标方法执行之前执行
           @Override
           public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
               System.out.println("preHandle.....");
               return true;//如果返回值为false,则后面的不执行,被拦截了
           }
           //在目标方法执行之后 视图对象返回之前执行
           @Override
           public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {
              System.out.println("postHandle.....");
           }
           //在流程都执行完毕后 执行
           @Override
           public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {       System.out.println("afterCompletion....");
           }
       }
  1. 配置拦截器 spring-mvc.xml
  <!--配置拦截器-->
           <mvc:interceptors>
               <mvc:interceptor>
                   <mvc:mapping path="/**"/><!--对哪些资源进行拦截-->
                   <!--配置哪些资源排除拦截操作-->
                   <mvc:exclude-mapping path="/user/login"/>
                   <bean class="com.zyh.interceptor.MyInterceptor1"></bean>
               </mvc:interceptor>
           </mvc:interceptors>
  1. 测试拦截器的拦截效果

SpringMvc异常处理

异常处理两种方式

  • 使用SpringMVC提供的简单异常处理器SimpleMappingExceptionResolver
   <!--配置简单的异常处理器-->
      <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
      	<property name="defaultErrorView" value="error"/><!--默认错误视图-->
          <property name="exceptionMappings">
          	<map>
              	<entry key="com.zyh.exception.MyException" value="error"/><!--异常类型和错误视图-->
                  <entry key="java.lang.ClassCastException" value="error"/>
              </map>
          </property>
      </bean>
  • 使用Spring的异常处理接口HandlerExceptionResolver自定义自己的异常处理器
    • 创建异常处理器类实现HandlerExceptionResolver
   /**
         * 异常处理器
         */
        public class SysExceptionResolver implements HandlerExceptionResolver {
            /**
             * 处理异常的业务逻辑
             * @param httpServletRequest
             * @param httpServletResponse
             * @param o
             * @param e
             * @return
             */
            @Override
            public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
               //获取异常对象
                SysException ex = null;
                if (e instanceof SysException){
                    ex = (SysException)e;
                }else {
                    e = new SysException("系统正维护。。。");
                }
        
                //创建ModelAndView
                ModelAndView mv = new ModelAndView();
                mv.addObject("errorMsg",ex.getMessage());
                mv.setViewName("error");//跳转到异常页面
                return mv;
            }
        }
  • 配置异常处理器
 			<!--配置异常处理器-->
            <bean id="sysExceptionResolver" class="com.exception.SysExceptionResolver">
        
            </bean>
  • 编写异常页面
  		@Controller
        @RequestMapping("/user")
        public class UserController {
            @RequestMapping("/testException")
            public String testException() throws SysException {
                System.out.println("testException执行了");
                //模拟异常
                try {
                    int a = 10/0;
                } catch (Exception e) {
                    e.printStackTrace();
                    //抛出自定义异常信息
                    throw new SysException("查询所有用户出错率");
                }
                return "success";
            }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值