Struts2动态代理生成action源码执行流程

本文深入探讨Struts2的核心过滤器StrutsPrepareAndExecuteFilter,重点解析executeAction()方法调用链,从ExecuteOperations的serviceAction()到Dispatcher的serviceAction(),再到DefaultActionProxyFactory和DefaultActionInvocation的初始化,最终通过ObjectFactory的buildAction()方法使用反射创建动态代理Action。

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

动态代理生成action这部分源码,应该算是Struts2之中比较底层的代码了,在这里贴出源码的执行流程,仅供参考。

核心过滤器StrutsPrepareAndExecuteFilter,在此只贴出doFilter()的代码

  public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {

        HttpServletRequest request = (HttpServletRequest) req;
        HttpServletResponse response = (HttpServletResponse) res;

        try {
            prepare.setEncodingAndLocale(request, response);
            prepare.createActionContext(request, response);
            prepare.assignDispatcherToThread();
            if (excludedPatterns != null && prepare.isUrlExcluded(request, excludedPatterns)) {
                chain.doFilter(request, response);
            } else {
                request = prepare.wrapRequest(request);
                ActionMapping mapping = prepare.findActionMapping(request, response, true);
                if (mapping == null) {
                    boolean handled = execute.executeStaticResourceRequest(request, response);
                    if (!handled) {
                        chain.doFilter(request, response);
                    }
                } else {
                    execute.executeAction(request, response, mapping);
                }
            }
        } finally {
            prepare.cleanupRequest(request);
        }
    }

进入execute.executeAction(request, response, mapping);

进入ExecuteOperations的serviceAction()

  public void executeAction(HttpServletRequest request, HttpServletResponse response, ActionMapping mapping) throws ServletException {
        dispatcher.serviceAction(request, response, servletContext, mapping);
    }

进入Dispatcher类之中的serviceAction()方法

这里写图片描述

点进去,进入DefaultActionProxyFactory类的createActionProxy()方法

这里写图片描述

进入这个类的重载方法

这里写图片描述

进入DefaultActionProxy的prepare()方法

这里写图片描述

进入DefaultActionInvocation的init()方法

这里写图片描述

进入DefaultActionInvocation的createAction()方法

这里写图片描述

进入ObjectFactory的buildAction()方法

这里写图片描述

跳转

这里写图片描述
再跳转

这里写图片描述

点击buildBean()方法

这里写图片描述

会发现这里运用反射创建代理action的instance,并返回,完成action的创建。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值