日期:2014-05-20 浏览次数:20733 次
就是自定义拦截器的问题,初学,困扰了我一天,大家帮忙解释下,谢谢: 拦截器: 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)请问这边为什么可以写成任意的字符串,原理是什么? } }
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>
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"; } }
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才对,因为这个拦截器还要将执行后的结果返回给下一个烂机器,这样程序才能正确的执行 }