Struts2 異常處理

Struts提供了一個更簡單的方式來處理未捕獲的異常,並將用戶重定向到一個專門的錯誤頁面。您可以輕鬆地Struts配置到不同的異常有不同的錯誤頁面。

Struts的異常處理所使用的“exception”攔截容易。“exception”攔截器作為默認的棧的一部分,所以不必做任何額外的配置。它可為準備使用的盒。讓我們看到了一個簡單的Hello World示例進行一些修改在HelloWorldAction.java檔。在這裏,我們特意推出了一個空指針異常在我們HelloWorldAction動作代碼。

package com.zaixian.struts2;

import com.opensymphony.xwork2.ActionSupport;

public class HelloWorldAction extends ActionSupport{
   private String name;

   public String execute(){
      String x = null;
      x = x.substring(0);
      return SUCCESS;
   }

   public String getName() {
      return name;
   }

   public void setName(String name) {
      this.name = name;
   }
}

讓我們 helloWorld.jsp保持內容如下:


<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>Hello World</title>
</head>
<body>
   Hello World, <s:property value="name"/>
</body>
</html>

以下是內容index.jsp:


<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
   pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
   <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Hello World</title>
</head>
<body>
   <h1>Hello World From Struts2</h1>
   <form action="hello">
      <label for="name">Please enter your name</label><br/>
      <input type="text" name="name"/>
      <input type="submit" value="Say Hello"/>
   </form>
</body>
</html>

struts.xml 應該像這樣:


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
   "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
   "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.devMode" value="true" />
   <package name="helloworld" extends="struts-default">

      <action name="hello"
         class="com.zaixian.struts2.HelloWorldAction"
         method="execute">
         <result name="success">/HelloWorld.jsp</result>
      </action>

   </package>
</struts>

現在右擊專案名稱,並單擊Export > WAR File創建一個WAR檔。然後部署此WAR在Tomcat的webapps目錄下。最後,啟動Tomcat 伺服器和嘗試訪問URL http://localhost:8080/HelloWorldStruts2/index.jsp。這會給出以下畫面:

Hello World Input

輸入一個值“Struts2”,並提交頁面。應該看到以下頁面:

Exception Output

在上面的例子所示,默認的異常攔截器做了非常出色的處理異常。現在,讓我們創建一個專用的錯誤頁面,我們的例外。創建一個檔案名為error.jsp 如以下內容:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
	pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title></title>
</head>
<body>
   This is my custom error page
</body>
</html>

Let us now configure Struts to use this this error page in case of an exception. Let us modify thestruts.xml as follows:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
   "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
   "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.devMode" value="true" />
   <package name="helloworld" extends="struts-default">

      <action name="hello"
         class="com.zaixian.struts2.HelloWorldAction"
         method="execute">
         <exception-mapping exception="java.lang.NullPointerException"
         result="error" />
         <result name="success">/HelloWorld.jsp</result>
         <result name="error">/Error.jsp</result>
      </action>

   </package>
</struts>

在上面的例子所示,現在我們已經配置 Struts使用專用error.jsp的NullPointerException異常。如果現在重新運行該程式,現在看到下麵的輸出:

Hello World Output

此外,Struts2 框架自帶的“日誌”攔截記錄異常。使記錄器記錄的未捕獲異常,我們可以很容易地看堆疊跟蹤和工作出了什麼錯誤。

全局異常映射:

我們已經看到了我們可以處理特定的異常行動。我們可以設置一個例外,全局將適用於所有的行動。例如,要捕獲 NullPointerException異常,我們可以添加<global-exception-mappings...>標籤裏面<package...>標籤和其<result...>標籤應加在<行動.. >標記在struts.xml檔如下: 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
   "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
   "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.devMode" value="true" />
   <package name="helloworld" extends="struts-default">

      <global-exception-mappings>
         <exception-mapping exception="java.lang.NullPointerException"
         result="error" />
      </global-exception-mappings>

      <action name="hello"
         class="com.zaixian.struts2.HelloWorldAction"
         method="execute">
         <result name="success">/HelloWorld.jsp</result>
         <result name="error">/Error.jsp</result>
      </action>

   </package>
</struts>

上一篇: Struts2 主題和範本 下一篇: Struts2快速入門