欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Struts2拦截器

程序员文章站 2022-07-09 17:15:07
...

拦截器的实现原理

Struts2的拦截器实现相对简单。当请求到达Struts2的ServletDispatcher时,Struts2会查找配置文件,并根据其配置实例化相对的拦截器对象,然后串成一个列表,最后一个一个的调用列表的拦截器。

Struts2的执行流程

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()方法。
Struts2拦截器

创建方式三

定制拦截器拦截的方法

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>
相关标签: Struts2 拦截器