SpringMVC异常处理
1.1、异常处理的思路
系统中异常有两类:预期异常和运行时异常,前者通过捕获异常从而获取异常信息,后者主要通过规范代码开发,测试等手段减少运行时异常的发生
1.2、异常处理的两种方式
- 使用SpringMVC提供的简单异常处理器SpringMappingExeceptionResolver
- 实现Spring的异常处理接口HandleExceptionResolver
1.3、简单异常处理器SpringMappingExeceptionResolver
<!--配置异常处理器-->
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="defaultErrorView" value="error"/>
<property name="exceptionMappings">
<map>
<entry key="java.lang.ClassCastException" value="erro1"/>
<entry key="" value="erro2"/>
</map>
</property>
</bean>
</beans>
error时对应的error.jsp文件
再第二个entry的key下我没写东西,是因为这个异常时自定义异常,需要自定义异常文件的源地址(我没创建)
1.4、自定义异常处理步骤
- 创建异常处理器实现HandleExceptionResolver
- 配置异常处理器
- 编写异常页面
- 测试异常跳转
再mvc包创建文件Exception.MyException
package com.atguigu.mvc.Exception;
public class Myexception extends Exception{
}
在mvc包里在创建resolver.MyExceptionResolver文件
package com.atguigu.mvc.resolver;
import com.atguigu.mvc.Exception.Myexception;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class MyExceptionResolver implements HandlerExceptionResolver {
public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
/*
参数Exception:异常对象
返回值ModelAndView:跳转到错误视图信息
*/
ModelAndView modelAndView=new ModelAndView();
if(ex instanceof Myexception){
modelAndView.addObject("info","自定义异常");
}else if(ex instanceof ClassCastException){
modelAndView.addObject("info","类型转换异常");
}
modelAndView.setViewName("errro");
return modelAndView;
}
}
配置文件
<!--自定义异常处理器-->
<bean class="com.atguigu.mvc.resolver.MyExceptionResolver"/>