Struts2 拦截结果监听器(三十)

1.在前面的拦截器中,对execute()方法执行之前和之后都有动作,都定义在拦截器interceptor()方法中,为了精确定义在execute()方法执行结束之后,再处理result执行的动作,Struts2提供了用于拦截结果的监听器,拦截结果监听器通过手动注册给拦截器。

2.首先定义 监听器 必须实现 PreResultListener

package com.sh.interceptor;

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.PreResultListener;

public class ResultListener implements PreResultListener{

	public void beforeResult(ActionInvocation invocation, String result) {
		System.out.println("拦截结果监听器执行。。。。");
		System.out.println("返回的视图结果为:"+result);
	}
	
}


3.定义拦截器

package com.sh.interceptor;

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;

public class ResultInterceptor extends AbstractInterceptor {

	@Override
	public String intercept(ActionInvocation ai) throws Exception {
		//注册自己定义的拦截结果监听器给拦截器
                ai.addPreResultListener(new ResultListener());
		System.out.println("execute()方法执行之前。。。。");
		String result=ai.invoke();
		System.out.println("execute()执行之后。。。。");
		return result;
	}
	
}

action

package com.sh.action;

import com.opensymphony.xwork2.ActionSupport;

public class OrderAction extends ActionSupport{
	public String execute(){
		return SUCCESS;
	}
}


struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">

<struts> 
	<!-- 如果 注解的action配置改变时候不需要重新启动tomcate -->
	<constant name="struts.devMode" value="false"/>  
    <constant name="struts.convention.classes.reload" value="true" /> 
	
	<package name="default" extends="struts-default">
		<interceptors>
			<interceptor name="resultInterceptor" class="com.sh.interceptor.ResultInterceptor"/>
		</interceptors>
		
		<action name="order" class="com.sh.action.OrderAction">
			<result>/index.jsp</result>
			<interceptor-ref name="defaultStack"/>
			<interceptor-ref name="resultInterceptor"/>
		</action>
	</package>
    
</struts>


--访问
http://localhost:8080/Struts2_PreResultListener/order.action

--控制台输出
execute()方法执行之前。。。。
拦截结果监听器执行。。。。
返回的视图结果为:success
execute()执行之后。。。。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值