Struts2 拦截器Interceptor详解:内置与自定义应用

需积分: 4 3 下载量 179 浏览量 更新于2024-08-17 收藏 822KB PPT 举报
"本文主要介绍了STRUTS2框架中的内置拦截器,包括com.opensymphony.xwork2.interceptor.TimerInterceptor用于记录Action执行时间,org.apache.struts2.interceptor.TokenInterceptor防止表单重复提交,以及如何通过excludeMethods和includeMethods进行方法过滤。同时,展示了如何在Action配置中使用拦截器,如设置无效令牌时跳转到特定结果页面,并配合<s:token>标签防止重复提交。文章还提及了拦截器在Struts2中的重要性和作用,以及它们与Action的关系,强调了拦截器在实现AOP和增强Action功能方面的价值。此外,还讨论了默认拦截器defaultStack提供的功能,以及如何定义和配置自定义拦截器。" 在STRUTS2框架中,拦截器(Interceptor)是一个关键概念,它实现了AOP(面向切面编程)并提供了许多核心功能。拦截器通过动态代理模式工作,允许在不侵入框架内部的情况下添加新的功能,提高了代码的解耦合性和可扩展性。例如,TimerInterceptor用于测量Action执行所需的时间,有助于性能优化;TokenInterceptor则是为了防止用户恶意或意外的重复提交表单,它与<s:token>标签配合使用,当检测到重复提交时,会将用户重定向到预设的逻辑视图。 在配置Action时,可以通过`<interceptor-ref>`标签指定拦截器,比如设置`excludeMethods`和`includeMethods`属性来过滤特定的方法。当Action未指定拦截器时,会默认使用`defaultStack`,它包含了处理请求参数封装、文件上传、类型转换异常等基础功能。如果自定义了拦截器,需要显式添加`defaultStack`以保留这些默认功能。 自定义拦截器需要继承`AbstractInterceptor`抽象类或实现`Interceptor`接口。`init()`方法用于初始化,`destroy()`方法在拦截器不再需要时调用,而`intercept()`方法则是核心,负责执行拦截逻辑。`ActionInvocation`对象在`intercept()`方法中传递,允许访问Action上下文,并通过`invocation.invoke()`继续调用下一个拦截器或Action的`execute()`方法。 通过创建自定义拦截器,开发者可以实现各种功能,比如访问控制、日志记录、事务管理等,进一步增强了STRUTS2框架的灵活性和实用性。