国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

JBuilder2005 Struts深度體驗之概述

2024-07-21 02:15:17
字體:
來源:轉載
供稿:網友

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

  圖 1表示一個基于java技術典型的mvc網絡應用,從中可以看出mvc中的各個部分對應于j2ee哪些實現技術。


圖 1 mvc和j2ee技術

  在利用model 2之前,我們把所有的表示邏輯和業務邏輯都集中在一起(如我們前兩個專題中的login.jsp),有時也稱這種應用模式為model 1,model 1的主要缺點就是緊耦合,復用性差,維護成本高。

  由于struts就是基于model2實現的框架,所以它底層的機制也是mvc,我們通過圖 2描述struts的具體實現:


圖 2 struts mvc實現


  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通過一個活動圖更具體描述接受請求直至返回響應的整個過程:


圖 3 struts接受并返回響應的中間過程

  struts1.1新增功能

  1、多模塊的支持

  我們知道,在struts 1.0中,只能在web.xml中為actionservlet指定一個struts配置文件(struts-config.xml),這對一個只需一兩個人開發的小系統當然沒有任何問題,但如果一個多人開發的大中型應用程序,問題就產生了。因為許多開發人員可能同時都需要修改struts配置文件,這樣肯定會造成一定程度的資源爭奪,可能會出現彼此覆蓋的情況,這樣勢必會影響開發效率并引起開發人員的抱怨。

  在struts 1.1中,為了解決這個并行開發的問題,提出了兩種解決方案:

  ·多個配置文件

  支持多個配置文件,是指你能夠為actionservlet同時指定多個xml配置文件,文件之間以逗號分隔,請看下面web.xml中關于多個struts配置文件的聲明示例:

   代碼清單 1 多個struts配置文件

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>


  通過這種方法,你可以為每一個模塊定義一個配置文件,由于項目一般按模塊劃分工作,這樣就大大地減小了沖突的概率。

  ·獨立的模塊

  但是,多個配置文件存在一個潛在的問題:不同的配置文件之間會產生沖突,因為在actionservlet初始化的時候多個配置文件還是要合并到一起。比如,在struts-config.xml中配置了一個名為errordbaccess的<exception>,而在book-struts-config.xml中也配置了一個同樣的<exception>,這樣就產生沖突了。

  為了徹底解決這種沖突,struts 1.1中引進了模塊(module)的概念。一個模塊就是一個獨立的子系統,對應一個獨立的配置文件,actionservlet將不同模塊的配置文件保存在各自獨立的moduleconfig對象中的。

  下面是兩個獨立模塊的配置方式:

  代碼清單 2 多模塊配置方式

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. …


  通過這種方式,我們配置了兩個模塊,一個模塊名為config,而另一個名為config/book。

  ·動態actionform支持

  actionform表示http頁面表單的數據,可以將其看成視圖頁面數據的服務器映射,它負責保存視圖中的數據供控制器或者其他視圖使用。此外,它還負責數據有效性的驗證,所以struts 1.1文檔把它比作http和action之間的防火墻,這足以體現actionform在視圖和控制器之間的過濾器作用。

  由于actionform對應于http頁面表單,所以隨著頁面的增多,你的actionform將會急聚增加。動態actionform(dynaactionform)即為減少actionform的數目被設計出來,利用它你不必創建一個個具體的actionform類,只需要在配置文件中配置出所需的虛擬actionform,而由struts框架通過配置文件動態創建這個actionform。例如,代碼清單 3通過指定<form-bean>的type為"org.apache.struts.action.dynaactionform"來創建一個動態的actionform--loginform。

  代碼清單 3 配置一個動態actionform

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>


  dynaactionform將屬性保存在一個map對象中,同時提供相應的get(name)和set(name,value)方法,其中參數name是要訪問的屬性名,而value是一個object。例如要訪問dynaactionform中bookname的值,可以采用string bookname = (string)get("bookname")方法,由于bookname存儲在map中,所以要進行強制轉換。

  由于dynaactionform通過配置文件產生,并沒有一個實體對象類,如果要對動態actionform對象進行校驗需要使用dynavalidatorform,它是dynaactionform的子類,它能夠提供動態actionform和動態表單輸入驗證的功能。檢驗規則在validation.xml配置文件中定義,而這些規則的所對應的實現函數在validator-rules.xml文件中定義。

  ·通過配置方式實現異常處理

  struts1.1允許以配置方式進行異常處理,配置方式可以避免在action中通過硬編碼來處理異常,從而提高應用程序異常處理的靈活性和可維護性。一般情況下,一個異常處理對象可以通過以下步驟實現:

  1.實現org.apache.struts.action.exceptionhandler的子類,覆蓋execute()方法,在該方法中處理異常并且返回一個actionforward對象。

  2.在配置文件中配置異常處理對象,你可以配置一個全局的處理類或者單獨為每個action配置處理類。

  代碼清單 4定義了一個全局的處理類testexceptionhandler,它被用來處理所有的異常。

  代碼清單 4 一個全局宣告式異常處理的配置

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. …


  type屬性定義了匹配的異常,path定義了異常發生后轉發的地址,而handler指定在轉發前對異常的特殊處理,如果沒有提供handler,默認的處理類org.apache.struts.action.exceptionhandler。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 奉节县| 休宁县| 时尚| 怀集县| 晋中市| 襄城县| 石泉县| 进贤县| 宝鸡市| 东辽县| 禹城市| 许昌县| 开平市| 舞阳县| 临猗县| 昌黎县| 临城县| 察雅县| 祥云县| 城口县| 德保县| 若尔盖县| 新乡市| 威海市| 达尔| 辽阳市| 扶风县| 荃湾区| 桃园市| 齐齐哈尔市| 宜城市| 田东县| 瑞昌市| 博湖县| 翼城县| 清水县| 陵川县| 郓城县| 广安市| 贺兰县| 隆尧县|