1、新建一个web工程,添加struts支持
2、在src下新建一个包com.etc.action,在包下新建一个类ResultAction:
package com.etc.action;
import java.io.IOException;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class ResultAction extends ActionSupport{
private static final long serialVersionUID = 6936429395630165916L;
public String show(){
return "success";
}
public String create(){
return "success";
}
}
3、配置struts.xml
<action name="show" class="com.etc.action.ResultAction" method="show">
<result name="success">/success.jsp</result>
</action>
<action name="create" class="com.etc.action.ResultAction" method="create">
<result name="success">/success.jsp</result>
</action>
4、在WebRoot下新建两个页面success.jsp和error.jsp如下:
<body>
访问成功
</body>
<body>
访问出错
</body>
5、页面运行:http://localhost:8080/struts-result2/show.action,跳转到success.jsp页面
http://localhost:8080/struts-result2/create.action,跳转到success.jsp页面
发现:show.action和create.action最终返回的都是同一个页面,success.jsp,在struts.xml中配置两次,显得很麻烦,所以我们可以将struts.xml中的代码更改为:
<!-- 全局结果集 -->
<global-results>
<result name="success">/success.jsp</result>
<result name="error">/error.jsp</result>
</global-results>
<action name="show" class="com.etc.action.ResultAction" method="show">
</action>
<action name="create" class="com.etc.action.ResultAction" method="create">
</action>
这样,只需要配置一个全局结果集,其余都是返回到success.jsp页面的结果集中不需要再进行配置如果将ResultAction中的show()方法更改如下:
public String show(){
int i = 0;
int j = 3/i;
System.out.println("j="+j);
return "success";
}
运行:http://localhost:8080/struts-result2/show.action,结果如下:显然,这样直接将错误暴露在页面上,显得很不好看,那么我们可以在struts.xml中配置 异常处理 代码如下:
<global-exception-mappings>
<exception-mapping result="error" exception="java.lang.Exception"></exception-mapping>
</global-exception-mappings>
这样,java.lang.Exception将会捕捉到ResultAction类中的异常,然后转向error结果集,从而转向error.jsp页面,如下:
这样,整个页面变得好看许多。
结论:
全局结果集的配置:是为了返回到同一个页面时,可以简写代码,在一个地方配置即可,无需配置多次。
异常处理的配置:是为了让页面友好化,不直接将错误代码返回到页面,而是提示相应的错误信息。