整個(gè)請求過程可以分為六步驟:
- 一個(gè)請求產(chǎn)生并經(jīng)由框架處理 - 框架根據(jù)請求匹配相應(yīng)的配置,如使用哪些攔截器,action 類和結(jié)果。
- 請求通過一系列的攔截器 - 攔截器,和攔截器組經(jīng)配置后,能處理不同等級的請求,它們?yōu)檎埱筇峁┝烁鞣N預(yù)處理,切面處理。這和Struts的使用 Jakarta Commons Chain 構(gòu)件的 RequestProcessor類很相似。
- 調(diào)用 Action - 產(chǎn)生一個(gè)新的action對象實(shí)例,并提供請求所調(diào)用的處理邏輯的方法。Struts2 可以在配置action時(shí)為請求分配其指定的方法。我們在第二部文章中將對這步驟進(jìn)行進(jìn)一步討論;
- 調(diào)用產(chǎn)生的結(jié)果 - 獲取通過action的方法處理后返回來的結(jié)果,匹配其result class并調(diào)用產(chǎn)生的實(shí)例。有種情況是在UI模板去生成HTML時(shí)才去處理這些結(jié)果。如果在這種情況下,在Struts2 模板中的tags能直接返回到 action 中,取結(jié)果來呈現(xiàn)界面。
- 請求再次經(jīng)過一系列的攔截器處理后返回 - 請求反順序通過與原來進(jìn)入時(shí)的攔截器鏈, 當(dāng)然,你也可以配置在這個(gè)過程中減少或增加攔截器處理.
- 請求返回到用戶 - 最后一步是由 control 返回到servlet。通常是生成HTML返回到user, 但你也可以指定返回的HTTP頭或HTTP重定向。
最明顯的就是Struts2是pull-MVC 架構(gòu),就是可以直接從Action中獲取所需要的數(shù)據(jù),而不是像Struts那樣必須把 beans 存到page, request,或者session中才能獲取。