(六)Struts的简单异常处理

一、异常的分类

 1.1  struts中的异常概念

  • Struts的声明式异常: 不处理异常,将异常交给struts框架来处理。

 1.2 局部异常

  • 局部异常:异常定义在Action里,异常处理只在这个Action中有效,其他action如果出现了异常则无法处理到。
  • struts.xml 中《action》的子标签<exception-mapping result="" exception=""></exception-mapping>异常映射可以用来处理异常,如果产生异常可以将用户引导到异常处理页面。其中result表示异常处理页面的名称,与result标签一起用。exception表示异常的类型,比如java.io.FileNotFoundException这是文件没有找到时的异常类型。
  • 示例:
    <package name="default" namespace="/exception" extends="struts-default">
        <action name="exception_1" class="action.ErrorAction">
            <result name="index_2">/index_2.jsp</result>
            
            <exception-mapping result="error_2" exception="java.io.FileNotFoundException"></exception-mapping>
            <result name="error_1">/error_1.jsp</result>
    
        </action>
    </package>

 解析: 当URL=“工程名/exception/exception_1”的时候,执行ErrorAction类对象,如果这个Action正确执行,则跳转到index_2.jsp这个页面,如果出现了文件没有找到异常(java.io.FileNotFoundException),就把跳转到<result>标签中的的error_1.jsp页面。

 

  • 一般来说,如果页面可能产生的异常比较多的时候,在struts.xml中异常映射就需要定义很多个,此时可以先定义几个具体的异常,然后对于其他异常可以合在一起处理,即

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

  • 示例:
 <package name="default" namespace="/exception" extends="struts-default">
        <action name="exception_1" class="action.ErrorAction">
            <result name="index_2">/index_2.jsp</result>
            
            <exception-mapping result="error_2" exception="java.io.FileNotFoundException"></exception-mapping>
            <exception-mapping result="error_1" exception="java.lang.ArithmeticException"></exception-mapping>
            <exception-mapping result="error_common" exception="java.lang.Exception"></exception-mapping>
<result name="error_1">/error_1.jsp</result> <result name="error_2">/error_2.jsp</result> <result name="error_common">/common.jsp</result> </action> </package>

解析:  如果Action出现java.io.FileNotFoundException或者java.lang.ArithmeticException错误,就会跳转到相应的页面,如果不是这两个异常,则跳转到common.jsp页面。

  •  注意: 如果Action里有多个异常,那么当发现第一个异常的时候,就会跳转异常处理页面,这个Action接下去的异常将不会处理。

 


 

 

  1.2  全局异常

  • 定义在package里,使用<global-exception-mappings>,这个package里的所有action都可以使用。其他包要想使用,继承这个包即可。
   <package name="default" namespace="/exception" extends="struts-default">
            <global-results>
             <result name="error_1">/error_1.jsp</result>
            <result name="error_2">/error_2.jsp</result>
            <result name="error_common">/common.jsp</result>
        </global-results>
        
        <global-exception-mappings>
            <exception-mapping result="error_2" exception="java.io.FileNotFoundException"></exception-mapping>
            <exception-mapping result="error_1" exception="java.lang.ArithmeticException"></exception-mapping>
            <exception-mapping result="error_common" exception="java.lang.Exception"></exception-mapping>
        </global-exception-mappings>
        
        <action name="exception_1" class="action.ErrorAction">
            <result name="index_2">/index_2.jsp</result>
        </action>
    </package>
  • 注意:1.<global-exception-mappings> 标签里不能定义<result name=""></result>

      2.<global-results> 要定义在<global-exception-mappings>之前。

      3.<global-exception-mappings>里的<result>对应的是<global-results>里的<result>里的name。

 

posted @ 2017-03-16 14:41  shyroke、  阅读(144)  评论(0编辑  收藏  举报
作者:shyroke 博客地址:http://www.cnblogs.com/shyroke/ 转载注明来源~