1.业务异常类
1.所以业务异常类派生于BusinessException基类。
2.原则上,要进行相同处理的异常分为一类,用ERROR_CODE标识不同。
3.出错信息统一写在errors.properties,以ERROR_CODE为主键,支持i18N,由基类提供默认的getMessage()函数。
参考BussinessException.java
2.Servlet规范里的异常控制
2.1按error-code统一定义错误页面
<error-page>
<error-code>404</error-code>
<location>/404.jsp</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/error.jsp</location>
</error-page>
2.2按异常类型定义单独错误页面
<error-page>
<exception-type>org.sprngside.bookstore.UserNotFound</exception-type>
<location>/userNotFound.jsp</location>
</error-page>
2.3 在JSP里单独定义错误页面
<@ errorPage="error.jsp">
3.Spring MVC里的异常控制
spring-mvc可在xxx-serverlet.xml里定义default和 按Excepiton类型影射的错误页面, 和Servlet规范比,主要作了Spring特色的JSP路径转向和日志记录.参见bookstore-servlet.xml
<bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="defaultErrorView" value="/error.jsp"/>
<property name="exceptionMappings">
<props>
<prop key="org.springside.framework.base.BusinessException">/businessError.jsp</prop>
</props>
</property>
</bean>
4. error.jsp的处理
error.jsp会同时处理jsp,servlet,和spring抛过来的异常
其中jsp的异常在exception 变量中.
servlet的异常在(Exception)request.getAttribute("javax.servlet.error.exception")
spring的异常在(Exception) request.getAttribute("exception")
使用 (String) request.getAttribute("javax.servlet.error.request_uri")获得 request_uri
使用 logger.error(exception.getMessage(), exception); 记录整个异常栈
5. spring配置
</bean> <!-- 异常处理类 --> <bean id="exceptionHandler" class="org.jeecgframework.core.common.exception.MyExceptionHandler" /> <!-- 系统错误转发配置[并记录错误日志] --> <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> <property name="defaultErrorView" value="500"></property> <!-- 默认为500,系统错误(error.jsp) --> <property name="defaultStatusCode" value="404"></property> <property name="statusCodes"><!-- 配置多个statusCode --> <props> <prop key="error">500</prop> <!-- error.jsp --> <prop key="error1">404</prop> <!-- error1.jsp --> </props> </property> <property name="exceptionMappings"> <props> <!-- 这里你可以根据需要定义N多个错误异常转发 --> <prop key="java.sql.SQLException">dbError</prop> <!-- 数据库错误(dbError.jsp) --> <prop key="org.springframework.web.bind.ServletRequestBindingException">bizError</prop> <!-- 参数绑定错误(如:必须参数没传递)(bizError.jsp) --> <prop key="java.lang.IllegalArgumentException">bizError</prop> <!-- 参数错误(bizError.jsp) --> <prop key="org.springframework.validation.BindException">bizError</prop> <!-- 参数类型有误(bizError.jsp) --> <prop key="java.lang.Exception">unknowError</prop> <!-- 其他错误为'未定义错误'(unknowError.jsp) --> </props> </property> </bean>
BusinessException.java
public class BusinessException extends RuntimeException { private static final long serialVersionUID = 1L; public BusinessException(String message){ super(message); } public BusinessException(Throwable cause) { super(cause); } public BusinessException(String message,Throwable cause) { super(message,cause); } }
MyExceptionHandler.java
import java.io.IOException; import java.io.PrintWriter; import java.util.HashMap; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.log4j.Logger; import org.jeecgframework.core.common.model.json.AjaxJson; import org.jeecgframework.core.util.ExceptionUtil; import org.springframework.stereotype.Component; import org.springframework.web.servlet.HandlerExceptionResolver; import org.springframework.web.servlet.ModelAndView; /** * spring mvc异常捕获类 * */ @Component public class MyExceptionHandler implements HandlerExceptionResolver { private static final Logger logger = Logger .getLogger(MyExceptionHandler.class); public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { String exceptionMessage = ExceptionUtil.getExceptionMessage(ex); logger.error(exceptionMessage); Map<String, Object> model = new HashMap<String, Object>(); model.put("exceptionMessage", exceptionMessage); model.put("ex", ex); return new ModelAndView("common/error", model); } }
相关推荐
unity 捕捉异常和移动设备崩溃Android
安卓捕获本地异常自我调试方案,通过继承Application 获得全局捕获权限,拿到Exception捕获APP发出的崩溃日志信息,在不集成第三方统计分享下自我调试开发,实现敏捷开发的第一个步奏!
描述了处理异常的解决方案 错误和异常的处理 捕获异常 System.Exception属性 嵌套的try块 用户自定义的异常类
异常捕获机制 C# 1.示意图 2.异常捕获机制,代码: 3.异常捕获机制,结果: 4.求几周,剩余几天?代码: 5.结果: 6.求几月几周零几天 设一个月30天 代码: 7.结果: 您可能感兴趣的文章:C#程序异常关闭时的...
Spring Cloud Gateway的全局异常处理 Spring Cloud Gateway中的全局异常处理不能直接用@ControllerAdvice来处理,通过跟踪异常信息的抛出,找到对应的源码,自定义一些处理逻辑来符合业务的需求。 网关都是给接口做...
主要介绍了Spring异常捕获且回滚事务解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
异常是不可控的,会影响最终的呈现结果,但是我们有充分的理由去做这样的事情。 1. 增强用户体验; 2. 远程定位问题; 3. 未雨绸缪,及早发现问题; 4. 无法复线问题,尤其是移动端,机型,系统都是问题; 5. 完善的...
SSH异常和日志处理方案.
这个可能也是用于捕获异常,而且比较神奇的是,这个捕获到异常以后不会导致程序的退出,而是程序能够正常运行! 可以抛出自定义数值异常,由catch_int/catch_eq_int接收 可以抛出最后一次异常,让上层错误处理器处理...
前言:上篇C#进阶系列——WebApi接口传参不再困惑:传参详解介绍了WebApi参数的传递,这篇来看看WebApi里面异常的处理。关于异常处理,作为程序员的...一、使用异常筛选器捕获所有异常 我们知道,一般情况下,WebApi作
为了更好的 完善,提升,B/S架构系统的性能和实用性,系统...MQ数据适配,解析,校验,托管,异常捕获,为使用者提供两种方案,监听器模式和责任链模式并提供出 crud接口 使用者只需要按自己的需求同步到其它容器中即可
当APP出现Java异常、native异常和ANR时需要重启当前APP。 解决方案: 使用爱奇艺的xCrash框架进行捕获并重启。 xCrash GitHub地址: https://github.com/iqiyi/xCrash/blob/master/README.zh-CN.md 步骤一: 在...
怎样捕获代码中的所有异常? 解决方案 想要捕获所有的异常,可以直接捕获 Exception 即可: try: ... except Exception as e: ... log('Reason:', e) # Important! 这个将会捕获除了 SystemExit 、 ...
我们也许可以在所有它们有可能发生的地方去捕获它们,但这确实是很坏的解决方案。但在有些情况下,我们又必须在一些未捕获的异常发生时做一些事情,像释放资源、让程序离开错误状态等等。 这里通过ThreadG
1. JS脚本边存着语法错误 2. JS脚本在运时发错误 2. window.onerror案 1. 没法捕捉try,catch块,当前代码块有语法错误,JS解
即:APP在运行的过程中崩溃了,这种异常我们就成为运行时异常(比如空指针),当APP崩溃的时候,给用户的体验很不好,所以我们应该捕获这个异常进行处理(弹个界面啦),然后更好的方案是获取到这个异常后,把他传回...
所以一个合格的异常捕获组件也要能达到以下目的:支持在crash时进行更多扩展操作,如:1.打印logcat和应用日志2.上报crash次数3.对不同的crash做不同的恢复措施4.可以针对业务不断改进和适应其实3个方案在Android...
运行于世界各地的众多浏览器的大型客户端web应用会面临异常丢失的问题,而捕获它就有可能修复 bug并赢得用户。 当处理跨浏览器和设备的问题时,接收这些异常信息是很重要的,因为你的应用可能在你的开发机器上运行得...
通常来说,处理JS异常的方案有两种:try…catch捕获 和 [removed]捕获。以下就两种方案分别分析各自的优劣。 虽然语法错误本应该在开发构建阶段使用测试工具避免,但难免会有马失前蹄部署到线上的时候。 try…catch...