從此圖中簡單描述一下struts2的運行流程:
1、客戶端請求一個HttpServletRequest的請求,如在瀏覽器中輸入http://localhost: 8080/bookcode/Reg.action就是提交一個(HttpServletRequest)請求。
2、這個請求經過一系列的過濾器(Filter)如(ActionContextCleanUp、其他過濾器(SiteMesh等)、 FilterDispatcher)。注意:這里是有順序的,先ActionContext CleanUp,再其他過濾器(Othter Filters、SiteMesh等),最后到FilterDispatcher。
FilterDispatcher是控制器的核心,就是MVC的Struts 2實現中控制層(Controller)的核心。
3、FilterDispatcher詢問ActionMapper是否需要調用某個Action來處理這個(HttpServlet Request)請求,如果ActionMapper決定需要調用某個Action,FilterDispatcher則把請求的處理交給ActionProxy
4、ActionProxy通過Configuration Manager(struts.xml)詢問框架的配置文件,找到需要調用的Action類。例如,用戶注冊示例將找到UserReg類
5、ActionProxy創建一個ActionInvocation實例,同時ActionInvocation通過代理模式調用Action。但在調用之前,ActionInvocation會根據配置加載Action相關的所有Interceptor(攔截器)。
6、 一旦Action執行完畢,ActionInvocation負責根據struts.xml中的配置找到對應的返回結果result
7、最后通過HTTPServletResponse返回客戶端一個響應。
需要注意的是:
1、調用Action的過程前后,涉及到相關攔截器(Intercepter)的調用
2、Struts 2的核心控制器是FilterDispatcher,有3個重要的方法:destroy()、doFilter()和Init(),可以在Struts 2的下載文件夾中找到源代碼,
執行順序是:init()---->doFilter()-------->destroy()
--從前段到后端的文件走向
從瀏覽器頁面發送請求---到web.xml中,此處配置的是過濾器,對請求來的路徑和請求進行過濾,並經過核心控制器等的一些列處理,產生一個action有關的請求。---進入struts.xml,並在struts.xml中判斷進入哪一個action操作,此時產生一個代理對象,並對該請求進行處理和操作,---然后根據struts.xml中的result返回處理,進行頁面跳轉和相應。
參考引用:http://blog.sina.com.cn/s/blog_6ef516d0010188hm.html