zoukankan      html  css  js  c++  java
  • struts 1.x 原理

    Struts

     

          当我接触到这个框架的时候。我就在想为什么是struts,而不是什么CraigFramework。结构、支撑,这样来理解也不难怪了。

     

    为什么须要struts

     

          在struts in action这本书里,struts的开发人员也讲到。在有了MVC后依旧须要这样一个框架来支撑开发的工作。由于有了jspmodelejb来处理这一套流程还须要什么?详见下文


    基本构件


     

       

      如图是一个相对简洁的组件图,初始化页面。载入struts-config.xml(注:在默认情况中默觉得struts-config.xml,当然也能够自己定义相应的xml文件。更改后须要在xml文件里配置。)。取得form中的数据,提交到action中处理

    返回到jsp。



    原理


     

          首先须要在tomcatserver启动,而tomcat启动后。

    部署在tomcat中的项目启动,对应在依据项目下的web.xml文件来实例化strutsservlet;并加载struts-config.xml文件。

    而后webclient向tomcat发出request后。实例化request以及response对象。假设是post提交就调用dopost方法,请求ActionServlet并调用doPost方法。

     

    部分图解:


     


    1.截取url

     

         在doPost方法中调用的process方法。通过一路艰辛传过来的request对象携带的url。通过RequestProcessor类中的processpath方法来截取url

     

    2.获取ActionMapping

     

           截取得到的url再来通过RequestProcessorprocessmapping来调用ModuleConfigImpl类来读取servlet-config.xml中的节点并将相应的数据设置到ActionMapping对象之中。

     

    3.实例化ActionForm

     

         在struts-config.xml中有相应ActionFormname。通过这个name。首先在sessionrequest中查找,假设有直接返回;没有通过name拿到相应value来通过反射得到相应类的实例。

     

    4.设置表单数据

     

    将表单数据设置到ActionForm


    5.创建并运行Action


           调用RequestProcessorprocessActionCreate来创建Action。创建过程类似于ActionForm

    运行execute方法,调用业务逻辑,返回response对象,转发到jsp页面,渲染页面。

     

     

           actionForm:一种和actionconfig关联的javabean,在相应的action被调用之前都会自己主动初始化參数。将经过验证的数据填充自己类相应的属性。


     

    长处:


        1.struts相当于一种隔离,仅仅有经过actionform的数据才干被后面的action调用。

    多少进行了一些隔离和过滤。

        2.http请求和action之间建立桥梁,也算是一种针对业务的分层和解耦吧。

    针对表单数据的单独处理。


    缺点:

     

         1.当仅仅有一个或几个actionform时。这样的解决方式当然解决并应对问题。而后面出现几百个actionform时这样的针对每一个请求来整合数据的方式就影响了效率,不单单在编写时候easy出问题,也不利于后面的维护。所以后面的struts1.x都针对这个问题出现了dynaactionform的解决方式。将相关的属性配置在xml文件里,这样更改和编写仅仅用来针对config来改动就可以。

     

     

    后序

     

           上文留了一个包袱了。为什么须要struts?在之前由于有了jsp以及ejb、jdbc等开发技术足够支持web的开发。

    但strutsjspmodel之间相当于桥梁的作用。一个功能强劲、性能更加优越的控制和转发数据中心,事实上还是一个以MVC为核心的控制器。再者struts很多其它可扩展的配置(注:非常多配置都可在相应xml中配置),以及很多其它组件(ActionMapping、ActionForm等)处理支持得以使用,就像有一把水果刀,突然给了你一把多功能瑞士军刀,为何不用呢?

          总的来讲struts会自己主动创建、组装、校验和最后处理 Action对象所相应的ActionForm。 这样Action 就能够直接从 ActionForm bean 取得它须要的数据以及渲染到最后的jsp中。

           

    版权声明:本文博主原创文章。博客,未经同意不得转载。

  • 相关阅读:
    ios js交互
    再次记录 cocoapods
    CABasicAnimation
    mysql授权
    很简单的代码,但是无法解释的错误
    4款开源免费的数据可视化JavaScript库
    【工具】获取窗口与控件信息
    从网易搬家来的49篇日志
    Git Extensions system.invalidoperationexception尚未提供文件名,因此无法启动进程
    哆啦A梦欺骗了你!浏览器CSS3测试遭质疑
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/4849800.html
Copyright © 2011-2022 走看看