web应用设计 - 异常处理

本文介绍了一种减少Web应用中异常捕获代码的方法,通过在DAO、Service和Action层声明抛出异常,最后由Struts2的拦截器统一处理,使业务逻辑更清晰。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

每每想起自己之前所在的一个公司,代码中导出充斥着try-catch、throw 这些代码,就觉得这个公司对不起他自己的名声。

呵呵,后来释然了,好多大公司其实代码都是从无到有的过程,只是后来想重构的时候,却发现工作量巨大,所以就放弃了。可能当时的环境,技术还没有那么纯熟,诸多因素吧,造就了今天我们觉得繁杂的代码。

今天就把自己多年的实践经验和大家分享一下:如何在web应用设计中,少些异常捕获相关代码,多关注业务逻辑。

我们以常见的三层设计为例,action、service、dao,看看如何在三层java代码中规避异常捕获代码。

假设我们的dao中,有一个异常,那我们直接在方法声明中抛出即可

method () throws Exception{
// 有异常的代码
}

我们再service中也不直接处理异常,也是在方法声明中抛出异常即可。
method () throws Exception{
// 有异常的代码
}

我们在action中的调用方法声明中抛出异常即可。
method () throws Exception{
// 有异常的代码
}

好吧,这样一来,是不是在我们的方法体中,没有一行处理异常的代码,这样的方法只关注业务逻辑,是不是一目了然?

好戏还在上演:各层只管抛出异常,那究竟谁来捕获并给客户反馈呢?

这时候,我们可以使用struts2的拦截器了。如果不会拦截器代码,请百度。

拦截器代码中,有一个方法专门关注调用的action方法,我们可以在此方法中,对调用action方法的这个操作进行try=catch捕获,然后判断异常类型。

try{
// 执行action方法
}
catch(Exception e){
// 判断异常类型
if(e instanceOf NullPointerException){
// 根据需要,确定是否给用户提示,或者记录到异常表
}else if(e instanceOf ClassNotFoundException){
// 根据需要,确定是否给用户提示,或者记录到异常表
}else if(e instanceOf ArithmeticException){
// 根据需要,确定是否给用户提示,或者记录到异常表
}
}

总结,上面提到的设计,关键是有一个action的拦截器,每当action的方法执行的时候,拦截器都可以知道,这就是AOP思想。
正式基于struts2提供的拦截器,让我们更好的设计异常处理。

以上是个人经验之谈,大家觉得有不合理的地方,拍砖即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值