5. Struts2框架之 Interceptor

本文详细介绍了Struts2框架中的拦截器概念及其工作原理,包括执行顺序、底层实现机制及如何自定义拦截器等内容,并对比了拦截器与过滤器的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

拦截器

1. 概述:
        struts2是框架,封装了很多功能,这些功能都封装在拦截器中
        每次都执行默认的拦截器,位置在struts2-core包下的struts-default.xml

2. **执行顺序: action对象创建之后,action方法执行之前(可以用debug方式验证)**

    >action中没有直接调用拦截器的方法,其在执行过程中使用的aop思想,使用配置文件方式操作拦截器,执行多个拦截器时采用责任链模式,执行完拦截器后  才执行action中的方法

3. 底层原理:
    1. AOP(底层就是代理模式) 方法增强,又不修改源代码
    2. 责任链模式:

            要执行多个操作,有添加,修改,删除三个操作
            首先执行添加,执行后,做类似于放行的操作;然后执行 修改,执行后 还是要放行才会执行删除操作。         

        类似filter中的过滤链: 一个请求可以有多个过滤器过滤,每个过滤器只有放行,才能到下一个过滤器

4. **自定义拦截器**
    1. 创建类,继承MethodFilterInterceptor 类(好处是可以让action中的某个方法不进行拦截)
    2. 重写类中方法

            protected String doInterceptor(ActionInvocation invocation) {
                //todo..这里面就写拦截逻辑
                // 最后调用invoke方法,类似放行,之后才会执行action中的方法
                    return invocation.invoke()
                //如果不放行 就返回一个result中的值,返回到之前页面或者其他
                    //return "login"  比如返回到login对应的jsp页面
                    }

    3. 配置action与拦截器的关系(也叫注册拦截器)
        1. 在要拦截的action标签所在的*package标签里* 声明

                <interceptor name="" class=""></interceptor>
        2. 在具体的*action标签里* 使用 声明的拦截器

                <interceptor-ref name=""> </interceptor-ref>
        3. 如果使用了自定义的拦截器,那struts默认的拦截器就没用了,需要再配置一下默认拦截器

                <interceptor-ref name="defaultStack"></interceptor-ref>

        4. 配置部分方法不拦截: <param name="excludeMethods">

                 </interceptor-ref name="">
                        <param name="excludeMethods">method1,method2</param>
                </interceptor-ref>

注意区别

1. 拦截器与过滤器的区别:
    1. 拦截器: 只可以拦截action,底层依赖的是反射,在访问action时加载
    2. 过滤器: 理论上可以拦截任意内容,比如:html,jsp,servlet,图片路径等,底层依赖的是Servlet,服务器启动就加载了

2. Servlet和Action的区别:
    1. servlet: 默认第一次访问时创建,单实例对象
    2. action : 每次访问时都创建一个,多实例对象
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值