Struts2 源码分析

从FilterDispatcher入手,虽然从2.1.3开始这个类就被建议废弃,但是只是研究源码的话就无所谓了~

该类主要完成:

执行action 

清理ActionContext

提供静态资源服务

从request生命周期中剔除Xwork的拦截器链

 doFilter()方法:

            try {
                mapping = actionMapper.getMapping(request, dispatcher.getConfigurationManager());
            } catch (Exception ex) {
                LOG.error("error getting ActionMapping", ex);
                dispatcher.sendError(request, response, servletContext, HttpServletResponse.SC_INTERNAL_SERVER_ERROR, ex);
                return;
            }

 ActionMapper是一个接口,看了下继承数,它的子类有DefaultActionMapper、CompositeActionMapper

看下DefaultActionMapper的getMapping实现:

    public ActionMapping getMapping(HttpServletRequest request,
            ConfigurationManager configManager) {
        ActionMapping mapping = new ActionMapping();
        String uri = getUri(request);

        uri = dropExtension(uri);
        if (uri == null) {
            return null;
        }

        parseNameAndNamespace(uri, mapping, configManager);

        handleSpecialParameters(request, mapping);

        if (mapping.getName() == null) {
            return null;
        }

        if (allowDynamicMethodCalls) {
            // handle "name!method" convention.
            String name = mapping.getName();
            int exclamation = name.lastIndexOf("!");
            if (exclamation != -1) {
                mapping.setName(name.substring(0, exclamation));
                mapping.setMethod(name.substring(exclamation + 1));
            }
        }

        return mapping;
    }

你可能感兴趣的:(struts2)