Throwable Error OutOfMemoryError(OOM) Exception RuntimeException NullPointerException:某个为null的对象调用了属性或方法 ClassCastException:强制转换为不匹配的数据类型 ClassNotFoundException:尝试加载的类不存在 IndexOutOfBoundsException:使用List集合时使用了越界的索引 ArrayIndexOutOfBoundsException:使用Array时使用了越界的索引 SQLException:数据库相关异常 IOException:输入输出(读写)异常 FileNotFoundException:文件找不到
NullPointerException
进行处理,那么,无论是项目的哪个环节出现该异常,都会自动按照配置的方式进行处理,而不用每个方法中逐一编写相关代码。
创建项目 DAY07-SpringMVC-Exception
,设计请求路径:
http://SERVER:PORT/PROJECT/ex1.do
http://SERVER:PORT/PROJECT/ex2.do
以上3个请求将分别由 ex1.jsp
、 ex2.jsp
页面显示。
SimpleMappingExceptionResolver
类,用于配置 异常与View组件
的映射关系,如果确定某种异常出现后都会显示某个View组件,则在Spring的配置文件中: <beanclass="xx.xx.SimpleMappingExceptionResolver"> <propertyname="exceptionMappings"> <props> <propkey="异常类的全名">View组件名</prop> <propkey="异常类的全名">View组件名</prop> <propkey="异常类的全名">View组件名</prop> <props> </property> </bean>
经过以上配置后,整个项目运行到任何位置,一旦出现以上配置过的异常,都会转发到匹配的View组件,在项目的各个方法中,不必再处理已经配置过的异常!
这种做法的不足在于:只要是同一种异常,都是转发到同一个View组件,无法根据实际运行状态进行更加细化的处理,例如无法提示是哪个值错误或者某些原因导致的异常。
@ExceptionHandler
,与处理请求的方法类似,可以按需添加方法的参数,需要注意的,必须有 Exception
参数: @ExceptionHandler public String handleException( HttpServletRequest request, Exception ex) { System.out.println(ex.getClass()); if (ex instanceof NullPointerException) { return "error1"; } else if (ex instanceof ArrayIndexOutOfBoundsException) { return "error2"; } else { return "error3"; } }