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> <package name="hello" extends="struts-default"> <!-- 【拦截器配置】 --> <interceptors> <!-- 配置用户自定义的拦截器 --> <interceptor name="helloInterceptor" class="cn.itcast.a_interceptor.HelloInterceptor"></interceptor> <!-- 自定义一个栈: 要引用默认栈、自定义的拦截器 --> <interceptor-stack name="helloStack"> <!-- 引用默认栈 (一定要放到第一行)--> <interceptor-ref name="defaultStack"></interceptor-ref> <!-- 引用自定义拦截器 --> <interceptor-ref name="helloInterceptor"></interceptor-ref> </interceptor-stack> </interceptors> <!-- 【执行拦截器】 --> <default-interceptor-ref name="helloStack"></default-interceptor-ref> <!-- Action配置 --> <action name="hello" class="cn.itcast.a_interceptor.HelloAction"> <result name="success">/index.jsp</result> </action> </package> </struts>
action
package cn.itcast.a_interceptor; import com.opensymphony.xwork2.ActionSupport; /** * Action开发测试 * @author Jie.Yuan * */ public class HelloAction extends ActionSupport{ public HelloAction() { System.out.println("1. Action实例创建了"); } @Override public String execute() throws Exception { System.out.println("3. 执行了请求处理的方法: execute"); return super.execute(); } }
Interceptor
package cn.itcast.a_interceptor; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.interceptor.Interceptor; /** * 自定义拦截器 * @author Jie.Yuan * */ public class HelloInterceptor implements Interceptor{ // 启动时候执行 public HelloInterceptor(){ System.out.println("创建了拦截器对象"); } // 启动时候执行 @Override public void init() { System.out.println("执行了拦截器的初始化方法"); } // 拦截器业务处理方法 (在访问action时候执行? 在execute之前执行?) @Override public String intercept(ActionInvocation invocation) throws Exception { System.out.println("2. 执行Action之前"); // 调用下一个拦截器或执行Action (相当于chain.doFilter(..) // 获取的是: execute方法的返回值 String resultFlag = invocation.invoke(); System.out.println("4. 拦截器,业务处理-结束" + resultFlag); return resultFlag; } @Override public void destroy() { System.out.println("销毁...."); } }