struts是一種MVC架構的web層處理框架,struts1和struts2有些差別,不過根本原理是一樣的。都是通過struts的核心類來處理web頁面的請求,將請求分發到不同的action進行處理,并將結果返回給web客戶端。
1、Struts1的核心是一個servlet,ActionServlet,接收web頁面傳來的所有請求,然后根據struts的配置文件來分發這些請求到不同的Action,在Action中進行請求的處理,并與model進行交互;然后將結果向上返回到ActionServlet,渲染jsp頁面,給web客戶端。
Struts2的核心是一個filter,FilterDispatcher,原理與struts1相似。
如圖(struts1):

2、ActionServlet把請求交給action處理之前,struts1采用formbean的形式對于請求傳遞來的參數進行封裝。并且這個formbean也要配置到struts的配置文件中。
對于參數的處理,struts2也進行了改進,可以直接采用action中的get/set方法來獲取和設置參數的值,并且參數的值一直保留,直到action的生命周期結束。當然,struts2也可以處理將參數封裝到一個vo里,這樣,就避免了action中因為參數個數多造成的get、set方法過多的情況。這個vo既可以是程序員自定義的一個“formbean”(不必配置到配置文件中),也可以直接使用用程序中現有的vo,減少代碼量。
3、Action處理完成返回的結果顯示視圖封裝到ActionForward中,ActionForward通過struts的配置中的配置關聯到某個jsp頁面,或者另外一個請求(也就是重定向),struts1的重定向是不能夠加入參數的。
Struts2中的返回值是一個字符串,當然,這個字符串是通過struts的配置文件相關聯的,可以關聯到一個jsp頁面,也可以關聯到一個重定向請求。這個重定向請求不同于struts1,是可以包括參數的,可以直接賦值,也可以從action中動態賦值。