Struts– 自定义异常处理程序示例

下载此<global-exception>示例– Struts-Global-Exception-Example.zip

在Struts框架中, <global-exception>用于显示您的自定义错误页面,而不是默认的经典HTTP Status 500错误页面:

struts-global-exception-1

默认的错误页面看上去很丑,而且根本不专业。 此外,错误消息的描述性足以将您的系统信息泄漏给最终用户。

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()方法,而不是默认的异常处理程序。

参考

  1. Struts异常处理程序– http://struts.apache.org/1.x/userGuide/building_controller.html

翻译自: https://mkyong.com/struts/struts-global-custom-exception-example/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值