Struts2 拦截器(2)
程序员文章站
2022-05-28 15:38:17
...
创建自定义拦截器
1.扩展Interceptor接口:
public interface Interceptor extends Serializable{
void destroy();
void init();
String intercept(ActionInvocation invocation)
throws Exception;
}
ActionInvocation对象可访问运行时环境,允许访问action本身以及方法来调用action,并确定action是否已被调用。
2.如果不需要初始化或清理代码,可以直接扩展AbstractInterceptor类:
public class MyInterceptor extends AbstractInterceptor {
public String intercept(ActionInvocation invocation)throws Exception{
/* let us do some pre-processing */
String output = "Pre-Processing";
System.out.println(output);
/* let us call action or next interceptor */
String result = invocation.invoke();
/* let us do some post-processing */
output = "Post-Processing";
System.out.println(output);
return result;
}
}
实际中action将通过拦截器使用invocation.invoke()调用执行,因此可在action执行前后做一些处理。
3.在struts.xml文件中注册拦截器,然后为action添加拦截器:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package name="helloworld" extends="struts-default">
<interceptors>
<interceptor name="myinterceptor"
class="MyInterceptor" />
</interceptors>
<action name="hello"
class="HelloWorldAction"
method="execute">
<interceptor-ref name="params"/>
<interceptor-ref name="myinterceptor" />
<result name="success">/HelloWorld.jsp</result>
</action>
</package>
</struts>
需要注意的是,你可以在<package>标签内注册多个拦截器,同时可以在<action>标签内调用多个拦截器,也可以用不同的action调用同一个拦截器。上一篇: 将ipynb文件转换为markdown