- Struts 2自定义拦截器教程
- 在struts 2中创建自定义拦截器的示例
为了创建自定义拦截器, 必须实现Interceptor接口。它具有三种方法:
- public void init()仅被调用一次, 并用于初始化拦截器。
- public String Intercept(ActionInvocation ai)在每个请求处调用它, 用于定义请求处理逻辑。如果返回字符串, 则将调用结果页, 如果返回ActionInvocation接口的invoke()方法, 则将调用下一个拦截器或操作。
- public void destroy()仅被调用一次, 并用于销毁拦截器。
在此示例中, 我们将创建自定义拦截器, 将请求处理数据转换为大写字母。
你需要按照2个步骤创建自定义拦截器
- 创建一个拦截器(必须实现拦截器接口)
- 在struts.xml文件中定义拦截器的条目
通过此拦截器, 我们将动作类的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
【Struts 2自定义拦截器示例教程】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="http://www.srcmini.com/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="http://www.srcmini.com/name"/>
下载此示例
推荐阅读
- Struts 2 Params拦截器示例
- Struts 2配置文件详细解释
- Struts 2教程(多个配置文件用法示例)
- Struts 2多个命名空间示例
- Struts 2架构和流程详细解释
- windows安全中心,本文教您无法打开windows安全中心的处理办法
- 电脑分辨率,本文教您电脑的分辨率要怎样调
- dns劫持,本文教您DNS被劫持如何修好
- 连接wifi,,本文教您笔记本怎样连接wifi