Struts 2 自定义拦截器示例教程

2025年3月17日 | 阅读 3 分钟

在 Struts 2 中,我们可以通过在一个类中实现 Interceptor 接口并重写其三个生命周期方法来创建自定义拦截器。

为了创建自定义拦截器,必须实现 Interceptor 接口。它有三个方法:

  1. public void init() 它只被调用一次,用于初始化拦截器。
  2. public String intercept(ActionInvocation ai) 它在每个请求时被调用,用于定义请求处理逻辑。 如果它返回字符串,则将调用结果页面,如果它返回 ActionInvocation 接口的 invoke() 方法,则将调用下一个拦截器或操作。
  3. public void destroy() 它只被调用一次,用于销毁拦截器。

拦截器可以通过返回字符串来改变应用程序的流程。


在 Struts 2 中创建自定义拦截器的示例

在本例中,我们将创建一个自定义拦截器,将请求处理数据转换为大写字母。

您需要遵循 2 个步骤来创建自定义拦截器:

  1. 创建一个拦截器(必须实现 Interceptor 接口)
  2. 在 struts.xml 文件中定义拦截器的条目

1) 创建一个拦截器(必须实现 Interceptor 接口)

通过此拦截器,我们将操作类的 name 属性转换为大写字母。

ActionInvocation 的 getStack() 方法返回 ValueStack 的引用。

我们通过 ValueStack 的 findString 方法获取在 name 属性中设置的值。

ValueStack 的 set 方法通过指定的值设置 name 属性。 在这种情况下,我们将 name 属性的值转换为大写字母并将其存储到 valuestack 中。

ActionInvocation 的 invoke 方法返回下一个资源的信息。

MyInterceptor.java

2) 在 struts.xml 文件中定义拦截器的条目

要定义拦截器,我们需要首先声明一个拦截器。 包的 interceptors 元素用于指定拦截器。 interceptors 的 interceptor 元素用于定义自定义拦截器。 在这里,我们通过 upper 定义自定义拦截器。

action 的 interceptor-ref 子元素指定将应用于此操作的拦截器。 在这里,我们指定 defaultstack 拦截器和 upper 拦截器。

struts.xml

其他需要的资源

其他需要的资源是:

  • index.jsp
  • Login.java
  • welcome.jsp

1) 创建表单以获取输入 (index.jsp)

index.jsp

此 jsp 页面使用 Struts UI 标签创建一个表单。 它从用户那里接收 name。

2) 创建 action 类

这是一个简单的动作类,包含带有其 setter 和 getter 方法的 name 属性。

Login.java

3) 创建视图组件

此 jsp 页面显示用户输入的 name。

welcome.jsp