zoukankan      html  css  js  c++  java
  • Struts2架构分析和执行机制

    实例分析

        1.在浏览器中输入url地址后,会通过http协议发送给tomcat,tomacat收到请求后查看訪问的是哪个

    webapplication(例如以下图的Struts2_0100_Introduction),tomcat把Struts2_0100_Introduction交给相应的

    webapplication程序去处理。



        2.之后会參考Struts2_0100_Introduction下的相应的web.xml文件,将请求交给Struts2Filter去处理



    (“/*”为这个项目中的全部文件,全部的项目请求都会被捕捉)

        3.filter会调用dofilter。參考Struts.xml


    (1)在參考Struts.xml时首先会參考namespace
    (2)之后找相应的action
    (3)找相应的result
    (4)找到相应的result后会将相应的请求给jsp文件
    (5)jsp文件将内容反馈给client



    Struts2执行机制


    从图中能够看出一个请求在Struts2中的处理步骤例如以下:

        1、client初始化一个指向Servlet容器(比如Tomcat)的请求;

        2、这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器。

    这个过滤器对于Struts2和其它框架的集成非常有帮助,比如:SiteMesh Plugin)。

        3、接着FilterDispatcher被调用。FilterDispatcher询问ActionMapper来决定这个请求是否须要调用某个

    Action;

        4、假设ActionMapper决定须要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy;

        5、ActionProxy通过Configuration Manager询问框架的配置文件,找到须要调用的Action类;

        6、ActionProxy创建一个ActionInvocation的实例。

        7、ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)

    的调用。

        8、一旦Action运行完成,ActionInvocation负责依据struts.xml中的配置找到相应的返回结果。返回结果通常

    是(但不总是,也可能是另外的一个Action链)一个须要被表示的JSP或者FreeMarker的模版。在表示的过程中能够

    使用Struts2框架中继承的标签。在这个过程中须要涉及到ActionMapper。


    核心控制器


        FilterDispatcher是早期struts2的过滤器,后期的都用StrutsPrepareAndExecuteFilter了,如 2.1.6、

    2.1.8。StrutsPrepareAndExecuteFilter名字已经非常能说明问题了,prepare与execute,前者表示准备,能够说是指

    filter中的init方法,即配制的导入;后者表示进行过滤,指doFilter方法。即将request请求,转发给相应的

     action去处理。能够把他拆分成StrutsPrepareFilter和StrutsExecuteFilter,能够在这两个过滤器之间加上我们自

    己的过滤器.!StrutsPrepareAndExecuteFilter是控制器的核心。就是MVC的Struts 2实现中控制层(Controller)的

    核心。


        三个初始化參数:    

          1、config參数:指定要载入的配置文件。逗号切割。

      

          2、actionPackages參数:指定Action类所在的包空间。逗号切割。    

          3、configProviders參数:自己定义配置文件提供者,须要实现ConfigurationProvider接口类。

    逗号切割。

     
        
    想想为什么这么麻烦。中间要经过一次中转?

        将请求和拿到的结果(视图)分开,要想换成别的视图直接配一下result就能够了。更灵活。和我MVC非常像。



  • 相关阅读:
    HDU 3829 Cat VS Dog (最大独立集)【二分图匹配】
    POJ 2594 Treasure Exploration (Floyd+最小路径覆盖)
    HDU 1054 Strategic Game (最小点覆盖)【二分图匹配】
    HDU 4185 Oil Skimming 【最大匹配】
    HDU 2389 Rain on your Parade 最大匹配(模板题)【HK算法】
    HDU 1281 棋盘游戏 (枚举+最大匹配)
    HDU 1045 Fire Net 【二分图匹配】
    POJ 1904 King's Quest (强连通分量+完美匹配)
    HDU 4635 Strongly connected (强连通分量+缩点)
    POJ 2631 Roads in the North (模板题)(树的直径)
  • 原文地址:https://www.cnblogs.com/lytwajue/p/6768042.html
Copyright © 2011-2022 走看看