1. 程式人生 > >Struts 2

Struts 2

str dex 配置信息 動作 業務邏輯 信息 組件 eem 需要

  Struts 2是基於MVC模式的Web框架,主要包括控制器組件==>C(包括核心控制器StrutsPrepareAndExecuteFilter、業務控制器Action)、模型組件==>M(包括業務邏輯組件和數據庫訪問組件)和視圖組件==>V。

  模型組件==>M:主要是由JavaBean或者是EJB(Enterprise JavaBean)組成。

  視圖組件==>V:主要是由html、jsp、Struts2標簽等視圖技術。

  控制器組件==>C:主要是由核心控制器和業務控制器組成。

    核心控制器:過濾器類StrutsPrepareAndExecuteFilter稱為Struts2的核心控制器;

    業務控制器:業務控制器Action,負責處理業務特定請求的類。

  Struts 2的架構:

    (1)StrutsPrepareAndExecuteFilter是Struts 2的核心控制器,根據ActionMapper的結果來決定是否處理請求,如果ActionMapper指出該URL應該被Struts 2處理,那麽就執行Action處理,並停止過濾器鏈上還沒執行的過濾器。

    (2)ActionMapper提供了http請求與Action執行之間的映射,即ActionMapper判斷請求是否應該被Struts 2處理,若需要,則ActionMapper需要返回一個對象來描述對應的ActionInvocation的信息。

    (3)ActionProxy是一個特別的中間層,位於Action與xwork之間,可以根據需求來引入更多的實現方式,如WebService來實現等。

    (4)ConfigurationManager 是xwork配置的管理中心,可以理解為struts.xml配置文件在內存中的對應。

    (5)struts.xml是Struts 2的應用配置文件,負責URl與Action之間映射的配置,以及執行後頁面跳轉的Result配置等。

    (6)ActionInvocation:調用並執行Action,它擁有一個Action實例和這個Action所依賴的攔截器實例。actionInvocation執行攔截器鏈、Action及相應的Result.

    (7)Interceptor(攔截器):自動攔截Action,提供了再Action運行之前或在Result運行之後可能需要執行的某些功能代碼。類似於javax.servlet.Filter。

    (8)Action:是執行Struts 2中的動作執行單元,用來處理用戶請求,並封裝業務所需要的數據。

    (9)Result:是不同視圖類型的抽象封裝類型,不同的視圖類型會對應不同的Result實現,Struts 2中支持多種視圖類型,如jsp、FreeMarker等.

    (10)Templates:各種視圖類型的頁面模板,如jsp頁面。

    (11)TagSubSystem:Struts 2 的標簽庫,它抽象了3種不同的視圖技術:jsp、velocity和freemarker,可以再不同的視圖技術中直接使用這些標簽。

  Struts 2的工作流程:

    Struts 2框架的核心控制器負責攔截由<url-pattern>/*</url-pattern>指定的所有用戶請求,當用戶請求到達時,該Filter會過濾用戶的請求。當請求轉入Struts 2框架處理時會先經過一系列的攔截器,然後再轉到Action。Struts 2對用戶的每一次請求都會創建一個Action並運行,根據其返回值,按照Result配置信息,跳轉到新的服務(進入視圖或Action)。

    流程:

      (1)用戶發送請求給核心控制器StrutsPrepareAndExecuteFilter。

      (2)StrutsPrepareAndExecuteFilter詢問ActionMapper,是否是一個Struts 2的請求(是否返回一個非空的ActionMapper對象)。

      (3)若ActionMapper認為該請求是Struts 2請求,那麽讓核心控制器StrutsPrepareAndExecuteFilter將請求轉交給ActionProxy處理。

      (4)ActionProxy通過Configuration Manager 詢問框架的配置文件,確定需要調用Action類及Action方法。

      (5)ActionProxy創建一個Configuration的實例,進行初始化。

      (6)ActionInvocation實例在調用Action的過程前後,涉及相關攔截器(Interpretor)的調用。

      (7)Action執行完畢,ActionInvocation負責根據struts.xml中的配置找到相應的返回結果。調用結果的execute方法(或者配置指定的方法),渲染結果。

      (8)執行各個攔截器invocation.invoke()之後的代碼。

      (9)把結果發送到客戶端。

Struts 2