Struts2:自定义拦截器

继承AbstractInterceptor类
提供了init()和destory()方法的空实现
只需要实现interceptor()方法即可

拦截器案例

计算Action的执行时间

  1. 新建Web Project struts-timerInterceptor,配置struts2相关环境

如需查看Struts2相关环境的配置,点这里查看。

2.index.jsp
body内容如下:

<body>
    <a href="timer">访问Action并计算执行Action花费的时间</a>
</body>

3.新建TimerAction.java,重载execute()方法

public class TimerAction extends ActionSupport {
    @Override
    public String execute() throws Exception {
        for (int i = 0; i < 1000000; i++) {
            System.out.println(i);
        }
        return SUCCESS;
    }
}

4.配置struts.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" 
        "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
    <package name="default" namespace="/" extends="struts-default">
        <action name="timer" class="TimerAction">
            <result>/success.jsp</result>
        </action>
    </package>
</struts>

5.新建success.jsp

<body>
    访问成功!
</body>

6.拦截器TimerInterceptor.java

public class TimerInterceptor extends AbstractInterceptor {

    @Override
    public String intercept(ActionInvocation invocation) throws Exception {
        //1.在Action执行之前,获取当前时间的毫秒值
        long start = System.currentTimeMillis();
        //2.执行下一个拦截器,如果已经是最后一个拦截器,则执行目标Action
        //最后返回的字符串就是结果视图
        String result = invocation.invoke();
        //3.执行Action结束之后,再次获取当前时间
        long end = System.currentTimeMillis();
        System.out.println("end-start:" + (end-start) + "ms");
        return result;
    }
}

7.struts.xml中注册/定义并引用拦截器

<struts>
    <package name="default" namespace="/" extends="struts-default">
        <!-- 1/2 注册/定义拦截器 -->
        <interceptors>
            <interceptor name="mytimer" class="TimerInterceptor"></interceptor>
        </interceptors>
        <action name="timer" class="TimerAction">
            <result>/success.jsp</result>
            <!-- 2/2 引用拦截器 -->
            <interceptor-ref name="mytimer"></interceptor-ref>
        </action>
    </package>
</struts>

8.访问http://127.0.0.1:8080/struts-timerInterceptor/index.jsp

最后观察控制台输出

自定义拦截器的步骤

1.创建一个类继承自AbstractInterCeptor类,override父类方法interceptor()
2.1在struts.xml中,注册/定义拦截器
2.2引用拦截器


另一个实现自定义拦截器方式是: 实现Interceptor()接口
-void init():初始化拦截器所需资源
-void destory():释放在init()分配的资源
-String intercept(ActionInvocation ai) throws Exception

标签: Java, Struts2, 拦截器, interceptor

相关文章推荐: