📅  最后修改于: 2023-12-03 15:20:22.148000             🧑  作者: Mango
在Struts 2框架中,拦截器是一个非常强大的概念。利用拦截器,您可以在请求到达Action类之前或之后对其进行某些处理。Struts 2中有多个默认拦截器可供使用,您还可以编写自己的拦截器。
在本示例中,我们将演示如何编写一个准备拦截器。这种类型的拦截器适用于在Action类之前执行一些操作,例如检查用户是否登录。如果用户没有登录,则可以将其重定向到登录页面,否则可以让请求继续前往目标Action类。
以下是实现此示例所需的步骤:
PreparationInterceptor
的Java类此类将实现Interceptor
接口,并覆盖其全部三个方法。
public class PreparationInterceptor implements Interceptor {
@Override
public void destroy() {
}
@Override
public void init() {
}
@Override
public String intercept(ActionInvocation invocation) throws Exception {
// 在Action类之前执行的代码
return invocation.invoke();
}
}
在struts.xml
文件中,使用<interceptor>
元素注册拦截器。
<interceptors>
<interceptor name="preparation" class="com.example.PreparationInterceptor"/>
<interceptor-stack name="app-default">
<interceptor-ref name="preparation"/>
<!-- 其他默认的拦截器 -->
</interceptor-stack>
</interceptors>
在以上代码中,我们定义了一个名为preparation
的拦截器,并将其添加到默认的拦截器堆栈中。
在struts.xml
文件中,使用<action>
元素指定Action类及其与之关联的拦截器堆栈。
<action name="hello" class="com.example.HelloAction">
<interceptor-ref name="app-default" />
<result name="success">/hello.jsp</result>
</action>
在以上代码中,我们指定了一个名为hello
的Action类,并将其与拦截器堆栈app-default
关联。当收到与该Action类关联的请求时,Struts 2将按照注册的顺序顺序执行拦截器,并执行Action类的方法。
PreparationInterceptor.java
package com.example;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;
public class PreparationInterceptor implements Interceptor {
@Override
public void destroy() {
}
@Override
public void init() {
}
@Override
public String intercept(ActionInvocation invocation) throws Exception {
// 在Action类之前执行的代码
return invocation.invoke();
}
}
struts.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Struts//XWork 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package name="default" extends="struts-default">
<interceptors>
<interceptor name="preparation" class="com.example.PreparationInterceptor"/>
<interceptor-stack name="app-default">
<interceptor-ref name="preparation"/>
<!-- 其他默认的拦截器 -->
</interceptor-stack>
</interceptors>
<action name="hello" class="com.example.HelloAction">
<interceptor-ref name="app-default" />
<result name="success">/hello.jsp</result>
</action>
</package>
</struts>
HelloAction.java
package com.example;
public class HelloAction {
public String execute() throws Exception {
return "success";
}
}
以上示例演示了如何编写和注册一个准备拦截器,并将其应用于某个Action类。您可以按照上面的步骤创建自己的拦截器,并根据需要将其应用于Action类。Struts 2拦截器是一个强大的工具,可以帮助您更好地管理Web应用程序。