项目开发中异常处理策略

1.1 异常可以配置友好错误页面

1.1.1 web项目 , 可以配置web.xml

像这样的:当找不到页面的时候,会直接跳转到我们自定义的404.jsp

<error-page>

   <error-code>404</error-code>

   <location>/404.jsp</location>

  </error-page>

1.1.2 如果底层使用的是Hibernate,可以这样配置,struts.xml

<global-exception-mappings>

<exception-mapping result="error" exception="java.lang.Exception"></exception-mapping>

</global-exception-mappings>

<!-- 配置全局结果集 -->

<global-results>

<result name="error">/error.jsp</result>

</global-results>

但是,这样也会出现这样的困惑,这样仅仅是解决了用户的感受,不用在页面打印堆栈信息,但是在进行异常处理,不够灵活和细粒度的控制不够。

1.2 使用代理机制 , web层如果是Struts2 , struts2定义拦截器控制异常

大致可以是这样的:

public class MyExceptionInterceptor extends AbstractInterceptor {
	@Override
	public String intercept(ActionInvocation invocation) throws Exception {
		String result = null;
		try {
			result = invocation.invoke();
		} catch (Exception e) {
			// 进行异常的捕获和处理
			result = "error";
		}
		return result;
	}
}

<interceptor-stack name="privilegeStack">
    <interceptor-ref name="myexception"></interceptor-ref> <!-- 异常拦截器配置到最前端 -->
    <interceptor-ref name="defaultStack"></interceptor-ref>
    <interceptor-ref name="login"></interceptor-ref>
    <interceptor-ref name="privilege"></interceptor-ref>
</interceptor-stack>

在异常拦截器,发生异常后,进行细节处理(记录日志,发送邮件等)

1.3 在企业开发中 , 如果Service 层 和DAO层 , 发生异常,是catch 还是 throws?

在企业中一般会先 catch 这个异常 , 然后转化为一个业务运行异常抛出 。 因为如果加入DAO层报了一个SQL的异常,但是自己不能去解决这个异常(能解决就不用catch了),你选择抛出,到Service去调用这个DAO的时候,Service层更加不知道怎么去解决这个SQL的异常。所以当我们抛出一个具体的业务异常,上层就会更知道如何去处理!

1.4 服务器对于Ajax 和 非Ajax 请求,处理方式不同

非Ajax请求,返回错误页面就可以了

Ajax请求 , 应该是返回json的异常信息

如何来分辨是否为Ajax请求:

// 判断是否为ajax请求
if (ServletActionContext.getRequest().getHeader("X-Requested-With") != null) {
	// ajax 请求
	Map<String, Object> map = new HashMap<String, Object>();
	map.put("result", "failure");
	map.put("msg", "修改密码失败," + e.getMessage());
	ActionContext.getContext().put("map", map);
	result = "errorjson";
    } else {
	result = "error";
	}

<result name="errorjson" type="json">
	<param name="root">map</param>
</result>

代码可能,不适合运行,都是我抽取出来的,主要的是一种异常处理的思路!有什么好的想发,可以多多留言哦!

 

猜你喜欢

转载自blog.csdn.net/xiaozhengN/article/details/82914960
今日推荐