今天学了struts2的拦截器,对拦截器的实现原理有了一定的了解。
下面是根据老师带领,完成的一个自定义拦截器 。
第一步:
写一个自己的拦截器类。MyTimerInterceptor.java ,实现Interceptor接口,并实现这个接口中的方法。有三种方法,如下:
(1) init()方法用来初始化拦截器
(2) destroy()方法为拦截器提供清理,也就是销毁的时候执行
(3) intercept()方法为拦截器处理业务规则,这个方法每次请求都执行一次
代码如下:
import javax.interceptor.InvocationContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;
public class MyTimerInterceptor implements Interceptor{
//销毁的方法
public void destroy() {
System.out.println("销毁的时候执行一次");
}
public void init() {
System.out.println("初始化的时候执行一次");
}
public String intercept(ActionInvocation invocation) throws Exception {
//当前处理的action::::::cn.csdn.hr.struts.inter.action.MyInterceptorAction@195edfe
Object obj = invocation.getAction();
System.out.println(obj.toString());
long mil = System.currentTimeMillis();
System.out.println("目标方法执行之前:........"+System.currentTimeMillis());
String result = invocation.invoke();//执目标方法
System.out.println(result+"目标方法执行之后.......共花费时间为:"+(System.currentTimeMillis()-mil));
System.out.println("每次请求的时候都执行一次");
return result;
}
}
第二步:
将struts.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="empl" extends="struts-default" namespace="/csdn">
<!-- 拦截器的声明 -->
<interceptors>
<!-- 声明自定义拦截器 -->
<interceptor name="myTimer"
class="cn.csdn.hr.struts.inter.MyTimerInterceptor" />
<!-- 声明拦截器栈 -->
<interceptor-stack name="myStack">
<interceptor-ref name="myTimer" />
<interceptor-ref name="defaultStack" />
</interceptor-stack>
</interceptors>
<!-- 配置缺省的 拦截器栈 -->
<default-interceptor-ref name="myStack" />
<action name="helloInter"
class="cn.csdn.hr.struts.inter.action.MyInterceptorAction" method="execute">
<interceptor-ref name="myTimer"/>
<result>../sc.jsp</result>
</action>
<action name="hiInter"
class="cn.csdn.hr.struts.inter.action.MyInterceptorAction" method="say">
<result>../sc.jsp</result>
</action>
</package>
</struts>
以上这个程序执行的结果如下所示:
cn.csdn.hr.struts.inter.action.MyInterceptorAction@f631d8
目标方法执行之前:........1331118970703
success目标方法执行之后.......共花费时间为:187
每次请求的时候都执行一次