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

📅  最后修改于: 2021-01-11 02:54:22             🧑  作者: Mango

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

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

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

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

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

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

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

您需要按照2个步骤创建自定义拦截器

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

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

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

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

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

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

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

package com;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;
import com.opensymphony.xwork2.util.ValueStack;

public class MyInterceptor implements Interceptor{

    public void init() {}
    public String intercept(ActionInvocation ai) throws Exception {
        ValueStack stack=ai.getStack();
        String s=stack.findString("name");
        
        stack.set("name",s.toUpperCase());
        return ai.invoke();
    }
    public void destroy() {}
}

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

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

动作的interceptor-ref子元素指定将应用于此动作的拦截器。在这里,我们指定了defaultstack拦截器和上层拦截器。













welcome.jsp



    

其他所需资源

其他所需资源是

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

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

该jsp页面使用struts UI标记创建表单。它从用户那里接收名称。

<%@ taglib uri="/struts-tags" prefix="s" %>




2)创建动作类

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

package com;
public class Login {
private String name;

public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public String execute(){
    return "success";
}
}

3)创建视图组件

该jsp页面显示用户输入的名称。

<%@ taglib uri="/struts-tags" prefix="s" %>
Welcome,