# springmvc_09_exception **Repository Path**: Yunios/springmvc_09_exception ## Basic Information - **Project Name**: springmvc_09_exception - **Description**: springmvc_09_exception - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2019-02-12 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README JAVAWEB项目的异常处理 如果没有在web的应用中做异常处理,那么异常就会抛给web容器,如果web容器也没有处理,则会将异常信息全部显示到页面 * 体验不好 * 用户看不懂这个异常是啥东西 容器怎么处理异常 * 在web.xml配置文件里面配置 异常对应的异常代码(404) 或者java异常类型 (java.lang.NullPointerException)以及他们对应的异常页面 * 制作对应的异常页面 注意: a:异常代码和java异常类型配置的区别 error-code exception-type b:对应的jsp错误页面 isErrorPage = "true" c:具体的异常信息可以从javax.sevlet.jsp.ErrorData对象获取,把异常信息以参数名称为errorData绑定 在PageContext域 d:容器可以处理一般的异常,但是对于一些自定义的异常处理不了 SpringMVC怎么处理异常 SpringMVC为了将所有异常处理从各个业务逻辑中解耦出来,提供了统一的异常处理解决方案,有几种不同的处理方式 1:@ExceptionHandler注解 * 使用@ExceptionHandler注解在controller控制类里面增加一个处理异常的方法 * springmvc.xml是注解驱动 * 当当前controller类的方法出现异常时,会被使用了@ExceptionHandler注解的方法捕获,进行下一步 的异常处理 注意: 如果存在多个@ExceptionHandler注解的方法,则进入离异常类型最近的方法 总结:这种捕获异常的方式可以针对本类中每个方法可能出现的异常进行单独捕获 ,但是对于我们的代码有侵入性 2:SpringMVC所有的异常处理方式都是实现 了HandlerExceptionResolver接口 * 自定一个异常处理类 ,来实现HandlerExceptionResolver接口 * 注册异常处理类 总结:这种异常处理方式集成简单,扩展方便,无侵入 3:springMVC提供了简单的异常处理器SimpleMappingExceptionResolover * 在springmvc.xml配置文件配置SimpleMappingExceptionResolover * 配置异常的默认错误页面,异常信息的返回变量名,异常类型与异常处理页面的对应关系 总结:这种异常处理方式集成简单,扩展方便,无侵入,可以通过更改配置文件灵活的增加和更改异常类型 总结: 几种异常处理方式可以共存,当各种处理方式同时存在的时候,出现异常的方法会就进寻找当前controller类里面的异常注解方法 然后在去寻找自定义异常或者sprignMVC提供的简单异常处理器,一旦找到了对应的异常处理类,则返回,不再往下查找. ajax?? * 首先判断出是ajax请求 * 返回一个包含json信息的页面 * ajax函数判断接收异常信息 json error validation operatorMessage