编写一个拦截ScheduleAction的拦截器
package com.manager.interceptor;
import java.util.Date;
import com.manager.action.ScheduleAction;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;
public class ScheduleInterceptor extends MethodFilterInterceptor {
// 为该拦截器取一个名称
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
protected String doIntercept(ActionInvocation arg0) throws Exception {
// TODO Auto-generated method stub
// 取得被拦截的Action的实例
ScheduleAction scheduleAction = (ScheduleAction) arg0.getAction();
// 打印执行开始的实现
System.out.println(name + "拦截器的动作----------"
+ "开始执行ScheduleAction的时间为:" + new Date());
// 取得开始执行Action的时间
long start = System.currentTimeMillis();
// 执行该拦截器的后一个拦截器
// 如果该拦截器后没有其他拦截器,则直接执行拦截器中includeMethods对应的方法
String result = arg0.invoke();
return result;
}
}
struts.xml中配置该拦截器
<interceptors> <!-- 配置ScheduleInterceptor --> <interceptor name="ScheduleInterceptor" class="com.manager.interceptor.ScheduleInterceptor"> <!-- 为拦截器指定参数值 --> <param name="name">Schedule</param> </interceptor> </interceptors>
为action应用此拦截器
<action name="schedule" class="schedule"> <result name="success"></result> <!-- 配置系统的默认拦截器 --> <interceptor-ref name="defaultStack"></interceptor-ref> <!-- 应用自定义的Schedule拦截器 --> <interceptor-ref name="ScheduleInterceptor"> <param name="name">该明后的拦截器</param> <!-- 需要拦截的方法 list为Action中的方法名--> <param name="includeMethods">list</param> </interceptor-ref> </action>
配置拦截器栈
<interceptors> <!-- 配置ScheduleInterceptor --> <interceptor name="ScheduleInterceptor" class="com.manager.interceptor.ScheduleInterceptor"> <!-- 为拦截器指定参数值 --> <param name="name">Schedule</param> </interceptor> <!-- 配置一个名为myInterceptor的拦截器栈 --> <interceptor-stack name="myInterceptor"> <!-- 将ScheduleInterceptor拦截器放入该栈中 --> <interceptor-ref name="ScheduleInterceptor"></interceptor-ref> <!-- 可以引用多个 --> </interceptor-stack> </interceptors>
此时只需要给Action配置该拦截器栈 该Action就能被栈中所有的拦截器拦截了
<action name="schedule" class="schedule"> <result name="success"></result> <!-- 配置系统的默认拦截器 --> <interceptor-ref name="defaultStack"></interceptor-ref> <!-- 应用myInterceptor拦截器栈 --> <interceptor-ref name="myInterceptor"> <param name="includeMethods">list</param> </interceptor-ref> </action>