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"这个主题聚焦于如何在Unity引擎中有效地管理和处理异常,以及如何针对Android设备上的游戏崩溃进行调试。下面我们将深入探讨相关知识点。 一、Unity异常处理基础 在Unity中,...
在实际应用中,为了提高用户体验,还可以结合崩溃报告库,如Android的ACRA(Application Crash Report for Android)或iOS的Fabric的Crashlytics,它们提供了一套完整的异常捕获、本地存储、上传和分析的解决方案。...
这一步是实现本地异常捕获的关键。 在描述中提到的“SD卡捕捉异常”是指我们将捕获到的异常信息保存到SD卡上,以便于后续的分析和调试。Android提供了`Environment.getExternalStorageDirectory()`方法来获取SD卡的...
以下是一些常见的Java异常及其处理方案: 1. **`java.lang.NullPointerException`**: 当尝试访问或操作一个null引用的对象时,会抛出此异常。预防措施包括在使用对象前确保其已被正确初始化,以及在可能的情况下...
"App全局异常捕捉处理工具类"就是为了帮助开发者有效地管理和处理应用程序中的各种异常情况,确保程序的稳定性和用户体验。通过使用这样的工具类,开发者可以避免因未捕获的异常导致的程序崩溃,从而减少用户流失和...
通过创建自定义切面和后置通知,可以捕获任何未被特定控制器方法处理的异常,并将这些异常信息存入数据库,提供了一种高效且全面的异常管理解决方案。这个实践对于构建健壮的、有弹性的Web应用具有很高的参考价值。
- 除了自定义解决方案,还可以利用第三方库如`Fabric`的`Crashlytics`或者`Bugsnag`等,它们提供了强大的异常捕获和分析服务,不仅可以将异常信息发送到服务器,还能提供详细的崩溃报告和用户反馈。 6. **...
### 异常处理的解决方案 #### 错误与异常处理概览 在软件开发中,错误和异常处理是一项至关重要的任务。无论编程技术多么高超,编写能够妥善处理潜在错误的程序都是必不可少的。错误可能源于多种原因,比如权限...
全局异常捕获就是一种机制,它允许开发者统一处理应用程序中的所有未被捕获异常,无论是主线程还是子线程。本教程将深入探讨如何在Android中实现全局异常捕获。 首先,我们来看`CrashHandler.java`这个文件。这是一...
总的来说,无论是在同步还是异步调用场景下,理解和正确处理WCF中的异常捕获是保证服务可靠性和客户端健壮性的关键。通过使用`FaultContract`,我们可以提供更详细的错误信息,使得客户端能够更有效地处理错误状况。...
前端异常捕获可以通过两种方式实现: - **全局捕获**:使用全局监听器集中捕获异常。例如,通过`window.onerror`或框架提供的错误处理接口(Vue、React等)。 - **单点捕获**:针对特定情况设置捕获逻辑,作为全局...
Spring 异常捕获且回滚事务解决方案 在 Spring 框架中,异常捕获和回滚事务是非常重要的概念。今天,我们将讨论如何在 Spring 中捕获异常并回滚事务。 首先,让我们了解一下 Spring 的事务机制。当我们在 Spring ...
本文将深入探讨C#中基于IO Completion Ports (IOCP)的高并发服务器实现,以及如何结合log4net进行日志管理和SEH异常捕获机制,以确保程序的稳定性和可维护性。 首先,IOCP是Windows操作系统提供的一种高级I/O模型,...
在这个场景中,"Android应用异常信息捕捉,邮件发送给开发者"是一个实用的解决方案,它利用了`UncaughtExceptionHandler`来实现。 `UncaughtExceptionHandler`是Android系统提供的一个接口,用于处理未被捕获的异常...
4. **多异常捕获**:可以使用`catch`块的括号内列出多个异常类型,用逗号分隔,这样可以捕获多种类型的异常。 5. **异常链**:当一个异常在处理另一个异常时被抛出,可以创建异常链,显示完整错误轨迹。 6. **...
在设计异常解决方案时,有几个关键点需要注意,这些规范旨在提高代码的健壮性、可读性和维护性。首先,要避免返回错误码作为错误报告的主要方式,因为异常提供了更丰富的上下文信息,包括异常类型和异常信息。当方法...
这篇博客“后端异常统一处理解决方案”主要探讨了如何在Spring Boot、SSM(Spring、Spring MVC、MyBatis)框架中有效地管理和处理异常,提供了一种优化的方法来提升应用程序的健壮性。 首先,Spring Boot以其简洁的...
总之,"android 异常捕获源码.zip"中的ACRA项目提供了全面的Android异常处理解决方案,对于提高应用的质量和用户体验有着重要的价值。开发者不仅可以直接使用ACRA,也可以借鉴其设计思想,为自己的应用构建更加完善...
异常捕获机制 C# 1.示意图 2.异常捕获机制,代码: 3.异常捕获机制,结果: 4.求几周,剩余几天?代码: 5.结果: 6.求几月几周零几天 设一个月30天 代码: 7.结果: 您可能感兴趣的文章:C#程序异常关闭时的...
全局异常处理方案旨在确保系统在出现异常时能提供一致的反馈,同时避免异常传播导致服务崩溃。以下是一个具体的微服务下全局异常处理方案: 1. **新建基础工程**: 新建名为`jhjcn-common-base`的基础工程是为了...