【SSH之旅】一步学习的步Struts1相框(三):分析控制Struts1示例
部分博客,,先后實施了Struts抽樣。現在我們來分析這個樣本。具體解釋Struts1。
? ? ? ? ? ? ?
Struts1的幾個核心組件是值得我們注意的:?
? ? ? ? (1)ActionServlet(核心控制器)。??
? ? ? ? (2)ActionForm(接收頁面中傳過的數據)。?
? ? ? ? (3)Action(是控制器,主要是從ActionForm中接收頁面傳進來的數據,然后進行邏輯處理)。?
? ? ? ? (4)ActionForward(頁面跳轉。跳轉到jsp組件)。?
? ? ? ? (5)ActionMapping(配置每一個Action所相應的映射關系)。?
詳細的工作流程例如以下:?
? ? ? (1)ActionServlet是在web.xml中配置的一個自己主動啟動項。
當webserver啟動時,也就同一時候實例化了 ActionServlet類,ActionServlet會去初始化struts-config.xml的配置信息,并將其載入到內存中。去實例化action-bean。actionform等對象。 ?
? ? ? (2)當ActionServlet接收到來自client的請求時,就會去檢索和去請求相匹配ActionMapping實例,假設沒有找到則返回500錯誤.?
? ? ? (3)假設找到了就檢查相應的ActionForm實例是否存在?a、假設存在,先把該實例相關數據reset清空一下。然后就把用戶提交的表單數據填充到ActionForm 實例中. b、假設不存在。就創建一個ActionForm對象,再把用戶提交的表單數據填棄到ActionForm實例中?
? ? ? (4)接著,再依據配置。看看是否要對表單進行驗證(validate),假設須要驗證,則調用ActionForm的 validate()方法對表單進行驗證。a、假設驗證沒通過。則返回錯誤信息。?b、假設不須要驗證。或者須要驗證但validate方法返回null或者是返回一個不包括ActionMessage的ActionErrors對象的話。表明驗證成功。
? ? ?(5)ActionServlet依據ActionMapping實例所包括的映射信息決定將請求發送給哪個Action,假設相應的 ? Action實例不存在,則創建該Action的實例,然后調用該Action的execute()方法 ?
? ? ?(6)運行完Action實例的execute()方法后,該方法會返回一個ActionForward對象。 ?
? ? ?(7)ActionServlet再把client發過來的請求。轉發給ActionForward對象所指向的JSP組件。 ?
? ? ?(8)ActionForward所指向的JSP組件再生成動態網頁,送回給client。
Struts1與傳統MVC有什么差別呢?
? ? ? ?傳統MVC(Model2)中:
? ? ? ? ? ? ? ? ? ? ??
? ? ? ?MVC設計模式中。先由客戶發送HTTP請求,控制器Servlet會接收用戶發送的全部請求。然后Servlet調用javabean。將顯示結果通過JSP頁面進行顯示。
?
? ? ? 傳統MVC和Struts對比:
? ? ? ? ? ? ?
總結:
? ? ? ??struts1中,依舊存在servlet(控制器)。但這個時候卻是ActionServlet。由struts-config.xml配置文件控制,action就相當于MVC中一個個的servlet,由Action調用javabean完畢一個個詳細的操作業務。
? ? ? ? Struts1比傳統的MVC模式多了三個組件。即標簽庫,ActionForm和Action,關于Struts1和MVC的關系。我感覺MVC是一個標準。而Struts1是實現。MVC像一個接口,struts1實現了這個接口。
版權聲明:本文博主原創文章。博客,未經同意不得轉載。
轉載于:https://www.cnblogs.com/zfyouxi/p/4821402.html
總結
以上是生活随笔為你收集整理的【SSH之旅】一步学习的步Struts1相框(三):分析控制Struts1示例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《浪潮之巅》--百年帝国读后感
- 下一篇: 练习一:GitHub Desktop下载