Struts2.3.6自定义拦截器Interceptor实战教程

需积分: 9 2 下载量 72 浏览量 更新于2024-09-13 收藏 24KB DOCX 举报
本文主要介绍了如何在Struts2.3.6版本中实现自定义拦截器Interceptor,通过定义目标接口、实现目标接口、创建自定义拦截器类,并配置Struts.xml文件来完成整个流程。 在Java Web开发中,Struts2是一个常用的MVC框架,它提供了强大的拦截器机制,用于在Action执行前后进行额外的操作,例如权限验证、日志记录等。自定义拦截器是扩展Struts2功能的重要手段。 准备工作 在开始之前,确保你已经准备了以下资源: 1. 下载并引入Struts2.3.6的核心库,包括相关的jar包。 2. 配置log4j的日志处理库,以便进行日志输出。 代码实现 1. 定义目标接口 - 这是你的业务逻辑接口,拦截器将在调用实际业务逻辑之前或之后进行操作。在这个例子中,我们创建了一个简单的`Target`接口,只有一个`doSTH()`方法。 ```java public interface Target { void doSTH(); } ``` 2. 实现目标接口 - 创建一个实现了`Target`接口的类`TargetImpl`,具体实现`doSTH()`方法。 ```java public class TargetImpl implements Target { public void doSTH() { System.out.println("TargetImpl."); } } ``` 3. 自定义拦截器 - 实现`Interceptor`接口,重写`init()`、`destroy()`和`intercept()`方法。`intercept()`方法是核心,它在Action执行前后被调用,可以进行预处理和后处理操作。 ```java public class MyInterceptor implements Interceptor { public void destroy() { System.out.println("destroy."); } public void init() { System.out.println("init."); } public String intercept(ActionInvocation invocation) throws Exception { System.out.println("intercept."); return invocation.invoke(); } } ``` 4. 配置Struts.xml - 在Struts配置文件中声明自定义拦截器和拦截器栈。这里创建了一个名为`myInterceptor`的拦截器和一个名为`myStack`的拦截器栈,将自定义拦截器添加到栈中。 ```xml <interceptors> <interceptor name="myInterceptor" class="com.win.struts2.interceptor.test.MyInterceptor"></interceptor> <interceptor-stack name="myStack"> <interceptor-ref name="myInterceptor"/> <!-- 其他默认的拦截器 --> </interceptor-stack> </interceptors> <!-- 使用自定义拦截器栈 --> <action name="someAction" class="your.action.class"> <interceptor-ref name="myStack"/> <result>yourResult.jsp</result> </action> ``` 在这个例子中,`someAction`将使用`myStack`拦截器栈,因此在执行Action的`execute()`方法前会先调用`MyInterceptor`的`intercept()`方法。 总结 自定义拦截器是Struts2框架中的一个重要特性,允许开发者灵活地扩展和控制Action的执行流程。通过定义接口、实现接口、创建拦截器类以及正确配置Struts.xml,你可以轻松地实现自己的拦截逻辑,比如登录验证、权限检查、性能监控等功能。在实际项目中,合理地使用拦截器能够极大地提高代码的可维护性和可扩展性。