struts2的拦截器是一个十分重要的功能,我们今天就讨论一下利用注解来配置拦截器,上代码。
public class Test extends AbstractInterceptor{
private String name="hello";
@Override
public String intercept(ActionInvocation invocation) throws Exception {
// TODO Auto-generated method stub
ActionContext ctx = invocation.getInvocationContext();
Map session=ctx.getSession();
if(name!=null){
System.out.println("hahahhahah");
return invocation.invoke();
}
else{
System.out.print("wrong!");
}
return null;
}
}
这是拦截器类的代码。
以下是struts2中的代码
<package name="yang" extends="json-default">
<interceptors>
<interceptor name="test" class="util.Interceptor.Test" />
<interceptor-stack name="testStack">
<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="test"></interceptor-ref>
</interceptor-stack>
</interceptors>
</package>
package的名字可以自己取,只需要保持统一即可,如果Action的代码中使用了JSON,最好把extends属性写成“json-default”(后来测试一下,发现写成struts-daefault)也是可以的,这样XML的配置就完成了。
然后是对需要引入的Action配置拦截器
配置方法一:
@Namespace("/QuesDesign")
@ParentPackage("yang") //这里指定ParentPackage必不可少
@InterceptorRefs(@InterceptorRef("testStack"))
public class QuesDesignAction {
@Action1
@Action2
.................
.................
}
这样对Namespace为QuesDesign下的所有Action都引入了拦截器,不需要给Action1,Action2单独配置。、
如果只想对QuesDesignAction类下的Action1配置拦截器的话,可以这样写:
配制方法二:
@Namespace("/QuesDesign")
@ParentPackage("yang") //这里指定ParentPackage必不可少
public class QuesDesignAction {
@Action1(value = "/action1",interceptorRefs={@InterceptorRef("testStack")})
}