1. 程式人生 > >細談Struts2框架(一) Struts2框架之原理

細談Struts2框架(一) Struts2框架之原理

1.Struts發展歷程

Struts 最早是作為Apache Jakarta專案的組成部分,專案的創立者希望通過對該專案的研究,改進和提高JavaServer Pages、Servlet、標籤庫以及面嚮物件的技術水準。最初的struts1.x很快在企業開發中流行起來,與此同事,當時還有一個非誠優秀的web框架誕生,webwork,webwork簡潔、靈活功能強大,是一個標準的command模式框架實現,並且完全從web層脫離出來,但是webwork並沒有像struts那樣流行起來,而是進行了和struts合併。於是就誕生了Struts2。

2.Struts2 概述

Struts2是struts的下一代產品,是在struts1 和webwork 的技術基礎上進行了合併的全新的Struts2框架。Struts2以webwork 為核心,採用攔截器的機制處理使用者的請求,這樣的設計使得業務邏輯控制器能夠與servletAPI完全脫離開,所以Struts2可以理解為webwork的更新產品。雖然從struts1到struts2有著太大的變化,但是想對於webwork,Struts2的變化很小。

由於Struts是基於MVC模式的框架,Struts2也體現了MVC的設計思想。

上圖中描述了Struts2體系結構模型(model)、檢視(View)和控制器(Controller)。

Struts2 的核心元件Action 和攔截器。

3.Struts2的處理流程:

              

當用戶傳送請求後:

  1. 經過Struts2核心控制器(FilterDispatcher)
  • 注意:Struts2.1以前呼叫FilterDispatcher,在此之後呼叫StrutsPrepareAndExecuteFilter

    2. FilterDispatcher

被呼叫,詢問ActionMapper來決定這個請求是否需要呼叫某個Action

    3. 如果ActionMapper決定需要呼叫某個ActionFilterDispatcher把請求的處理交給ActionProxy

    4. ActionProxy通過configurationManager查詢Struts.xml配置檔案,讀取相關的配置資訊,找到需要呼叫的Action類。

    5.ActionProxy建立ActionInvocation的例項,接下來通過ActionInvocation呼叫Invok方法。

    6.Invok方法裡先處理相關Interceptor,最後處理

Action

    7.一旦Action執行完畢,ActionInvocation負責根據Strutsx.xml中的配置找到對應的返回結果(result通常是一個需要被表示的JSP或者FreeMarker的模板,也可能是另一個Action)

    8.Result資訊返回給ActionInvocation,再次執行相關Interceptor,順序跟之前的相反。

    9.產生HttpServletResponse返回到頁面請求。

    10. 最後將響應傳送給客戶端。

4.Spring3 MVC 與Struts2的區別: 

Struts2是一款流行的開源web框架,其核心元件主要是Action和攔截器,它與我們之前學的SpringMVC框架有什麼區別呢? 

首先從配置檔案上來說,Struts2採用傳統的XML配置方式,SpringMVC基於零配置的思想(除了配置SpringMVC-servlet.xml)之外;其次,Struts2是類級別的攔截,一個類對應一個request上下文。Springmvc是方法級別的攔截,一個方法對應一個request上下文;最後,SpringMVC方法基本上是獨立的,獨享request、response資料,請求資料通過引數獲取,處理結果通過modelMap返回,方法之間不共享變數。 而Struts2雖然方法之間也獨立,但是所有的Action共享變數。