struts2的有关问题

struts2的问题Java code就是自定义拦截器的问题,初学,困扰了我一天,大家帮忙解释下,谢谢:拦截器:public cl

struts2的问题

Java code
就是自定义拦截器的问题,初学,困扰了我一天,大家帮忙解释下,谢谢:拦截器:public class MyInterceptor implements Interceptor{    public void destroy() {        System.out.println("调用拦截器的destroy方法");        //(1)destory()方法在拦截器实例销毁前调用,请问什么时候销毁拦截器实例,reload程序的时候没有调用该方法啊?    }    public void init() {        System.out.println("调用拦截器的init方法");            }    public String intercept(ActionInvocation invocation) throws Exception {        Long start = System.currentTimeMillis();        System.out.println("开始计数");        String r = invocation.invoke();//返回"success"        Long end = System.currentTimeMillis();        System.out.println(end - start);        System.out.println("计数完毕");        System.out.println(r);         return "add"; //(2)请问这边为什么可以写成任意的字符串,原理是什么?    }    }

XML code
struts.xml文件<struts>        <package name="default1" namespace="/" extends="struts-default">        <interceptors>            <interceptor name="myIntcpt" class="com.wjf.action.MyInterceptor"></interceptor>        </interceptors>        <global-results>            <result name="add">/add.jsp</result>        </global-results>        <action name="test" class="com.wjf.action.TestAction">            <result>/success.jsp</result>            <interceptor-ref name="defaultStack"></interceptor-ref>            <interceptor-ref name="myIntcpt"></interceptor-ref>        </action>    </package>    </struts> 

Java code
action:public class TestAction extends ActionSupport{    public String execute() throws Exception {        System.out.println("执行了action的execute方法");        return super.execute();    }        public String add(){        System.out.println("执行了add的add方法");        return "add";    }}


[解决办法]
Java code
 public String intercept(ActionInvocation invocation) throws Exception {        Long start = System.currentTimeMillis();        System.out.println("开始计数");        String r = invocation.invoke();//返回"success"        Long end = System.currentTimeMillis();        System.out.println(end - start);        System.out.println("计数完毕");        System.out.println(r);         return r; //这里并不是返回的是任意值,返回的是invocation.invoke()执行后的结果,所以返回的应该是r才对,因为这个拦截器还要将执行后的结果返回给下一个烂机器,这样程序才能正确的执行    }