`

struts1.x执行流程分析

阅读更多

先来整体的了解一下Struts的工作流程.
  在实现一个基于Struts的运用之前我们首先是做环境设置,Struts正常工作需要至少两个
  配置文件web.xml,struts-config.xml.
  web.xml告诉App Server所有以.do结尾的请求最终提交给ActionServlet去处理。
  2就规定ActionServlet是在App Server启动的时候
  创建的并且一直存在。
  ActionServlet在创建的时候会做如下的工作:
  保存一些后面需要使用的实例在Attribute(内存)里面。
  根据web.xml的配置解析struts-config.xml文件。
  根据struts-config.xml的配置生成ActionMapping实例并且保存。
  ActionServlet在生命周期就一直等待Http 请求
  每一个.do结尾的Http 请求都由ActionServlet先截获然后根据请求路径得到具体调用那
  一个Action去处理,在这之前生成、处理ActionForm。具体知道那一个Action去处理请求
  后调用Action的execute()/perform()处理完成,返回。

 

=================================具体步骤细节============================

 

Struts配置过程:
1、配置struts
* 拷贝struts lib下的所有jar到WEB-INF/lib下
* 修改web.xml文件,配置ActionServlet
* 提供struts-config.xml文件

2、创建登录项目
* 创建jsp页面(login.jsp,login_success.jsp,login_error.jsp)
* 创建LoginActionForm.java
* 创建LoginAction.java
* 配置struts-config.xml文件

基于Struts的第一个项目执行流程分析:

login.jsp
method="post" action="login.do"

XML配置
<servlet-mapping>
    <servlet-name>action</servlet-name>
    <url-pattern>*.do</url-pattern>
</servlet-mapping>

<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
</servlet>

struts-config.xml文件
<struts-config>
<form-beans>
      <form-bean name="loginForm" type="com.struts.LoginActionForm"/>
</form-beans>

<action-mappings>
   <action
    path="/login"   
   type="com.struts.LoginAction"
     name="loginForm"
     scope="request"
     validate="false" >
    <forward name="success" path="/login_success.jsp"/>
    <forward name="error" path="/login_error.jsp"/>
   </action>
</action-mappings>
</struts-config>

submit 提交
调用
   ActionServlet.doPost();
   调用 ActionServlet.process();
   调用 RequestProcessor.process();
   该方法中主要的操作:
   1.执行 String path = processPath(request, response);//拿到URL
HTTP://localhost:****/.../login.jsp中“/login” path="/login"
    2. 执行 ActionMapping mapping = processMapping(request, response, path); //获取到struts-config.xml中<action>标签中数据并存放在ActionMapping对象中
   3.执行 ActionForm form = processActionForm(request, response, mapping); //处理ActionFrom,对应LoginActionForm,即 new LoginActionForm对象
    4.执行 processPopulate(request, response, form, mapping);//收集web页面表单数据 并将数据设置到from中
    5. 执行 Action action = processActionCreate(request, response, mapping);//创建Action 即 new LoginAction对象
   6. 执行 ActionForward forward =processActionPerform(request, response,action, form, mapping);//调用Action execute()
   7.执行 processForwardConfig(request, response, forward);//转向
结束

RequestProcessor.process();方法中的具体实现
     1.String path=processPath(request, response);
         //拿到URL
HTTP://localhost:****/.../login.jsp中“/login” 即:path="/login"
     2.ActionMapping mapping = processMapping(request, response, path);
       //获取到struts-config.xml中<action>标签中数据并存放在ActionMapping对象中
          <action
            path="/login"   
            type="com.struts.LoginAction"
            name="loginForm"
            scope="request"
             validate="false" >
            <forward name="success" path="/login_success.jsp"/>
            <forward name="error" path="/login_error.jsp"/>
        </action>
         2.1.processMapping方法中通过 (ActionConfig)actionConfigs.get(path)
             (注:path=“/login” 、 ActionMapping extends ActionConfig) 拿到ActionMapping对象
              actionConfigs是一个HashMap 里面存放的key=path value= 实例化好的ActionMapping对象,
             ActionMapping 是一个javaBean 包含...<action-mapping>中<action>参数信息name,type...
     3. ActionForm form = processActionForm(request, response, mapping);
          处理ActionFrom:
         processActionForm方法中执行ActionForm instance =
                                          RequestUtils.createActionForm(request, mapping, moduleConfig, servlet);
        在createActionForm中执行String name = mapping.getName(); 拿到<action>中name="loginForm"
                                    再执行FormBeanConfig config = moduleConfig.findFormBeanConfig(name);
                                     看是否配置了actionform <form-beans> 没有配 return;配了就执行
                                    findFormBeanConfig 方法中执行formBeans.get(name));拿到<form-beans>中相对应的配置信息
                                    formBeans是一个HashMap 里面存放的key=name("loginForm")
                                     value= 实例化好的FormBeanConfig对象, FormBeanConfig对应 <form-beans>中<form-bean>参数
                                      再执行ActionForm instance = lookupActionForm(request, attribute, mapping.
                                      getScope());查看scope域中是否有实例化好的ActionFrom,找到就返回,没找到就在session中 查找,找到就返回,再找不到就进行创建 同时将设置到scope中 返回
    4.processPopulate(request, response, form, mapping);
        收集表单数据并将数据设置到from中
        processPopulate中调用RequestUtils.populate(form, mapping.getPrefix(), mapping.getSuffix(),request);收集数据
      RequestUtils.populate方法中执行names = request.getParameterNames();拿到参数名username,password
      将对应的值存放在HashMap properties中properties.put(stripped, parameterValue);
      将值通过BenanUtiles 中的方法设置到form
      BeanUtils.populate(bean, properties);(bean==form)
   5. Action action = processActionCreate(request, response, mapping);
     创建Action,对应该项目则是创建LoginAction
   6. ActionForward forward =processActionPerform(request, response,action, form, mapping);
      通过该方法执行Action中 execute()方法 并返回配置信息里的forward参数存放于ActionForward对象中
   7.processForwardConfig(request, response, forward);
     处理转向转向
      String forwardPath = forward.getPath();//通过forward对象拿到转向路径
       进行转向处理
结束

分享到:
评论
1 楼 石夕同 2012-04-11  
谢谢博主……

相关推荐

    Struts1.x常用的开发包,需要学习struts1.x朋友可以下载

    1. **MVC模式**:MVC是软件设计中的一个经典模式,Struts1.x实现了这一模式,将业务逻辑(Model)、用户界面(View)和控制流程(Controller)分离,提高了代码的可重用性和可维护性。Model处理数据,View负责显示,...

    struts1.x和struts2.x区别

    Struts1.x的工作流程较为固定,每个Action的执行都遵循一个预定的流程,从请求到达、调用Action到返回结果,整个过程相对单一。而Struts2.x则为每个Action提供了一个独立的工作流程,可以针对不同的Action配置不同的...

    struts1.x技术课程讲解.pdf

    ### Struts1.x 技术课程讲解 #### 一、Struts1.x 概述 ...通过以上内容的学习,学员将能够掌握 Struts1.x 的核心概念、工作原理及开发流程,进而能够独立开发基于 Struts1.x 的企业级 Web 应用程序。

    struts1.x入门教程

    在Struts1.x中,Controller由ActionServlet实现,它处理HTTP请求,并通过配置文件(struts-config.xml)调度Action类来执行特定的业务逻辑。 接下来,我们将逐步了解如何创建一个简单的Struts1.x应用: 1. **搭建...

    Struts1.x-Hibernate,曾删改查

    这样,Struts1.x处理用户界面和业务流程,而Hibernate则专注于数据存储,两者结合提供了灵活且高效的开发解决方案。 **常见应用场景:** 这两个框架常用于构建企业级Web应用,如电商平台、CRM系统、内容管理系统等...

    魔乐科技Struts2.x框架笔记

    **Struts2.x与Struts1.x对比**:相较于Struts1.x,Struts2.x具有更多的优势,如不再强制要求ActionForm,配置文件更简洁,处理流程更加清晰。具体而言,请求首先被过滤器捕获,然后根据`struts.xml`文件的配置调用...

    Struts1.x-Jdbc,学习Struts1.的曾删改查

    在Struts1.x中,JDBC(Java Database Connectivity)是常用于与数据库交互的技术,它允许开发者通过Java代码来执行SQL语句,实现数据的增删改查操作。下面将详细探讨Struts1.x框架结合JDBC进行数据库操作的知识点。 ...

    Struts1.x 中文帮助文档

    Struts1.x是Apache软件基金会旗下Jakarta项目的一个核心组件,它是一款开源的MVC(Model-View-Controller)框架,用于构建企业级Java Web应用程序。这个框架在2000年代初非常流行,因其规范化的开发流程和强大的功能...

    struts1.x 常用知识详解

    Struts1.x是Apache软件基金会开发的一个开源框架,主要用于构建基于Java的企业级Web应用程序。它在MVC(Model-View-Controller)设计模式的基础上提供了一种实现方式,使得开发者能够更方便地处理业务逻辑、视图展示...

    struts1.x整合freemarker

    Struts1.x是Apache软件基金会的开源项目,主要负责处理HTTP请求,管理业务逻辑和控制流程。它通过ActionForm来封装用户请求的数据,Action类处理这些数据并调用服务层方法,最后通过Result(ActionForward)决定...

    struts1.x和struts2.0电子书

    《Struts2.0中文帮助手册.chm》将详细介绍Struts2的API、配置和使用技巧,而《Struts1.2.pdf》则可能包含了Struts1.x的框架原理、开发流程以及案例分析。通过学习这两本书,开发者可以深入理解这两个版本的Struts...

    struts in action (struts1.x)

    **Struts 1.x 框架详解** `Struts 1.x` 是 Apache 软件基金会(ASF)下的一个开源项目,是 Java Servlet 和 JavaServer Pages(JSP)平台上的一个MVC(Model-View-Controller)框架,主要用于构建企业级Web应用程序...

    Struts1.x的验证框架示例

    虽然在现代开发中,Struts1.x已经逐渐被Spring MVC等更现代的框架取代,但了解和理解其验证框架仍然有助于理解Web开发中的验证逻辑和流程。通过上述内容,你可以对Struts1.x的验证框架有一个基本的认识,并能着手...

    Struts1.x使用回顾

    Struts1.x提供了一套异常处理机制,可以捕获和处理Action执行过程中的异常,统一返回错误页面,增强程序的健壮性。 总结,Struts1.x作为早期流行的Java Web框架,它的设计思想和实现方式对后来的框架有着深远影响。...

    Struts1.x写的增删改查实例

    通过这个实例,学习者可以了解Struts1.x的生命周期、请求处理流程以及如何将前端和后端有效地结合在一起。此外,还会涉及到异常处理、国际化、验证规则等进阶主题。这是一个非常好的起点,对于想要掌握Java Web开发...

    Struts2.x 项目实战

    Struts2.x提供了丰富的拦截器(Interceptor),这些拦截器可以对Action执行前后的流程进行定制,比如日志记录、权限验证、数据校验等。拦截器链使得业务逻辑的处理更加灵活和模块化。 配置方面,Struts2.x使用XML...

    Struts1.x令牌(Token)的使用.rar

    Struts1.x是一个非常经典的Java Web开发框架,它在企业级应用中被广泛使用。而Struts1.x的令牌机制(Token)则是防止重复提交、跨页请求攻击的重要手段。在此,我们将深入探讨Struts1.x令牌的使用方法及其背后的原理...

    Struts1.x的标签库使用示例

    Struts1.x是一个非常经典的Java Web开发框架,它在2000年代初期极大地推动了MVC(模型-视图-控制器)模式在Web应用程序中的应用。本示例主要探讨Struts1.x的标签库使用,这个标签库是Struts框架提供的一套JSP标签,...

    精通struts1.x技术,struts1完整详细教程

    Struts1.x框架的处理流程大致如下: 1. 用户在视图(如JSP页面)中提交请求。 2. 请求到达ActionServlet,ActionServlet根据struts-config.xml配置找到对应的Action类。 3. Action类执行业务逻辑,与模型组件交互。 ...

Global site tag (gtag.js) - Google Analytics