- JavaWeb整合開發實例精通:Struts+Hibernate+Spring
- 閆術卓 吳峻申
- 987字
- 2018-12-31 14:45:32
第1章 Struts概述
Struts是目前世界上所有使用Java語言進行J2EE項目開發的人員,經常使用的基于MVC模式的Web項目開發框架之一。它也是目前最早的Web項目開發框架。由于它的易學易用,對入門者來說學習所花時間少,也容易上手,因此使用Struts的開發人群是目前所有Web項目開發框架使用人群中最大的。可是近幾年,隨著新的視圖技術(如FreeMarker、Velocity技術),還有設計模式的大行其道,開發人員越來越覺得Struts在這些方面有先天的不足,并不能很優雅和優秀地完成Web項目開發工作。
原因有很多種,一方面是Struts出現的時間比較早,現在流行的技術都是在Struts后出現的,因此必然導致Struts對新技術的支持不夠。另一方面很多新興的Web項目開發框架都很好地體現了現有開發理念的使用,對Struts的影響和威脅都很大,所以近幾年參加工作的很多IT從業人員都不喜歡使用Struts,而是采用Tapestry、JSF等框架進行他們的開發工作。
值得慶幸的是,Struts的開發人員也意識到了Struts的這些缺點,因此在2006年Struts和另外一個Web項目開發框架WebWork進行了合并,形成了新的Web項目開發框架Struts 2。這個所謂的Struts 2其實就是WebWork的一個新版本。
●一方面WebWork在IOC、基于接口編程、新的視圖技術支持等方面,具有先天優勢。
●另一方面Struts使用人群的龐大以及學習曲線的平緩,還有它的技術延續性,使得這兩個項目開發框架各取所長,互相補充,形成了一個更有競爭力,更具有健壯性的新框架。
所以Struts并沒有過時,它已經進化成一個嶄新的Web項目開發框架。本書這部分就針對Struts 2的具體技術細節進行了詳細附例的說明。而本章則把Struts和Struts 2之間的“恩恩怨怨”,以及同類的Web項目開發框架產品和Struts 2的關系具體介紹。希望讀者在學習Struts 2技術之前,能對Struts 2有清晰正確的認識和了解。
1.1 Struts歷史發展過程
Struts這個名字來源于在建筑和滑翔機中用來支持的金屬架。Struts的開發者大概是希望用該框架來支持JSP、Servlet、Java這些技術在Web項目中的應用。
2001年春天,Struts的第一個版本在apache網站上發布時,它只提供了一種分離視圖和業務應用邏輯的Web應用方案。因為在Struts之前,開發人員都是在JSP里寫入處理業務邏輯的Java代碼,尤其是涉及數據庫和頁面Form表單數據交互時,開發人員在每個頁面都要寫入像連接數據庫這樣的Java代碼,導致了大量的代碼冗余。而且每個頁面顯示速度和性能都不是很好,這是因為頁面中存儲數據的Java對象都需要從內存中讀取,勢必影響性能。
所以當像Struts這種Web應用方案一出現,每個開發人員都把它視為把自己從繁重的開發工作中解放出來的利器。所以在2001~2003這幾年,大量的為企業做Web應用系統的IT公司,在項目架構中都采取Struts作為開發中必須使用的框架。
1.1.1 Model設計模式的演進
從市場推廣的角度來看,Struts也是一個創建知名品牌的案例。由于它的知名度,很多開發人員開始熟悉Struts的應用,一批批成功應用Struts的Web項目,如雨后春筍般顯現出來,這算是入門者依據前人的優秀經驗,應用Struts去實現更多的Web項目。隨著它作為項目開發框架的公司和人員越來越多,作為公司的領導層也讓實際開發人員把注意力更加著重放在行業知識、業務領域的研究實現工作上。
其實在Struts出現之前,使用J2EE開發的Web項目都是使用Model1的設計模式,Model1模式有三種常用的開發方式:
(1)之前所述的將Java代碼寫在JSP中,就是第一種常見的方式。
(2)還有一種就是將部分業務邏輯實現代碼封裝成為JavaBean,在JSP中調用這些JavaBean。此種方式解決之前所述冗余代碼的問題,而且從內存中只讀取一次封裝了數據的Java對象,沒必要頻繁地讀取Java對象。它是Model1模式的典型結構,如圖1.1所示。
(3)第三種就是將Java中已經是標準的內置對象在JSP中調用。比如J2EE的JDBC(JSP中直接使用JDBC的標準類和方法)。實際上和第二種方式是類似的,只不過第二種方式中調用的是開發者自己開發的,而第三種方式調用的是Java的標準類和方法。
Model1模式對于中小項目的開發還是很有優勢的,有些企業為了避免開發帶來的風險,同時這些企業的相關環境決定使用其他模式也沒有那么迫切,因此還在使用這種模式開發自己的企業應用。但是它有以下明顯的缺點:
(1)首先,如果企業級應用需要改動原有需求或者新增需求,那勢必需要改動很多代碼,開發工作量會很大。
(2)其次,就是業務邏輯代碼和使用視圖來表示頁面的代碼是在JSP中混合的,如果某個JSP頁面需要重用,是根本無法實現的。因為業務邏輯在每個頁面是不同的,無法用一個JSP中的業務邏輯套用到另外一個JSP頁面中。

圖1.1 Model1模式結構
基于這些原因,在開發者中有人提出了Model2模式,這種模式保留了Model1的優點,又針對它的缺點進行了修正和改良。Model2模式基礎概念是組件化,它的設計者在最初的設想是開發Web項目時,如果需要實現某個業務邏輯將封裝好的組件進行調用,而開發者不需要再關心該組件內部是如何實現的。
這就好比購買了一臺電腦,直接開機使用就可以,沒必要關心電腦內部是如何組成的,內部又是怎樣實現讓用戶使用電腦功能這些細節化的東西。該模式采用業務邏輯、視圖分離的方法,讓JSP只負責展現表示功能,相應的業務邏輯由Java來實現,當開發新的需求或者修改原有需求時沒必要在JSP中更改,而且JSP也可以被復用。具體結構如圖1.2所示。

圖1.2 Model2模式結構
- VMware View Security Essentials
- 高效微控制器C語言編程
- Mastering Kotlin
- JavaScript+jQuery開發實戰
- 跟小海龜學Python
- Spring Cloud、Nginx高并發核心編程
- Java Web應用開發技術與案例教程(第2版)
- SQL Server 2016數據庫應用與開發
- Android移動開發案例教程:基于Android Studio開發環境
- 石墨烯改性塑料
- 軟件工程與UML案例解析(第三版)
- Mudbox 2013 Cookbook
- Microsoft XNA 4.0 Game Development Cookbook
- Python深度學習入門:從零構建CNN和RNN
- Learning Node.js for Mobile Application Development