struts是基于model 2實現的技術框架,model 2是經典的mvc(model,view,control)模型的web應用變體,這個改變主要由于http協議的無狀態性引起的。model 2的目的和mvc一樣,也是利用控制器來分離模型和視圖,達到不同層間松散耦合的效果,提高系統靈活性、復用性和可維護性。在多數情況下,你可以將model 2與mvc等同起來。
  圖 1表示一個基于java技術典型的mvc網絡應用,從中可以看出mvc中的各個部分對應于j2ee哪些實現技術。


  1.框架初始化
  struts框架總控制器(actionservlet)完成所有初始化工作。總控制器是一個servlet,它通過web.xml配置成自動啟動的servlet,讀取配置文件(struts-config.xml)的配置信息,為不同的struts模塊初始化相應的moduleconfig對象。配置文件中的action映射定義都保存在actionconfig集合中,配置文件中其他配置信息分別保存在controlconfig集合、formbeanconfig集合、forwardconfig集合和messageresourcesconfig等集合中。
要特別指出的是,初始化動作在web容器啟動時自動完成,初始化完成后,它將通過url匹配映射截獲所有以.do結尾的url請求。
2.客戶端發送一個http請求
用戶通過提交表單或調用url向web應用程序器提交一個請求,請求的數據用http協議上傳給web服務器。
3.總控制器接截獲這個請求并實例化form bean
控制器接收http請求,并從actionconfig中找出對應該請求的action子類,如果沒有對應的action,控制器直接將請求轉發給jsp或者靜態頁面。如果有對應的action且這個action有一個相應的action form,actionform被實例化并用http請求的數據填充其屬性,然后保存在servlet context中(request或session中),這樣它們就可以被其它action對象或者jsp調用。
此外,還可以在actionform填充數據后還可以調用validate()進行數據有效性自檢,并且可以返回一個包含所有錯誤信息的actionerrors對象,如果actionerrors不空,總控制器直接將請求返回到入口頁面。
4.控制器將請求轉交給具體的action處理
  控制器根據配置信息將請求切換到具體的action,這個form bean也一并傳給這個action的execute()方法。
  5.action完成具體的業務邏輯操作
  action很簡單,一般只包含一個execute方法,它負責執行相應的業務邏輯,如果需要,它也可能進行相應的數據檢查。執行完成之后,返回一個actionforward對象,控制器通過該actionforward對象來進行轉發工作。
  6.action返回目標響應對象給總控制器
  action根據業務處理的不同結果返回一個目標響應對象給總控制器,這個目標響應對象對應一個具體的jsp頁面或另外一個action。
  
  7.總控制器將http請求轉換到目標響應對象中。
  總控制器根據業務功能action返回的目標響應對象,將http請求轉換到這個目標響應對象中,一般情況下,它是一個具體的jsp頁面。
  8.目標響應對象將結果展現給用戶
  
  目標響應對象(jsp)將結果頁面展現給用戶。
  客戶端發送一個http請求,通過struts框架最后獲得一個http響應,這一過程非常重要,它是理解struts框架的重點。圖 2描述了struts框架的結構,而圖 3通過一個活動圖更具體描述接受請求直至返回響應的整個過程:

1. <servlet>
2. <servlet-name>action</servlet-name>
3. <servlet-class>org.apache.struts.action.actionservlet</servlet-class>
4. <init-param>
5. <param-name>config</param-name>
6. <param-value>
7. /web-inf/struts-config.xml, /web-inf/book-struts-config.xml
8. </param-value>
9. </init-param> 
10. <load-on-startup>1</load-on-startup>
11. </servlet>
1. …
2. <init-param>
3. <param-name>config</param-name>
4. <param-value>/web-inf/struts-config.xml</param-value>
5. </init-param>
6. <init-param>
7. <param-name>config/book</param-name> 
8. <param-value>/web-inf/book-struts-config.xml</param-value>
9. </init-param>
10. …
1. <form-beans>
2. <form-bean name="bookform" type="org.apache.struts.action.dynaactionform"> 
3. <form-property name="bookid" type="java.lang.string"/>
4. <form-property name="isbn" type="java.lang.string"/> 
5. <form-property name="bookname" type="java.lang.string"/>
6. <form-property name="author" type="java.lang.string"/>
7. </form-bean> 
8. </form-beans>
1. …
2. <global-exceptions> 
3. <exception 
4. handler="com.superabc.testexceptionhandler" 
5. key="error.message" 
6. path="/fail.jsp" 
7. scope="request" 
8. type="java.lang.exception"/>
9. </global-exceptions>
10. …
新聞熱點
疑難解答