Struts中的异常处理机制 
  
Struts中的异常处理,必须利用Struts内置的机制(只针对action的execute)和标准的servlet机制相结合,才能完美的实现。 
  
1.         首先通过在配置文件中定义全局异常处理或者特定于action的异常处理句柄 
  
2.         然后在process中执行action的excute时遇到异常就读取其异常处理配置,并生成相应的ExceptionConfig对象。若ExceptionConfig为null(即此action没有配置异常处理),则直接抛出IoException或者ServletException到总控的dopost和doget,由容器负责处理(此时将会用到在web.xml中定义的异常处理对象)。 
  
3.         根据ExceptionConfig生成ExceptionHandler,然后执行其execute方法。在execute中将产生actionerrors(包含由配置生成的actionerror列表)对象,并放到相应的scope(默认为request)中(以Globals.EXCEPTION_KEY为健),然后转到错误处理叶面,以<html:error>显示。 
  
4.         在form bean 的验证方法中产生的action errors也是以Globals.EXCEPTION_KEY为健,但是存在request中。 
  
5.         struts的异常处理利用了其内置的资源文件和国际化机制。由于生成的actionerror是配置exception时的key和exception.getMessage()键值对,所以必须在message中放入足够的信息,我们无法在发生异常时,得到异常本身的引用,这或许是struts 的不足之处! 
  
6.        在扩展struts总控时发现process()方法抛出的是IOException, ServletException,这不是明摆着不让我们扩展此方法吗?扩展时有新的异常难道都得包装成IOException, ServletException吗?不明白作者的深意?  
 
  |