我们在很多网站中都有看到,如果我们访问不到一些资源页面的时候,网站会帮我们导航到友好的404错误页面,因此我们在开发后台的时候肯定要对一些不知的异常进行处理,对于异常,我们肯定是不会抛给用户看的,所以我们很常用的就是配置一个全局的异常处理页面来处理网站的异常结果,下面贴出在struts2中对全局异常和局部异常的配置:
小提醒:在sturts2的struts-default,xml操作就配置了ExceptionMappingInterceptor异常拦截器,所以只要我们使用的是默认拦截器,就会作用于每个Action,struts-default,xml默认拦截器中异常拦截器排在最前面是因为在进入到sturts2的Action之前或者之后,可能都会出现各种各样的而异常,方便进行异常处理:
<span style="font-size:14px;"><span style="font-size:14px;"> <interceptor-stack name="defaultStack">
<interceptor-ref name="exception"/>
<interceptor-ref name="alias"/>
<interceptor-ref name="servletConfig"/>
<interceptor-ref name="i18n"/>
<interceptor-ref name="prepare"/>
<interceptor-ref name="chain"/>
<interceptor-ref name="scopedModelDriven"/>
<interceptor-ref name="modelDriven"/>
<interceptor-ref name="fileUpload"/>
<interceptor-ref name="checkbox"/>
<interceptor-ref name="multiselect"/>
<interceptor-ref name="staticParams"/>
<interceptor-ref name="actionMappingParams"/>
<interceptor-ref name="params">
<param name="excludeParams">dojo\..*,^struts\..*</param>
</interceptor-ref>
<interceptor-ref name="conversionError"/>
<interceptor-ref name="validation">
<param name="excludeMethods">input,back,cancel,browse</param>
</interceptor-ref>
<interceptor-ref name="workflow">
<param name="excludeMethods">input,back,cancel,browse</param>
</interceptor-ref>
<interceptor-ref name="debugging"/>
</interceptor-stack></span></span>
下面来个全局异常和局部异常的demo:
1、首先来个Action:
<span style="font-size:14px;"><span style="font-size:14px;">package example.exceptionHandlerDemo;
import com.opensymphony.xwork2.ActionSupport;
/**
* struts2中的异常处理机制
* @author Administrator
*
*/
public class ExceptionHandlerDemoAction extends ActionSupport{
public String execute(){
System.out.println("开始执行execute()方法");
System.out.println("异常语句开始");
int x=1/0;//异常语句
return "index";
}
}
</span></span>
接着在struts.xml中的配置:
<span style="font-size:14px;"><constant name="struts.devMode" value="true"></constant>
<package name="Hello" extends="struts-default" namespace="/">
<!-- 定义全局的result结果 -->
<global-results>
<result name="exceptionRsult1" type="redirect">/exception1.jsp</result>
<result name="exceptionRsult2" type="redirect">/exception2.jsp</result>
</global-results>
<!-- 定义全局异常映射处理 -->
<global-exception-mappings>
<exception-mapping result="exceptionRsult1" exception="java.lang.Exception"></exception-mapping>
</global-exception-mappings>
<action name="exceptionDemo" class="example.exceptionHandlerDemo.ExceptionHandlerDemoAction" method="execute">
<!-- 局部异常配置-->
<exception-mapping result="exceptionRsult2" exception="java.lang.Exception"></exception-mapping>
</action>
</package></span>
最后是jsp页面:
exception1.jsp:
<span style="font-size:14px;"><%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<%@taglib uri="/struts-tags" prefix="s"%>
<html>
<head>
<title>计算器</title>
</head>
<body>
<h1>全局异常处理页面</h1>
<s:property value="exception.message"/><!-- 从值栈中获取 -->
</body>
</html></span>
exception2.jsp:
<span style="font-size:14px;"><%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<%@taglib uri="/struts-tags" prefix="s"%>
<html>
<head>
<title>计算器</title>
</head>
<body>
<h1>局部异常处理页面</h1>
<s:property value="exception.message"/><!-- 从值栈中获取 -->
</body>
</html></span>
结果显示页面: