`
Silmon
  • 浏览: 54509 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

Struts1执行流程

阅读更多

首先是容器加载web.xml

struts注册如下:

	<servlet>
		<servlet-name>action</servlet-name>
		<servlet-class>
			org.apache.struts.action.ActionServlet
		</servlet-class>
		<init-param>
			<param-name>config</param-name>
			<param-value>/WEB-INF/struts-config.xml</param-value>
		</init-param>
		<init-param>
			<param-name>debug</param-name>
			<param-value>3</param-value>
		</init-param>
		<init-param>
			<param-name>detail</param-name>
			<param-value>3</param-value>
		</init-param>
		<load-on-startup>0</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>action</servlet-name>
		<url-pattern>*.do</url-pattern>
	</servlet-mapping>

 容器启动的时候加载一个名为ActionServlet的Servlet,在内存创建一个唯一的ActionServlet instence。

部分源码:

public class ActionServlet extends HttpServlet {   
        protected String config = "/WEB-INF/struts-config.xml";
......
  public void init() throws ServletException {
        final String configPrefix = "config/";
        final int configPrefixLength = configPrefix.length() - 1;
             try {
            initInternal();
            initOther();
            initServlet();
            initChain();

            getServletContext().setAttribute(Globals.ACTION_SERVLET_KEY, this);
            initModuleConfigFactory();

            // Initialize modules as needed
            ModuleConfig moduleConfig = initModuleConfig("", config);

            initModuleMessageResources(moduleConfig);
            initModulePlugIns(moduleConfig);
            initModuleFormBeans(moduleConfig);
            initModuleForwards(moduleConfig);
            initModuleExceptionConfigs(moduleConfig);
            initModuleActions(moduleConfig);
            moduleConfig.freeze();

            Enumeration names = getServletConfig().getInitParameterNames();

            while (names.hasMoreElements()) {
                String name = (String) names.nextElement();

                if (!name.startsWith(configPrefix)) {
                    continue;
                }

                String prefix = name.substring(configPrefixLength);

                moduleConfig =
                    initModuleConfig(prefix,
                        getServletConfig().getInitParameter(name));
                initModuleMessageResources(moduleConfig);
                initModulePlugIns(moduleConfig);
                initModuleFormBeans(moduleConfig);
                initModuleForwards(moduleConfig);
                initModuleExceptionConfigs(moduleConfig);
                initModuleActions(moduleConfig);
                moduleConfig.freeze();
            }

            this.initModulePrefixes(this.getServletContext());

            this.destroyConfigDigester();
        } ....
 protected ModuleConfig initModuleConfig(String prefix, String paths)
        throws ServletException {
        if (log.isDebugEnabled()) {
            log.debug("Initializing module path '" + prefix
                + "' configuration from '" + paths + "'");
        }

        // Parse the configuration for this module
        ModuleConfigFactory factoryObject = ModuleConfigFactory.createFactory();
        ModuleConfig config = factoryObject.createModuleConfig(prefix);

        // Configure the Digester instance we will use
        Digester digester = initConfigDigester();

        List urls = splitAndResolvePaths(paths);
        URL url;

        for (Iterator i = urls.iterator(); i.hasNext();) {
            url = (URL) i.next();
            digester.push(config);
            this.parseModuleConfigFile(digester, url);
        }

        getServletContext().setAttribute(Globals.MODULE_KEY
            + config.getPrefix(), config);

        return config;
    }

  能够看出ModultConfig的一个实例正是由ModultConfigFactory所创建也是Struts配置文件的内存表示,因为配置文件正是有ModultConfig以实例的形式给ActionConfig,FormbeanConfig,ForwardConfig这些类 的对象了,由他们来读取。

ActionServlet处理http请求,在process方法中其实是创建了一个接收了ModultConfig的RequestProcessor实例,由其中的process***方法来处理所有的请求。

分享到:
评论

相关推荐

    struts执行原理

    Struts 1.2 的执行流程主要包括以下五个关键步骤: 1. **客户端请求**:客户端(通常是浏览器)发送 HTTP 请求至服务器端。该请求通常指向一个特定的 URL,例如 `*.do`。 2. **ActionServlet 接收请求**:服务器端...

    超详细struts2执行流程图

    这张流程图 深刻的描述了 struts2的执行流程 帮助了解Struts2

    Struts2执行原理

    9. **过滤器回溯**:在响应被构建并发送回客户端之前,过滤器链会逆序执行,执行完后,响应被返回给客户端,完成整个请求处理流程。 总的来说,Struts2的执行原理是通过过滤器链、ActionMapper、ActionProxy、...

    Struts1与Struts2原理 区别详解汇总

    ### Struts1与Struts2原理及区别详解 #### Struts1原理概述 **Struts1** 是一种基于MVC架构的开源Java Web框架,它主要用于构建动态网站和应用程序。Struts1的核心组件包括ActionServlet、ActionForm以及Action...

    Struts程序的执行流程.pdf

    在了解Struts程序的执行流程之前,我们需要首先理解几个核心概念: 1. ActionServlet:是Struts框架中的控制器,负责接收用户请求,调用Action的execute()方法处理请求,并根据返回的ActionForward对象进行页面跳转...

    Struts1工作原理浅析【转】

    Struts1 工作原理浅析 一、Struts1 工作原理概述 Struts1 是一个基于 MVC 模式的 Web 应用框架,它的工作原理可以分为三个部分:Model、View 和 Controller。Model 负责处理业务逻辑,View 负责表现层,Controller...

    struts1的工作流程

    综上所述,Struts1的工作流程主要包括用户请求的接收、请求的解析、ActionForm的创建与验证、Action的执行以及结果的呈现。这一流程清晰地展示了Struts1如何实现MVC设计模式,帮助开发者更好地组织代码结构,提高...

    servlet模拟struts1工作原理

    本文将通过使用Servlet来模拟Struts1的工作流程,深入理解其核心机制。 首先,让我们探讨Struts1的基本架构。Struts1框架的核心组件包括ActionServlet、ActionForm、Action、Tiles以及配置文件(struts-config.xml...

    struts1原理,struts2原理,spring mvc原理,struts1和struts2,struts和spring mvc

    **Struts1原理:** Struts1是Apache组织的一个开源项目,它引入了ActionServlet来处理HTTP请求。当用户发起请求时,请求会被Struts1的Front Controller(即ActionServlet)拦截,然后根据配置文件(struts-config....

    Struts2执行流程 面试常问到

    面试中经常询问Struts2的执行流程,因为理解这一流程有助于开发者深入掌握其工作原理,从而更好地设计和调试应用。以下是Struts2执行流程的详细解析: 1. **Web.xml部署描述符**: 在Struts2应用启动时,Web容器...

    struts1 mvc基本原理

    本文将深入探讨Struts1的基本原理,帮助理解其架构设计和工作流程。 **1. MVC架构** MVC模式是软件工程中一种用于分离业务逻辑、数据和用户界面的设计模式。在Struts1中,Model代表应用程序的数据和业务逻辑,View...

    struts1工作流程.rar

    本压缩包文件“struts1工作流程.rar”可能包含了一份关于Struts1框架工作流程的详细文档“struts1工作流程.doc”。下面将详细介绍Struts1的工作流程及其相关知识点。 1. **MVC架构**: Struts1基于MVC设计模式,...

    struts的执行的核心流程时序图

    struts的执行的核心流程时序图

    struts1和struts2的区别

    ### Struts1与Struts2的主要区别 #### 概述 Apache Struts 是一个用于构建企业级Java Web应用的开源框架。它分为两个版本:Struts1 和 Struts2。虽然两者都基于模型-视图-控制器(MVC)设计模式,但它们之间存在...

    struts1—jar

    理解Struts1的核心组件和工作原理对于任何Java Web开发者来说都是至关重要的,这有助于他们构建稳定、可扩展的应用程序。虽然Struts1已经被更现代的框架如Spring MVC取代,但其设计理念和MVC模式依然在现代Web开发中...

    Java面试题48.struts2的执行流程或者struts2的原理.mp4

    Java面试题48.struts2的执行流程或者struts2的原理.mp4

    Struts 原理 流程图

    理解Struts的工作原理对于开发高效且易于维护的Java Web应用至关重要。 ### Struts框架的核心组件 1. **核心控制器 (ActionServlet)**: Struts框架的核心是ActionServlet,它是一个实现了Servlet接口的类。在Web...

    struts1流程和原理

    Struts1是一个经典的Java Web框架,它遵循Model-View-Controller (MVC)设计模式,为开发者提供了一种组织和管理应用程序结构的...尽管如此,理解Struts1的工作原理对于理解MVC模式和Web开发的基础仍然是非常有价值的。

    struts2执行顺序

    struts2执行顺序,清楚描述从处理请求到返回response的整个流程

Global site tag (gtag.js) - Google Analytics