Struts2拦截器
程序员文章站
2022-07-09 17:15:07
...
拦截器的实现原理
Struts2的拦截器实现相对简单。当请求到达Struts2的ServletDispatcher时,Struts2会查找配置文件,并根据其配置实例化相对的拦截器对象,然后串成一个列表,最后一个一个的调用列表的拦截器。
Struts2的执行流程
自定义拦截器
生命周期:随项目的启动创建,随项目关闭销毁。
创建方式一
实现Interceptor接口
public class MyInterceptor implements Interceptor{
@Override
public void destroy() {
}
@Override
public void init() {
}
@Override
public String intercept(ActionInvocation invocation) throws Exception {
return null;
}
}
创建方式二
继承AbstractInterceptor
public class MyInterceptor extends AbstractInterceptor{
@Override
public String intercept(ActionInvocation invocation) throws Exception {
return null;
}
}
这种方式只有interceptor方法,实际上AbstractInterceptor自己继承了Interceptor接口,并且实现了init(),destroy(),interceptor()方法。
创建方式三
定制拦截器拦截的方法
public class MyInterceptor extends MethodFilterInterceptor{
@Override
protected String doIntercept(ActionInvocation invocation) throws Exception {
return null;
}
}
拦截器api
System.out.println("MyInterceptor的前处理");
//放行
invocation.invoke();
System.out.println("MyInterceptor的后处理");
return "success";
如果此拦截器方法放行(满足判断条件),将递归调用下一个拦截器,最后调用Action返回结果交给Result处理,返回到jsp页面。
如果不放行(不满足判断),直接把return "success";
字符串返回给Result处理。
拦截器配置
在Struts-default.xml里面有struts自己的拦截器配置。
<!-- 1.注册拦截器 -->
<interceptors>
<interceptor name="myInter" class=""></interceptor>
<!-- 2.注册拦截器栈 -->
<interceptor-stack name="myStack">
<!-- 自定义拦截器栈 -->
<interceptor-ref name="mtInter">
<!--指定哪些方法不拦截-->
<param name = "exculodeMethod">method1</param>
</interceptor-ref>
<!-- 默认的20个拦截器栈 -->
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors>
<!-- 3.指定默认拦截器栈 -->
<default-interceptor-ref name="myStack"></default-interceptor-ref>