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中的中文亂碼問題,可以利用過濾器