細談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的處理流程:
當用戶傳送請求後:
- 經過Struts2核心控制器(FilterDispatcher)
- 注意:在Struts2.1以前呼叫FilterDispatcher,在此之後呼叫StrutsPrepareAndExecuteFilter。
2. FilterDispatcher
3. 如果ActionMapper決定需要呼叫某個Action,FilterDispatcher把請求的處理交給ActionProxy
4. ActionProxy通過configurationManager查詢Struts.xml配置檔案,讀取相關的配置資訊,找到需要呼叫的Action類。
5.ActionProxy建立ActionInvocation的例項,接下來通過ActionInvocation呼叫Invok方法。
6.在Invok方法裡先處理相關Interceptor,最後處理
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共享變數。