`
stone02111
  • 浏览: 212432 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

异常捕获方案

    博客分类:
  • Java
阅读更多

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

    安卓捕获本地异常自我调试方案

    安卓捕获本地异常自我调试方案,通过继承Application 获得全局捕获权限,拿到Exception捕获APP发出的崩溃日志信息,在不集成第三方统计分享下自我调试开发,实现敏捷开发的第一个步奏!

    异常处理的解决方案

    描述了处理异常的解决方案 错误和异常的处理 捕获异常 System.Exception属性 嵌套的try块 用户自定义的异常类

    C#异常捕获机制图文详解

    异常捕获机制 C# 1.示意图 2.异常捕获机制,代码: 3.异常捕获机制,结果: 4.求几周,剩余几天?代码: 5.结果: 6.求几月几周零几天 设一个月30天 代码: 7.结果: 您可能感兴趣的文章:C#程序异常关闭时的...

    Spring Cloud Gateway的全局异常处理

    Spring Cloud Gateway的全局异常处理 Spring Cloud Gateway中的全局异常处理不能直接用@ControllerAdvice来处理,通过跟踪异常信息的抛出,找到对应的源码,自定义一些处理逻辑来符合业务的需求。 网关都是给接口做...

    Spring异常捕获且回滚事务解决方案

    主要介绍了Spring异常捕获且回滚事务解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    js异常捕获

    异常是不可控的,会影响最终的呈现结果,但是我们有充分的理由去做这样的事情。 1. 增强用户体验; 2. 远程定位问题; 3. 未雨绸缪,及早发现问题; 4. 无法复线问题,尤其是移动端,机型,系统都是问题; 5. 完善的...

    SSH异常和日志处理方案(开发人员必备)

    SSH异常和日志处理方案.

    【新】易语言异常捕获,基于东灿大佬的异常捕获模块5-2版本-易语言

    这个可能也是用于捕获异常,而且比较神奇的是,这个捕获到异常以后不会导致程序的退出,而是程序能够正常运行! 可以抛出自定义数值异常,由catch_int/catch_eq_int接收 可以抛出最后一次异常,让上层错误处理器处理...

    C# WebApi 异常处理解决方案

    前言:上篇C#进阶系列——WebApi接口传参不再困惑:传参详解介绍了WebApi参数的传递,这篇来看看WebApi里面异常的处理。关于异常处理,作为程序员的...一、使用异常筛选器捕获所有异常 我们知道,一般情况下,WebApi作

    基于SpringBoot为基础做的Binlog,MQ数据适配,解析,校验,托管,异常捕获,为使用者提供监听器模式和责任链模式

    为了更好的 完善,提升,B/S架构系统的性能和实用性,系统...MQ数据适配,解析,校验,托管,异常捕获,为使用者提供两种方案,监听器模式和责任链模式并提供出 crud接口 使用者只需要按自己的需求同步到其它容器中即可

    Android – java native 异常捕获到本地 – xCrash 简单实现 ,亲测可直接使用

    当APP出现Java异常、native异常和ANR时需要重启当前APP。 解决方案: 使用爱奇艺的xCrash框架进行捕获并重启。 xCrash GitHub地址: https://github.com/iqiyi/xCrash/blob/master/README.zh-CN.md 步骤一: 在...

    Python 捕获代码中所有异常的方法

    怎样捕获代码中的所有异常? 解决方案 想要捕获所有的异常,可以直接捕获 Exception 即可: try: ... except Exception as e: ... log('Reason:', e) # Important! 这个将会捕获除了 SystemExit 、 ...

    Java经验点滴:处理没有被捕获的异常

    我们也许可以在所有它们有可能发生的地方去捕获它们,但这确实是很坏的解决方案。但在有些情况下,我们又必须在一些未捕获的异常发生时做一些事情,像释放资源、让程序离开错误状态等等。  这里通过ThreadG

    前端代码异常监控方案window.onerror 1

    1. JS脚本边存着语法错误 2. JS脚本在运时发错误 2. window.onerror案 1. 没法捕捉try,catch块,当前代码块有语法错误,JS解

    Android 捕获运行时异常详解

    即:APP在运行的过程中崩溃了,这种异常我们就成为运行时异常(比如空指针),当APP崩溃的时候,给用户的体验很不好,所以我们应该捕获这个异常进行处理(弹个界面啦),然后更好的方案是获取到这个异常后,把他传回...

    Android平台Native代码的崩溃捕获机制及实现

    所以一个合格的异常捕获组件也要能达到以下目的:支持在crash时进行更多扩展操作,如:1.打印logcat和应用日志2.上报crash次数3.对不同的crash做不同的恢复措施4.可以针对业务不断改进和适应其实3个方案在Android...

    使用Raygun来自动追踪AngularJS中的异常

    运行于世界各地的众多浏览器的大型客户端web应用会面临异常丢失的问题,而捕获它就有可能修复 bug并赢得用户。 当处理跨浏览器和设备的问题时,接收这些异常信息是很重要的,因为你的应用可能在你的开发机器上运行得...

    JavaScript代码异常监控实现过程详解

    通常来说,处理JS异常的方案有两种:try…catch捕获 和 [removed]捕获。以下就两种方案分别分析各自的优劣。 虽然语法错误本应该在开发构建阶段使用测试工具避免,但难免会有马失前蹄部署到线上的时候。 try…catch...

Global site tag (gtag.js) - Google Analytics