1. 程式人生 > >簡單理解struts1和struts2

簡單理解struts1和struts2

比較

沒有系統的學習過,僅憑藉一個Struts實驗和一個struts2實驗過程比較,闡述個人對著倆種框架的看法。
Struts2作為後來者,必然相對於struts有進一步的改進,個人感覺倆者之間的區別
1. struts嚴重依賴與servlet,struts中的action類依賴於servlet的API,直觀的將,需要在servlet標籤中設定對應的action,當action被呼叫時,如下,excute()方法需要使用HttpServletRequest和HttpServletResponse作為引數,而struts2不需要引數,

public class RegisterAction
extends Action{
public ActionForward execute(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response)throws Exception{ return mapping.findForward("success"); }
  1. Struts1使用ActionForm物件捕獲輸入資料,類似Action,所有的Actionform必須擴充套件基類,因為javabean不能在actionform或action中使用,還需要其他的多餘的類來輔助儲存輸入資訊,進行訊息傳遞,而struts2可以直接通過

    <struts:property value="userName"/>

    在jsp頁面中獲取action中的成員變數
  2. struts1模組中所有Action共享一個生命週期,而Struts2支援通過攔截器堆疊,為每一個Action建立不同的生命週期

Struts流程

  • 客戶端傳送.action請求
  • 過濾器篩選,路徑匹配,跳轉到struts.xml
  • struts.xml進行action對應的匹配,建立例項
  • 呼叫action的excute方法,執行使用者的相關操作,業務邏輯
  • 根據action的返回結果,在struts.xml中找到相應的返回資訊

問題

研究了一晚上的問題,web.xml到struts-config.xml或struts.xml的對映問題,個人理解,假設你用了struts或struts2框架,web.xml會預設去尋找struts-config.xml或struts.xml檔案,可以理解為,已經存在.xml檔案的屬性,我們只需要設定好對應路徑,甚至,在struts2中不需要設定路徑,只需要把struts.xml放在src資料夾下面,struts執行時先找struts.xml讀取裡面的配置,目前,我認為是不能修改這個檔名,就老老實實按照框架要求實驗。

實驗測試

對於struts中web.xml中

<init-param>
        <param-name>config</param-name>
        <param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>

任意改變<param-name>config</param-name>中config的值,對於結果無影響,但同時改變<param-value>/WEB-INF/struts-config.xml</param-value>中struts-config.xml的檔名,以及其對應在資料夾中的名字,網頁無法訪問,得到結論,struts-config.xml名字需固定不變
同時struts2中web.xml中壓根沒有struts.xml的對映,可以認為也是框架內部已經預設固定會有這個struts.xml檔案,而且路徑位置固定在src資料夾中,通過實驗驗證確實,當struts.xml改個名字或放在WEB-INF檔案架下面是,網頁會無法訪問,猜想正確

總結

struts-config.xml是struts1的配置檔案,用來配置struts1的form,action等。
struts.xml 是struts2的配置檔案,用來配置struts2的action等。