八、拦截器使用

一、了解拦截器

  拦截器可以动态增强Action对象的功能,在Struts2与ServletAPI进行解藕,Action对请求的处理不依赖于Servlet API,表单重复提交、对象类型转换、文件上传,还ModelDriven操作,都离不开拦截器。

  拦截器动态地作用于Action与Result之间,它可以动态地Action及Result进行增强(在Action与Result加入新功能)

1、浏览器(http请求)--->StrutsPrepareAndExecuteFilter

2、StrutsPrepareAndExecuteFilter(Create)---->ActionProxy

3、ActionProxy(调用)-------->Interceptor

4、Interceptor--->前处理

5、Interceptor--->execute()

6、Interceptor---->返回result

7、Interceptor---->后处理

8、Intercepto(返回result)---->ActionProxy

9、ActionProxy(返回页面)----->浏览器

 

二、拦截器API

在Struts2API中,存在一个名为“com.opensymphony.xwork2.interceptor”的包,此包的对象是Struts2内置的一些拦截器对象,它们都具有不同的功能,Interceptor接口是Struts2框架中定义的拦截器对象

public interface Interceptor extends Serializable{

  void destory();

  void init();

  String intercept(ActionInvocation invocation) throws Exception;

}

**destroy()方法指示拦截器生命周期结束,它在拦截器被销毁前被调用,用于释放拦截器在初始化进所占用的一些资源。

**init()方法用于对拦截器进行一引初始化操作,它在拦截器被实例化后,intercept()方法执行前被调用。

**intercept()方法是拦截器中的主要方法,用于执行Action对象中请求处理方法以及在Action的前前后后进行一些操作,动态增强Action功能。

只有调用intercept()方法中的invocation参数的invoke()方法,才可以执行Action对象中的请求处理方法

AbstractInterceptor对象是一个抽象类,它对Interceptory接口进行了实现,只用重写intercept()方法就行了

 

三、使用拦截器

(1)、搭建环境

(2)、创建TestAction

public class TestAction extends ActionSupport {

    @Override
    public String execute() throws Exception {
        // 线程睡眠1秒
        Thread.sleep(1000);
        return SUCCESS;
    }
   
}

(3)、配置struts.xml文件

<struts>
    <!-- 声明常量 -->
    <constant name="struts.devMode" value="true"></constant>
    <!-- 声明包 -->
    <package name="myPackage" extends="struts-default">
        <action name="testAction" class="com.lyq.action.TestAction">
            <!-- 配置拦截器 -->
            <interceptor-ref name="timer"/>
            <!-- 配置返回页面 -->
            <result>success.jsp</result>
        </action>
    </package>
</struts>

(4)、创建index.jsp与success.jsp

index.jsp

<body>
<a href="testAction.action">测试</a>
</body>

success.jsp

<body>
测试成功,请查看控制台程序的用时。
</body>

 

当访问TestAction对象扣,将看到TestAction对象执行时间大于1s,原因在第一次访问TestAction时,需要进行一引起初始化的操作,在以后的访问中就可以看到执行时间变成1秒(1000ms)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值