(六)Struts2进阶之异常处理

任何成熟的框架都提供异常处理机制,当然也可以采用手动捕获异常的方式,但这种方式繁琐,最好采用声明式的方式管理异常处理,声明式的异常处理机制使得异常处理和代码的耦合度降低,有利于维护。


1.异常处理机制

Struts2的异常处理流程图如下


(六)Struts2进阶之异常处理_第1张图片
24.png

当Action处理用户的请求时,如果出现了异常1,则转入视图资源1,如果出现异常2,则转入视图资源2。


2.配置异常

使用标签在struts.xml中配置异常。

该标签有两个属性result和exception,都是必须的。

  • result属性:用于指定Action抛出异常时,系统转入该属性值对应的或者中配置的元素。
  • exception属性:用于指定Action出现的异常所对应的异常类型。

根据标签的位置,可分为局部异常映射和全局异常映射

  • 局部异常映射:将标签作为标签的子元素。
  • 全局异常映射:将标签作为标签的子元素。

和全局result、局部result类似,全局异常对所有的Action都有效,且如果异常相同,局部异常会覆盖全局异常。

还记得(三)struts2进阶之实现Action这篇文章吗?我们在里面都是用一个登陆的小例子讲解的,现在我们再次用那个小例子

局部异常映射

创建一个LoginAction5继承ActionSupport,代码如下

@SuppressWarnings("serial")
public class LoginAction5 extends ActionSupport {
    private String username;
    private String password;
    
    public LoginAction5() {}

    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;
    }
    
    @Override
    public String execute() throws Exception {
        if("admin".equals(username) && "admin".equals(password)) {
            return SUCCESS;
        } else {
            // 抛出异常
            throw new RuntimeException();
        }
    }
}

可以看到execute()方法抛出了异常,现在去struts.xml中增加一条Action的配置



    
    
    /success.jsp
    /error.jsp

当我们输入的账户名密码符合要求的时候,就会进入success.jsp,当输入的密码不符合要求的时候,Action执行execute方法后就会抛出一个RuntimeException,被捕获后,就会根据中的result属性的值,去寻找相应的result,然后进入error.jsp。

全局异常映射

LoginAction5的代码不变,我们只是改变struts.xml的代码

 
    
    
        
        
            
        
    
        
        
            
            
            /success.jsp
            /error.jsp
        
    

这样配置的话,如果在action中没有找到对应的异常映射,就会去找全局异常映射,最后的结果和上面的一样。

注意:全局异常映射必须配置在所有action的前面!

你可能感兴趣的:((六)Struts2进阶之异常处理)