(一)平时我们对于出现异常,可以直接使用try{}catch(){}进行拦截处理,或者使用throw new XXXException()进行抛出异常,看下下execute()方法:
(二)这个方法直接往外把异常抛给框架了,说明我们不必使用try{}catch(){},进行处理;转而直接使用throw new XXXException()进行异常处理,即声明式的异常处理;
下面直接看下声明式的异常处理,这需要在struts.xml框架中进行配置,设置设计到一下一些元素和属性:
- result:这个属性指定了之后,当Action中出现异常的时候,系统就会转到result素指定的页面
- exception:在<exception-mapping.../>中,是异常处理类的异常类型,需要写全名,包括包名;
局部和全局异常映射配置
- 局部异常配置:把<exception-mapping>当做为Action的子元素进行配置
- 全部异常配置:使用<global-exception-mappings>然后配置<exception-mapping>这个子元素
下面看个例子
①:首先自定义一个MyCustomException类:
- package com.jiangqq.exception;
- /*
- * 自定义异常类
- */
- public class MyCustomException extends Exception {
- private String M_message;
- public MyCustomException(String p_MeString) {
- super(p_MeString);
- this.M_message = p_MeString;
- }
- public String getM_message() {
- return M_message;
- }
- public void setM_message(String mMessage) {
- M_message = mMessage;
- }
- }
- @Override
- public String execute() throws Exception {
- if (!"Hello".equals(username)) {
- throw new MyCustomException("用户名错误.....");
- }
- if (!"World".equals(password)) {
- throw new MyCustomException("密码错误.....");
- }
- return SUCCESS;
- }
下面是页面显示异常信息:
可以看出上面是使用局部的异常的配置来进行异常处理的,下面来举例一下使用全部异常配置
①:先看下:使用全部的异常类型定义,但是定义result属性值对应的逻辑视图名使用局部配置
①:使全部的异常类型定义与result属性值对应的逻辑视图名都使用全部配置
【注意】对于局部和全局的映射配置,如果我们配置了全局映射,那就会对所有的Action都有效,但是局部配置的异常只会对当前所在的Action有效。如果局部的异常映射和全局异常配置了同一个类型的异常,在本Action内部的局部异常映射会直接覆盖掉全局的配置
(三)进行在异常的页面异常信息输出显示
当我们抛出异常,在异常处理页面上面显示异常信息,可以使用Struts2的标签进行输出:(Struts2标签配置)
- <%@ taglib prefix="s" uri="/struts-tags"%>
<s:property value="exception.message">: 输出自定义的异常的message的信息