Spring入门(5)-SpringMVC中的拦截器和异常如何处理

1. 拦截器

概念:Springmvc中的拦截器,类似于Servlet中的过滤器Filter,用于对处理器进行预处理和后处理;
拦截器里面可以写很多的操作,比如重定向,请求转发等;

1.先要实现自定义的拦截器并进行配置

在SpringMVC.xml中的配置:

  <!--对拦截器进行配置-->
    <mvc:interceptors>
        <!--配置拦截器-->
        <mvc:interceptor>
            <!--要配置的具体方法路径,/*代表路径下所有方法都不拦截;这个方法是指controller下的映射地址,
            也就是@RequestMapping的值;-->
            <mvc:mapping path="/acontroller/*"/>
            <!--这个方法和上面的相反,是配置不拦截的具体方法;
            <mvc:exclude-mapping path=""/>
            -->
            <!--配置自定义的拦截器标签-->
            <bean id="newInterceptor" class="cn.dxs.interceptor.NewInterceptor"/>
        </mvc:interceptor>
        <!--如果需要配置多个拦截器,只需要在这后面再次添加一个mvc:interceptor标签就可以了,-->
    </mvc:interceptors>

然后是自定义的拦截器;

public class NewInterceptor implements HandlerInterceptor {
    //一个预处理方法,在Controller执行前,运行;
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("拦截器执行");
        return false;//如果返回是true就是执行下一个拦截器,如果是false就执行controller中的方法;
    }

    @Override//这个方法运行是在controller里面的方法运行之后;在跳转页面之前;
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
    }
    @Override//所有的方法和页面都执行了后,才开始的方法;
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
    }
}

自定义的拦截器,首先需要实现接口HandlerInterceptor ,其次是需要在Spring的配置文件中对其进行配置;然后就是写一个controller方法,这个方法的@RequestMapping地址必须是拦截器mvc:mapping 所对应的;


2. SpringMVC的异常

在SpringMVC中和普通的Java程序一样,也有可能会出现异常,并且要抛出异常,但是如果不进行进一步处理,就有可能像下图一样;

也就是说在没有进行异常的进一步处理,异常就会被直接显示在页面上,这是极其不美观的,这时候就可以用到SpringMVC的异常处理器;

1. 先要创建一个自定义的异常类

自定义一个异常类之后,才能方便接收所有异常的信息,并返回到页面;

public class NewException extends Exception{
    private String message;//创建一个信息属性;

    //创建一个构造方法,保证每次创建异常的时候,能有相应的描述信息;
    public NewException(String message) {
        this.message = message;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }
}


2. 异常处理器的编写和配置

异常处理器必须要继承接口:HandlerExceptionResolver;

public class NewExceptionResolver implements HandlerExceptionResolver {
    @Override
    public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
        //这个方法用来处理异常逻辑;
        //先创建一个自定义异常的对象引用
        NewException exception = null;
        //然后看异常是否是这个自定义异常的当前类或子类;
        if(e instanceof NewException) {
           //由于e是NewException子类,就可以强转类型;
            exception = (NewException) e;
        }else{
            //否则创建NewException对象,对错误进行详细的描述;
            exception = new NewException("系统出现错误!请稍后......");
        }
        //创建一个ModelAndView对象,对值进行传输;
        ModelAndView mv = new ModelAndView();
        //将需要返回的对象放入;
        mv.addObject("exception", exception.getMessage());
        //将需要返回的页面输入;视图解析器会将其解析;
        mv.setViewName("error");
        return mv;
    }
}

写好基本的异常处理器之后还需要在Spring的配置文件里面进行配置,(文件名SpringMVC.xml)

<bean id="newExceptionResolver" class="cn.dxs.exception.NewExceptionResolver"/>
3. 最后编写一个错误的页面,进行返回值的接收;

异常后页面返回的结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

神秘的天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值