编写一个拦截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>