在传统的异常处理方式中,开发者一般需要编写大量的try-catch块来处理异常,而在struts2中,提供了一种声明式的异常处理方式,通过配置拦截器来实现异常处理。下面以要求的年龄不能为空和只能为数字来说明struts2中的异常处理,当用户输入的年龄为空或者不为数字时,则拦截异常,并在页面中提示用户异常信息,具体步骤如下
第一步:创建ExceptionTestAction,其代码如下:
package cn.test.action;
import java.util.regex.Pattern;
import com.opensymphony.xwork2.ActionSupport;
public class ExceptionTestAction extends ActionSupport{
private String age;
public String execute() throws Exception
{
Pattern pattern=Pattern.compile("[0-9]*");
if(!pattern.matcher(age).matches())
{
throw new Exception("年龄必须为数字");
}
if(age.length()==0)
{
throw new Exception("年龄不能为空");
}
return "success";
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
}
第二步,创建输入页面ExceptionTest.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<font color="red"><s:property value="exception.message"/></font><!--显示异常信息-->
<s:form action="Exception.action">
<s:textfield name="age" label="年龄"></s:textfield>
<s:submit value="提交"></s:submit>
</s:form>
第三步,创建成功Esuccess.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<s:property value="age"/>
第四步,配置struts.xml文件
<action name="Exception" class="cn.test.action.ExceptionTestAction" method="execute">
<!--配置局部异常映射-->
<!--exception用来指定出现异常的类型-->
<!--result用来指定struts2返回给用户的视图-->
<exception-mapping result="error" exception="java.lang.Exception"></exception-mapping>
<result name="error">/WEB-INF/jsp/ExceptionTest.jsp</result>
<result name="success">/WEB-INF/jsp/Esuccess.jsp</result>
</action>
完成,部署项目,如果在年龄的输入框中不输入数字,则会在页面上显示“年龄必须为数字”,如果不输入,则会显示“年龄不能为空”。