struts2學習筆記(4)---聲明式異常

一、## 實際開發中推薦的異常處理 ##
把所有的異常拋給表現層來處理,即一直向上拋,拋給方法的調用者,而不是使用try/catch語句捕獲異常。在struts中最上面的方法調用者就是action類,則將所有異常拋給action,在xml文件中進行配置後,由struts來處理這些異常。

二、## 源代碼 ##
struts.xml文件的action配置:

<action name="test" class="org.Test.action.TestAction">
            <result name="success">/index.jsp</result>

            <!-- result的聲明放在exception前面 -->
            <result name="error">/error.jsp</result>
            <!-- 發生java.lang.ArithmeticException異常時,跳轉到name爲error的result -->
            <exception-mapping result="error" exception="java.lang.ArithmeticException"/>
</action>

當調用TestAction時,若捕捉到java.lang.ArithmeticException的異常,則會找到name爲error的result,然後跳轉到error.jsp頁面

TestAction.java文件:

package org.Test.action;

import com.opensymphony.xwork2.ActionSupport;

public class TestAction extends ActionSupport {

    @Override
    public String execute() throws Exception {
        int i = 1 / 0;

        return SUCCESS;
    }
}

調用TestAction時,int i = 1/0;會出現java.lang.ArithmeticException異常

error.jsp頁面:

<body>
    服務器忙,稍後再試……
    <br>
    <s:property value="exception" />
    <br>
    <s:property value="exception.message" />
    <br>
    <s:property value="exception.stackTrace" />
    <br>

    <s:debug></s:debug>
</body>

程序異常時提示用戶服務器忙,同時輸出相關的異常信息

在error.jsp頁面的開頭需要導入Struts2 標籤庫,從而可以使用 Struts2的標籤,代碼如下:

<%@ taglib prefix="s" uri="/struts-tags"%>

@taglib表明引用標籤。類似java中的import語句

prefix=”s” 引用的名稱在頁面可以使用,就像java中生成的一個對象名,以後調用的時候直接使用就可以了

uri=”/struts-tags”%表示標籤庫的路徑。相當於import一個具體的類。

三、## 運行結果 ##

運行結果
依次顯示的是異常詳細信息(exception),異常信息(exception.message),異常路徑(exception.stackTrace),以及調試標籤(debug)

點擊debug
點擊debug標籤還可以看到ValueStack的信息

四、## 更多改進 ##
struts.xml文件中加入<global-results><global-exception-mappings> 標籤如下:

<package name="default" namespace="/" extends="struts-default">
        <default-action-ref name="default" />

        <!-- 全局的result,相當於在每個action標籤裏面加入了這個result標籤 -->
        <global-results>
            <result name="error">/error.jsp</result>
        </global-results>

        <!-- 全局的exception-mapping,相當於在每個action標籤裏面加入了這個exception-mapping標籤 -->
        <global-exception-mappings>
            <exception-mapping result="error" exception="java.lang.Exception"/>
        </global-exception-mappings>

        <action name="test" class="org.Test.action.TestAction">
            <result>/index.jsp</result>

            <!-- result的聲明放在exception前面 -->
            <result name="error">/error.jsp</result>
            <!-- 發生java.lang.ArithmeticException異常時,跳轉到name爲error的result -->
            <exception-mapping result="error" exception="java.lang.ArithmeticException"/>
        </action>

        <action name="default">
            <result>/index.jsp</result>
        </action>
    </package>

則以後凡是捕獲到了異常,都會跳轉到error.jsp頁面,對於用戶來說,看到的不是滿頁的報錯信息,更加的人性化。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章