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

  1. Struts 2自定义拦截器教程
  2. 在struts 2中创建自定义拦截器的示例
在Struts 2中, 我们可以通过在类中实现Interceptor接口并覆盖其三个生命周期方法来创建自定义拦截器。
为了创建自定义拦截器, 必须实现Interceptor接口。它具有三种方法:
  1. public void init()仅被调用一次, 并用于初始化拦截器。
  2. public String Intercept(ActionInvocation ai)在每个请求处调用它, 用于定义请求处理逻辑。如果返回字符串, 则将调用结果页, 如果返回ActionInvocation接口的invoke()方法, 则将调用下一个拦截器或操作。
  3. public void destroy()仅被调用一次, 并用于销毁拦截器。
拦截器可以通过返回字符串来更改应用程序的流程。在struts 2中创建自定义拦截器的示例
在此示例中, 我们将创建自定义拦截器, 将请求处理数据转换为大写字母。
你需要按照2个步骤创建自定义拦截器
  1. 创建一个拦截器(必须实现拦截器接口)
  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)
【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"/>

下载此示例

    推荐阅读