Struts2 学习笔记——异常机制

本文介绍Struts2框架如何通过配置文件实现不同异常映射到不同视图的功能,包括局部异常和全局异常的处理方式,并通过登录示例详细展示了异常处理流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

要想根据出现不同的错误来控制响应不同的视图,Struts2提供了以配置的方式来处理不同的异常信息。

我们可以使用<exception-mapping>元素作为<global-exception-mappings><action>元素的子元素来配置全局异常映射和局部异常映射。

<exception-mapping>元素有两个属性:

exception:指定此异常映射所设置的异常类型。

result:指定在处理完Action中所抛出的exception属性中指定的异常时,所要转入的逻辑视图名。

下面我们结合一个具体事例来学习Struts2的异常处理机制。

我们来模拟用户登录的过程中,根据出现不同的错误信息,定位到不同的逻辑视图名,产生不同的响应结果。

1、  创建LoginAction类:

public class LoginAction {

    private String userName;

    private String password;

    private String tip;

   

    public String getUserName() {

       return userName;

    }

    public void setUserName(String userName) {

       this.userName = userName;

    } 

    public String getPassword() {

       return password;

    }

    public void setPassword(String password) {

       this.password = password;

    }

   

    public String execute() throws Exception {      

       if(StringUtils.isEmpty(getUserName()))

throw new java.lang.NullPointerException("用户名不能为空!");

       if(StringUtils.isEmpty(getPassword()))

throw new java.lang.NullPointerException("密码不能为空!");

       if(getPassword().length()>6)

throw new java.lang.ArrayIndexOutOfBoundsException("密码不能超过六位!");

      

       if("scott".equals(this.getUserName()) && "123".equals(this.getPassword())){

           this.setUserName("artsn");

           return "success";

       }else{

           throw new Exception("用户名密码错误!");

       }

    }

}

2、  配置Action信息

<package name="sample1" extends="struts-default"> 

    <global-results>

        <result name="error">/error.jsp</result>

    </global-results>

    <global-exception-mappings>

        <exception-mapping result="error" exception="java.lang.Exception">

</exception-mapping>

    </global-exception-mappings>

    <action name="login" class="org.struts2.samples.LoginAction">

     <exception-mapping result="nullError"

exception="java.lang.NullPointerException">

</exception-mapping>

        <exception-mapping result="outOfError"

exception="java.lang.ArrayIndexOutOfBoundsException">

</exception-mapping>

        <result name="nullError">/nullError.jsp</result>

        <result name="outOfError">/outOfError.jsp</result>

        <result>/login.jsp</result>

    </action>        

</package> 

3、  jsp文件

login.jsp

 <%@ page language="java" contentType="text/html; charset=gb2312" pageEncoding="gb2312"%>

<%@ taglib prefix="s" uri="/struts-tags"%>

<!DOCTYPE html PUBLIC "-//W< xmlnamespace prefix ="st1" ns ="urn:schemas-microsoft-com:office:smarttags" />3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">

<html> 

<title>登录</title> 

<body> 

    <s:form action="login.action">

    <s:textfield name="userName" label="用户名"  required="true" />

    <s:password name="password" label="密码"  required="true"/>

    <s:submit value="登录"></s:submit>

    </s:form>

</body> 

</html>

 error.jsp

<%@ page language="java" contentType="text/html; charset=gb2312" pageEncoding="gb2312"%>

<%@ taglib prefix="s" uri="/struts-tags"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">

<html> 

<title>Error</title> 

<body> 

    <h1><s:property value="exception.message"/>Error!(手工抛出Exception异常!)</h1> 

</body> 

</html>

 nullError.jsp

 <%@ page language="java" contentType="text/html; charset=gb2312" pageEncoding="gb2312"%>

<%@ taglib prefix="s" uri="/struts-tags"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">

<html> 

<title>错误提示页面</title> 

<body> 

    <h1><s:property value="exception.message"/>(空指针错误!)</h1> 

</body> 

</html>

 outOfError.jsp 

 <%@ page language="java" contentType="text/html; charset=gb2312" pageEncoding="gb2312"%>

<%@ taglib prefix="s" uri="/struts-tags"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">

<html> 

<title>错误提示页面</title> 

<body> 

    <h1><s:property value="exception.message"/>(数组越界错误!)</h1> 

</body> 

</html>

 

首先我们来看看Action类中execute()方法中①②③处,根据不同的逻辑分别抛出了空指针错误、数组越界错误和通用的错误。

接下来我们在struts.xml文件中配置响应的异常处理信息,在这里我们把空指针错误、数组越界错误定义成了局部异常信息,将通用错误定义成全局的异常信息。

接下来,我们运行程序输入测试数据触发响应的错误,我们可以看到生成不同错误对应的响应结果。

从这个例子中我们可以看出Struts2的异常处理还是十分方便的。当然我们也可以在execute()方法中手动的捕获异常,然后根据不同的异常返回不同的逻辑视图名。但是我们不推荐这样子处理。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值