- Struts 2自定义拦截器教程
- 在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方法返回下一个资源的信息。
MyInterceptor.java
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文件中定义拦截器的条目
要定义拦截器, 我们需要先声明一个拦截器。包的interceptors元素用于指定拦截器。拦截器的拦截器元素用于定义自定义拦截器。在这里, 我们通过上层定义自定义拦截器。
动作的interceptor-ref子元素指定将应用于此动作的拦截器。在这里, 我们指定了defaultstack拦截器和上层拦截器。
struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts
Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<package name="abc" extends="struts-default">
<interceptors>
<interceptor name="upper" class="com.MyInterceptor"></interceptor>
</interceptors>
<action name="login" class="com.Login">
<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="upper"></interceptor-ref>
<result>welcome.jsp</result>
</action>
</package>
</struts>
其他所需资源
其他所需资源是
- index.jsp
- Login.java
- welcome.jsp
1)创建表单以获取输入(index.jsp)
index.jsp
该jsp页面使用struts UI标记创建表单。它从用户那里接收名称。
<%@ taglib uri="/struts-tags" prefix="s" %>
<s:form action="login">
<s:textfield name="name" label="Name"></s:textfield>
<s:submit value="login"></s:submit>
</s:form>
2)创建动作类
这是简单的动作类, 其中包含name属性及其setter和getter方法。
Login.java
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页面显示用户输入的名称。
welcome.jsp
<%@ taglib uri="/struts-tags" prefix="s" %>
Welcome, <s:property value="name"/>
下载此示例
评论前必须登录!
注册