PreResultListener

有时候我们需要在Action执行完毕后而Result还没执行时做一些功能,就需要PreResultListener,这是一个监听器。要实现这个监听器首先就要有一个实现PreResultListener的类,在这个类里面去实现事件的处理

写一个类实现PreResultListener

public class MyPreResult implements PreResultListener{
  @Override
  public void beforeResult(ActionInvocaiton actionInvocation, String result){
    System.out.println("现在处理Result执行前的功能,result="+result);
  }
}

这个类中有ActionInvocaiton对象,这个对象封装了Action运行所需要的数据,甚至可以通过它来执行Action

然后在Action的方法中注册这个监听器

public class firstAction extends ActionSupport {
  @Override
  public String execute() throws Exception {
    //注册监听器
    ActionContext context = ActionContext.getContext();
    MyPreResult pr = new MyPreResult();
    context.getActionInvocation().addPreResultListener(pr);

    return SUCCESS;
  }
}

当Action运行之后,监听器监听到相应的事件并执行相关的功能,之后才会执行Result

Struts2的异常映射

在struts2中有时遇到异常需要我们去处理,这里有两种处理异常的方式
1.自己去实现异常的处理

public class firstAction extends ActionSupport {
  @Override
  public String execute() throws Exception {
     try{
       int a = 5/0;    
     }catch(Exception e){
       e.printStackTrace();
       return "catchError";
     }
    return SUCCESS;
}

然后通过这个返回的字符串去执行对应的Result

2.使用struts的异常机制
在<action>元素中设置<exception-mapping>元素,可以指定在方法抛出指定异常时跳到那个指定的页面

public class firstAction extends ActionSupport {
  @Override
  public String execute() throws Exception {
    int a = 5/0;

    return SUCCESS;
  }
}

需要在struts.xml中去配置一下

<action name="xxx" class="xxx" method="execute">
  <exception-mapping result="math-exception" exception="java.lang.ArithmeticException">
  <exception-mapping result="math-exception" exception="java.lang.Exception">
  <result name="math-exception">/error.jsp</result>
  <result>/welcome.jsp</result>
</action>

exception属性指定的是一个Exception的全类名,如果Action的方法抛出的错误是这个Exception的实例或是其子类的实例,就会跳转到对应的result属性指定的结果。

如果<action>配置了<exception-mapping>元素时,则会按顺序寻找,直到找到第一个符合的exception-mapping元素,如果没有找到,则会交给web容器处理

上面写的<exception-mapping>只对本<action>有效,可以将这个<exception-mapping>做成全局映射。如果要做成全局映射,这个<exception-mapping>应该放在<global-exception-mappings>中,这个是<package的子元素,配置了<global-exception-mappings>就需要配置<global-results>,因为配置了异常处理之后就自然要配置处理后要去的页面

<package name="xx" extends="struts-default" namespace="/">
  <global-results>
     <result name="math-exception">/error.jsp</result>
  </global-results>
  <global-exception-mappings>
    <exception-mapping result="math-exception" exception="java.lang.ArithmeticException">
    <exception-mapping result="math-exception" exception="java.lang.Exception">
  </global-exception-mappings>
</package>

如果想在页面上显示错误信息,可以是使用struts2提供的标签

<s:property value="exception" /> 打印exception对象的例外消息
<s:property value="exceptionStack"> 打印exception对象的堆栈消息
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值