猿教程 Logo

Struts2拦截器

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

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

  1. public void init():仅调用一次,并用于初始化拦截器。

  2. public String intercept(ActionInvocation ai):在每个请求中调用它,它用于定义请求处理逻辑。 如果返回字符串,结果页面将被调用,如果返回ActionInvocation接口的invoke()方法,则会调用下一个拦截器或动作。

  3. public void destroy():它只被调用一次,用于销毁拦截器。

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


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

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

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

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

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


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

通过这个拦截器,我们将action类的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文件中声明拦截器

要定义拦截器,我们需要先声明一个拦截器。 package的interceptors元素用于声明拦截器。 interceptors的interceptor元素用于声明自定义拦截器。 在这里,我们定义自定义拦截器名称为“upper”。

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

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)

这个jsp页面使用struts UI标签创建一个表单。 它从用户接收名称。

index.jsp

<%@ 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)创建action类

它是一个简单的action类,包含名称属性及其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"/>


版权声明:本站所有教程均为本站原创或翻译,转载请注明出处,请尊重他人劳动果实。请记住本站地址:www.yuanjiaocheng.net (猿教程) 作者:卿文刚
本文标题: C#环境
本文地址:http://www.yuanjiaocheng.net/Struts/struts-2-interceptors-tutorial.html