Struts提供了一個更簡單的方式來處理未捕獲的異常,並將使用者重定向到一個專門的錯誤頁面。您可以輕鬆地Struts組態到不同的異常有不同的錯誤頁面。
Struts的例外處理所使用的“exception”攔截容易。“exception”攔截器作為預設的棧的一部分,所以不必做任何額外的組態。它可為準備使用的盒。讓我們看到了一個簡單的Hello World範例進行一些修改在HelloWorldAction.java檔案。在這裡,我們特意推出了一個空指標異常在我們HelloWorldAction動作程式碼。
package com.yiibai.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.yiibai.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。這會給出以下畫面:
輸入一個值“Struts2”,並提交頁面。應該看到以下頁面:
在上面的例子所示,預設的異常攔截器做了非常出色的處理異常。現在,讓我們建立一個專用的錯誤頁面,我們的例外。建立一個檔案名為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.yiibai.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異常。如果現在重新執行該程式,現在看到下面的輸出:
此外,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.yiibai.struts2.HelloWorldAction" method="execute"> <result name="success">/HelloWorld.jsp</result> <result name="error">/Error.jsp</result> </action> </package> </struts>