📅  最后修改于: 2021-01-11 02:54:22             🧑  作者: Mango
在Struts 2中,我们可以通过在类中实现Interceptor接口并覆盖其三个生命周期方法来创建自定义拦截器。
为了创建自定义拦截器,必须实现Interceptor接口。它具有三种方法:
在此示例中,我们将创建自定义拦截器,将请求处理数据转换为大写字母。
您需要按照2个步骤创建自定义拦截器
通过此拦截器,我们将动作类的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() {}
}
要定义拦截器,我们需要先声明一个拦截器。包的拦截器元素用于指定拦截器。拦截器的拦截器元素用于定义自定义拦截器。在这里,我们通过上层定义自定义拦截器。
动作的interceptor-ref子元素指定将应用于此动作的拦截器。在这里,我们指定了defaultstack拦截器和上层拦截器。
welcome.jsp
其他所需资源是
该jsp页面使用struts UI标记创建表单。它从用户那里接收名称。
<%@ taglib uri="/struts-tags" prefix="s" %>
这是一个简单的动作类,其中包含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";
}
}
该jsp页面显示用户输入的名称。
<%@ taglib uri="/struts-tags" prefix="s" %>
Welcome,