SpringMVC拦截器介绍,和异常处理

springMVC拦截器

SpringMVC中拦截器的作用:

SpringMVC的拦截器相当于java web中的filter,对处理器进行预处理和后处理,多个拦截器可以相互连接(简称:连接器链),调用顺序按照定义顺序进行调用,其连接器是在spring核心配置文件进行配置。
其中拦截器与过滤器的区别:
在这里插入图片描述

拦截器的基础实现
1。创建类实现接口handlerinterceptor(有三个方法可以实现)一般是对prehandle()方法进行方法实现,注意返回是否为true
在这里插入图片描述

public class PrivilegeIntercrptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
         System.out.println("prehanle running...");
         return true;
    }
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("postHandle running...");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("afterCompletion running...");
    }
}

2,配置拦截器(我所拦截的是Controller端信息,所以拦截配置实在spring-mvc.xml文件配置的),注意mvc引用<mvc:mapping path="/**"/>和<mvc:exclude-mapping path=""/>拦截地址设置。

<!--配饰拦截器-->
    <mvc:interceptors>
        <mvc:interceptor>
            <!--拦截路径-->
            <mvc:mapping path="/**"/>
<!--            不拦截路径-->
            <mvc:exclude-mapping path="/user/login"/>
            <bean class="com.itheima.interceptor.PrivilegeIntercrptor"/>
        </mvc:interceptor>
    </mvc:interceptors>

3.代码实现

@RequestMapping("/quick23")
@ResponseBody
public ModelAndView quickMethod23() throws IOException, ParseException {
	System.out.println("目标方法执行....");
	ModelAndView modelAndView = new ModelAndView();
	modelAndView.addObject("name","itcast");
	modelAndView.setViewName("index");
	return modelAndView;
}

SpringMVC异常处理

在项目出现错误是会跳出页面错误,如果是完整项目出错会很low,我们可以对异常信息进行页面跳转,虽然无法处理,但是可以提升代码可看性
异常处理一般有两种初一方式,第一种是框架自带的简易处理,第二种是自定义异常处理方式
1.简单异常处理(需要在核心配置文件配置)SimpleMappingExceptionResolver

 <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<!--        默认异常视图-->
        <property name="defaultErrorView" value="index.jsp"/>
        <property name="exceptionMappings">
            <map>
            <!--     com.itheima.exception.MyException为自定义异常  -->
            <entry key="com.itheima.exception.MyException" value="error"/>
<!--                key = 异常类型  value 跳转页面-->
                <entry key="java.lang.ClassCastException" value="error"/>
            </map>
        </property>
    </bean>

2自定义异常处理方式实现接口HandlerExpectionResolver

public class MyExpectionResovler implements HandlerExceptionResolver {
    @Override
    public ModelAndView resolveException(javax.servlet.http.HttpServletRequest httpServletRequest, javax.servlet.http.HttpServletResponse httpServletResponse, Object o, Exception e) {
        //创建ModelAndView对象
        ModelAndView modelAndView = new ModelAndView();
        //处理异常的代码实现
        if (e instanceof ClassCastException){
            modelAndView.addObject("info","类型转换异常");
        }
        modelAndView.setViewName("index.jsp");

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值