9 SpringMVC拦截器和异常处理器

创建拦截器

  • 拦截器作用的时机
  • 流程
    • 浏览器发出http请求
    • 请求首先经过过滤器
    • 再到DispacherSerlvet
    • 再到prehandle(前置拦截器)
    • 再到控制器方法(Handle方法)
    • 再到postHandle(后置拦截器)
    • 最后到afterCompletion(视图渲染之后处理)
  • 创建一个类实现HandlerInterceptor接口和它的三个抽象方法
public class FirstInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        return HandlerInterceptor.super.preHandle(request, response, handler);
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
    }
  • 配置拦截器的bean在springmvc配置文件中,将自己的拦截器配置到里面去
    <!--<mvc:interceptors>
        <ref bean="firstInterceptor" />
        <ref bean="secondInterceptor" />
        bean和ref标签所配置的拦截器默认对DispatcherServlet处理的所有的请求进行拦截
        <bean class="com.atguigu.interceptor.FirstInterceptor"/>
        <ref bean="firstInterceptor" />
		//下面是配置单个拦截器具体的参数
        <mvc:interceptor>
            配置需要拦截的请求的请求路径,/**表示所有请求,/*在这里只表示一层目录的请求
            <mvc:mapping path="/**">
            配置需要排除拦截的请求的请求路径
            <mvc:exclude-mapping path="/abc">
            配置拦截器
            <ref bean="firstInterceptor">
        </mvc:interceptor>
    </mvc:interceptors>-->
  • preHandle方法的返回值是一个布尔类型,表示是否对请求放行

拦截器顺序和某一个pre拦截器返回false

  • 拦截器的执行顺序与我们在SpringMVC中的配置顺序有关(一般默认SpringMVC的默认拦截器放在第一位,如果你的请求是被视图控制器处理了,就是那个写在配置文件里的视图跳转,那么会多一个拦截器在第一位)

  • prehandler方法是和第一条一致

  • posthandler方法是和第一条相反的顺序

  • 如果在拦截器顺序中存在一个prehandler返回是false,那么拦截器就不会放行

异常处理器

  • 处理控制器方法中出现的异常,由于出现异常,控制器方法返回的ModelAndView将会被设置异常信息的打印和异常页面的跳转

使用xml配置异常处理

  • SpringMVC有它的默认异常处理器,打印错误信息跳转错误页面,我们也自己配置,配置如下
    <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
        <property name="exceptionMappings">
            <props>
<!--            key设置要处理的异常,value设置出现该异常时要跳转的页面所对应的逻辑视图-->
                <prop key="java.lang.ArithmeticException">error</prop>
            </props>
        </property>
<!--    设置共享在请求域中的异常信息的属性名,方便跳转页面后打印错误信息-->
        <property name="exceptionAttribute" value="ex"></property>
    </bean>

使用注解实现异常处理

  • 通过@ControllerAdvice来标识一个异常处理控制器
  • 通过@ExceptionHandler来标识该异常处理控制器方法处理的异常
  • 通过传入Throwable形参来获得异常信息
  • 其他的和普通控制器一致
  • 示例
@ControllerAdvice
public class ExceptionController {

    //设置要处理的异常信息
    @ExceptionHandler(ArithmeticException.class)
    public String handleException(Throwable ex, Model model){
        //ex表示控制器方法所出现的异常
        model.addAttribute("ex", ex);
        return "error";
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值