(第2講)Struts的運行原理及開發流程

1、Struts的運行原理http://www.cnblogs.com/langtianya/archive/2013/04/09/3011090.html

 

(1)提交一個請求到web服務器

(2)web服務器把這個請求進行解析並轉發到Struts的ActionServlet(Controller),是struts框架的總控制器,是一個Servlet,它在web.xml中配置;(發送請求)

(3)ActionServlet在用戶提交請求時將數據放到對應的form對象中的成員變量中;(form填充)

(4)控制器根據配置信息對象ActionConfig將請求派發到具體的Action,對應的formBean一併傳給這個Action中的excute()方法。(請求派發)

(5)Action(也是控制器)一般只包含一個excute()方法,可以從ActionForm中獲得表單數據,它負責執行相應的業務邏輯(調用其它的業務模塊);完畢後返回一個ActionForward對象。服務器通過ActionForward對象進行轉發工作。(業務處理)

(6)Action將業務處理的不同結果返回一個目標響應對象給總控制器;(返回響應)

(7)總控制器根據Action處理業務返回的目標響應對象,找到對應的資源對象,一般情況下爲jsp頁面;(查找資源)

(8)目標響應對象將結果傳遞給資源對象,將結果展現給用戶。(響應用戶)

 

       控制器:大家可以看到有一個XML文件Struts-config.xml,與之相關聯的是Controller, ,它可以稱作爲Struts神經中樞。

       視圖:主要由JSP生成頁面完成視圖,Struts提供豐富的JSP 標籤庫: Html,Bean,Logic,Template等,這有利於分開在Struts中,承擔MVC中Controller角色的是一個Servlet,叫ActionServlet。ActionServlet是一個通用的控制組件。這個控制組件提供了處理所有發送到Struts的HTTP請求的入口點。它截取和分發這些請求到相應的動作類(這些動作類都是Action類的子類)。另外控制組件也負責用相應的請求參數填充 Action From(通常稱之爲FromBean),並傳給動作類(通常稱之爲ActionBean)。動作類實現核心商業邏輯,它可以訪問java bean 或調用EJB。最後動作類把控制權傳給後續的JSP 文件,後者生成視圖。所有這些控制邏輯利用Struts-config.xml文件來配置。表現邏輯和程序邏輯。

       模型:模型以一個或多個java bean的形式存在。這些bean分爲三類:Action Form、Action、JavaBean or EJB。Action Form通常稱之爲FormBean,封裝了來自於Client的用戶請求信息,如表單信息。Action通常稱之爲ActionBean,獲取從ActionSevlet傳來的FormBean,取出FormBean中的相關信息,並做出相關的處理,一般是調用Java Bean或EJB等。

       流程:在Struts中,用戶的請求一般以*.do作爲請求服務名,所有的*.do請求均被指向ActionSevlet,ActionSevlet根據Struts-config.xml中的配置信息,將用戶請求封裝成一個指定名稱的FormBean,並將此FormBean傳至指定名稱的ActionBean,由ActionBean完成相應的業務操作,如文件操作,數據庫操作等。每一個*.do均有對應的FormBean名稱和ActionBean名稱,這些在Struts-config.xml中配置。

       核心:Struts的核心是ActionSevlet,ActionSevlet的核心是Struts-config.xml。

2、開發Struts項目的流程

(1)先創建一個web工程

(2)吧Struts開發包引入到web工程,放到WEB-INF下的lib文件夾中

(3)編寫login.jsp文件,如果文件中報錯

The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path

是因爲配置路徑中沒有servelt-api.jar包,解決辦法是在配置路徑中添加tomcat中的包,具體方法可以見:http://jingyan.baidu.com/article/f79b7cb34f40569144023ef9.html

(4)編寫ActionForm(用戶表單)和Action,ActionServlet其實已經在Struts包中,所以不用我們自己寫,

編寫ActionForm(用戶表單)時注意:

a)、自己寫的ActionForm需要繼承ActionForm類

b)、定義屬性,有規範:定義的屬性應該和jsp的控件名稱一樣
    //如果有人質疑這個規範,說表單的屬性名字是不是應該和控件的名字一樣
    //其實只要getXXX和setXXX方法中的XXX和jsp控件名字一樣就行


編寫自己的Action類需要注意:

a)、需要繼承Action類

b)、需要重寫一個方法: execute會被自動調用,有點類似servlet->service->doGet()或者doPost()

public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        // TODO Auto-generated method stub
        return super.execute(mapping, form, request, response);
    }

c)、重寫的一個方法中的form對象,可以利用這個form對象獲得自己寫的ActionForm中的數據,

(5)編寫struts-config.xml文件,此文件用於配置Action和ActionForm,及其對應關係、跳轉位置等。這個文件一般放在/WEB-INF目錄下

其中如果不熟悉struts-config.xml文件中的屬性,可以參照

http://wenku.baidu.com/link?url=xxET8-pl5AbDl6BZ4IvUjUhvmAvYn3FJ9mm2hCjjwBnRmVWVQJyzqGw0bRHqUiWvTw2bTCkPIxV0o6ZALYf64pyUPPKVg5GyxDQ_9Vcd0Fy

http://wenku.baidu.com/link?url=52ADTuYho3GufyJWmbnznNNH8XtUL6iL3Tp2LtVAkGdoc-H_O4tLXW92Ms4DwdDpZm3In16icl0soC0soQAO5YowYEzUFOQlpyc90adlVqO

(6)編寫跳轉成功界面和錯誤頁面

(7)在web.xml中配置ActionServlet

(8)Struts中的中文亂碼問題,可以利用過濾器

發佈了84 篇原創文章 · 獲贊 21 · 訪問量 18萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章