首页 > 代码库 > struts2异常处理,global-results定义全局结果处理

struts2异常处理,global-results定义全局结果处理

<global-results>定义全局结果处理

一般发生异常之后 结果返回errHandler
因为errHandler是由<global-exception-mappings>关联到Exception这个类了
然后处理结果
 <result name="errHandler" type="chain">
然后它就根据
<param name="actionName">errorProcessor</param>
找action
<action name="errorProcessor" class="cn.itcast.sh.error.ErrorProcess">
             <result>/error.jsp</result>
  </action>
处理了 然后 返回到 error.jsp
 

在struts.xml中

 1 <?xml version="1.0" encoding="utf-8"?>
 2    <!DOCTYPE struts PUBLIC
 3     "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
 4     "http://struts.apache.org/dtds/struts-2.3.dtd">
 5 <struts>
 6     <constant name="struts.devMode" value="true" />
 7     <constant name="struts.enable.DynamicMethodInvocation" value="false"></constant>
 8     <!-- <constant name="struts.custom.i18n.resources" value="http://www.mamicode.com/itcast"></constant> -->
 9     <package name="struts-global" namespace="/" extends="struts-default">
10         <global-results>
11             <result name="errHandler" type="chain">
12                 <param name="actionName">errorProcessor</param>
13             </result>
14         </global-results>
15         <global-exception-mappings>
16             <exception-mapping result="errHandler" exception="java.lang.Exception">
17             </exception-mapping>
18         </global-exception-mappings>
19         
20         <action name="errorProcessor" class="cn.itcast.sh.error.ErrorProcess">
21             <result>/error.jsp</result>
22         </action>
23     </package>

然后其他包都继承它 就默认使用了其中定义的 错误处理

然后实现 类

class="cn.itcast.sh.error.ErrorProcess"
 1 package cn.itcast.sh.error;
 2 
 3 import com.opensymphony.xwork2.ActionContext;
 4 import com.opensymphony.xwork2.ActionSupport;
 5 
 6 public class ErrorProcess extends ActionSupport {
 7     private Exception exception;
 8 
 9     public Exception getException() {
10         return exception;
11     }
12 
13     public void setException(Exception exception) {
14         this.exception = exception;
15     }
16     @Override
17     public String execute()
18     {
19         ActionContext.getContext().getValueStack().push(this.exception.getMessage());      //放到值栈顶
20         return this.SUCCESS;
21     }
22 }

 

例子

struts.xml配置

 1 <?xml version="1.0" encoding="utf-8"?>
 2    <!DOCTYPE struts PUBLIC
 3     "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
 4     "http://struts.apache.org/dtds/struts-2.3.dtd">
 5 <struts>
 6     <constant name="struts.devMode" value="true" />
 7     <constant name="struts.enable.DynamicMethodInvocation" value="false"></constant>
 8     <!-- <constant name="struts.custom.i18n.resources" value="http://www.mamicode.com/itcast"></constant> -->
 9     <package name="struts-global" namespace="/" extends="struts-default">
10         <global-results>
11             <result name="errHandler" type="chain">
12                 <param name="actionName">errorProcessor</param>
13             </result>
14         </global-results>
15         <global-exception-mappings>
16             <exception-mapping result="errHandler" exception="java.lang.Exception">
17             </exception-mapping>
18         </global-exception-mappings>
19         
20         <action name="errorProcessor" class="cn.itcast.sh.error.ErrorProcess">
21             <result>/error.jsp</result>
22         </action>
23     </package>
24     <include file="struts-user.xml"></include>
25     <include file="struts-login.xml"></include>
26 </struts>
struts-user.xml中
 1 <?xml version="1.0" encoding="utf-8"?>
 2    <!DOCTYPE struts PUBLIC
 3     "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
 4     "http://struts.apache.org/dtds/struts-2.3.dtd">
 5 <struts>
 6     <package name="user" namespace="/" extends="struts-global">
 7         <action name="UserAction_*" method="{1}" class="cn.itcast.sh.action.UserAction">
 8             <result name="userList">/user/list.jsp</result>
 9         </action>
10     </package>
11 </struts>

然后 如果页面异常 都会转向 error.jsp中 显示

error.jsp可以进行错误显示

因为信息被放到栈顶了 所以可以取到

<s:property />