下载此<global-exception>示例– Struts-Global-Exception-Example.zip
在Struts框架中, <global-exception>用于显示您的自定义错误页面,而不是默认的经典HTTP Status 500错误页面:
默认的错误页面看上去很丑,而且根本不专业。 此外,错误消息的描述性足以将您的系统信息泄漏给最终用户。
1. <global-exception> +默认异常处理程序
这是在< struts.config.xml”中声明的带有默认异常处理程序示例的<global-exception> ,它将默认的HTTP 500错误页面替换为您的自定义描述性错误页面。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"
"http://jakarta.apache.org/struts/dtds/struts-config_1_3.dtd">
<struts-config>
<form-beans>
//...
</form-beans>
<global-exceptions>
<exception
key="error.global.mesage"
type="java.io.IOException"
path="/pages/error.jsp" />
</global-exceptions>
<action-mappings>
//...
</action-mappings>
</struts-config>
在上面,当Action抛出任何IOException时,将调用默认的Struts异常处理程序org.apache.struts.action.ExceptionHandler ,并将其转发到error.jsp文件。 密钥是消息资源属性文件中的密钥。
通用属性
#common module error message
error.global.mesage =
Ooooppps... Sometime wraong in this site, please come back later
error.jsp
Struts Global Exception Example
2. <global-exception> +自定义异常处理程序
在默认的异常处理程序中,您无法控制如何处理异常。 在大多数情况下,您可能需要记录异常以进行进一步分析。 为此,您需要一个自定义的异常处理程序以将所有异常记录到另一个数据存储(如文件系统或数据库)中。
这是一个自定义异常处理程序示例,用于配置“ java.lang.Exception ”,以便针对Action引发的任何异常调用该异常处理程序。 要创建自定义异常处理程序,您需要将“ org.apache.struts.action.ExceptionHandler ”子类化,并覆盖execute方法。
MyCustomExceptionHandler.java
package com.mkyong.common.exception;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ExceptionHandler;
import org.apache.struts.config.ExceptionConfig;
public class MyCustomExceptionHandler extends ExceptionHandler{
private static final Logger logger =
Logger.getLogger(MyCustomExceptionHandler.class);
@Override
public ActionForward execute(Exception ex, ExceptionConfig ae,
ActionMapping mapping, ActionForm formInstance,
HttpServletRequest request, HttpServletResponse response)
throws ServletException {
//log the error message
logger.error(ex);
return super.execute(ex, ae, mapping, formInstance, request, response);
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"
"http://jakarta.apache.org/struts/dtds/struts-config_1_3.dtd">
<struts-config>
<form-beans>
//...
</form-beans>
<global-exceptions>
<exception
key="error.global.mesage"
type="java.io.IOException"
handler="com.mkyong.common.exception.MyCustomExceptionHandler"
path="/pages/error.jsp" />
</global-exceptions>
<action-mappings>
//...
</action-mappings>
</struts-config>
在上面,当Action抛出异常时,它将调用您的自定义异常处理程序MyCustomExceptionHandler的execute()方法,而不是默认的异常处理程序。
参考
翻译自: https://mkyong.com/struts/struts-global-custom-exception-example/