背景是这样:action类有许多人参与开发,用于处理和实现不同的功能模块,action类均实现IAction接口,这个接口只有一个execute()方法,所有action类都由控制器统一调用。由于不同的action类可能会抛出不同的异常,我想在接口上声明抛出Exception,这样所有action类无论抛什么异常都可以了,而且所有异常包括RuntimeException都可以在控制器中捕获,可针对各种可能的异常分别统一处理,例如:IAction action=(IAction)ctx.getBean(beanName);
try{
  action.execute(request,resphone);
}catch(XXException e){
  //处理
}catch(XXXException e){
  //处理
}catch(XXXXXexception e){
  //处理
}catch(Exception e){
  //处理
}实际运行时,自然希望永远不发生异常,我们这个web应用捕获异常我想只有两个目的,一是记录日志供检查,二是转向友好的错误页面提示用户,因此任何异常均需要被捕获并完成这两个目的。在许多帖子讲到使用RuntimeException,这样接口和类都不需要显式写throws了,但如果不写,所有action中可能出现的异常都需要转换为RuntimeException抛出,而在控制器中只能捕获RuntimeException(如捕获其它的CheckedException类型异常通不过编译)。另外,应该允许action内自行处理特定异常,但仍然要实现记录日志和友好错误提示,我想可以提供工具类一个方法让action开发者调用。总之是不允许在浏览器冒出一个堆栈打印的RuntimeException页面。