struts是一種MVC架構的web層處理框架,struts1和struts2有些差別,不過根本原理是一樣的。都是通過struts的核心類來處理web頁面的請求,將請求分發(fā)到不同的action進行處理,并將結(jié)果返回給web客戶端。

1、Struts1的核心是一個servlet,ActionServlet,接收web頁面?zhèn)鱽淼乃姓埱螅缓蟾鶕?jù)struts的配置文件來分發(fā)這些請求到不同的Action,在Action中進行請求的處理,并與model進行交互;然后將結(jié)果向上返回到ActionServlet,渲染jsp頁面,給web客戶端。

Struts2的核心是一個filter,F(xiàn)ilterDispatcher,原理與struts1相似。

如圖(struts1):


    2、ActionServlet把請求交給action處理之前,struts1采用formbean的形式對于請求傳遞來的參數(shù)進行封裝。并且這個formbean也要配置到struts的配置文件中。

    對于參數(shù)的處理,struts2也進行了改進,可以直接采用action中的get/set方法來獲取和設置參數(shù)的值,并且參數(shù)的值一直保留,直到action的生命周期結(jié)束。當然,struts2也可以處理將參數(shù)封裝到一個vo里,這樣,就避免了action中因為參數(shù)個數(shù)多造成的get、set方法過多的情況。這個vo既可以是程序員自定義的一個“formbean”(不必配置到配置文件中),也可以直接使用用程序中現(xiàn)有的vo,減少代碼量。

    3、Action處理完成返回的結(jié)果顯示視圖封裝到ActionForward中,ActionForward通過struts的配置中的配置關聯(lián)到某個jsp頁面,或者另外一個請求(也就是重定向),struts1的重定向是不能夠加入?yún)?shù)的。

    Struts2中的返回值是一個字符串,當然,這個字符串是通過struts的配置文件相關聯(lián)的,可以關聯(lián)到一個jsp頁面,也可以關聯(lián)到一個重定向請求。這個重定向請求不同于struts1,是可以包括參數(shù)的,可以直接賦值,也可以從action中動態(tài)賦值。