官术网_书友最值得收藏!

第1章 Struts概述

Struts是目前世界上所有使用Java語言進行J2EE項目開發(fā)的人員,經(jīng)常使用的基于MVC模式的Web項目開發(fā)框架之一。它也是目前最早的Web項目開發(fā)框架。由于它的易學(xué)易用,對入門者來說學(xué)習(xí)所花時間少,也容易上手,因此使用Struts的開發(fā)人群是目前所有Web項目開發(fā)框架使用人群中最大的。可是近幾年,隨著新的視圖技術(shù)(如FreeMarker、Velocity技術(shù)),還有設(shè)計模式的大行其道,開發(fā)人員越來越覺得Struts在這些方面有先天的不足,并不能很優(yōu)雅和優(yōu)秀地完成Web項目開發(fā)工作。

原因有很多種,一方面是Struts出現(xiàn)的時間比較早,現(xiàn)在流行的技術(shù)都是在Struts后出現(xiàn)的,因此必然導(dǎo)致Struts對新技術(shù)的支持不夠。另一方面很多新興的Web項目開發(fā)框架都很好地體現(xiàn)了現(xiàn)有開發(fā)理念的使用,對Struts的影響和威脅都很大,所以近幾年參加工作的很多IT從業(yè)人員都不喜歡使用Struts,而是采用Tapestry、JSF等框架進行他們的開發(fā)工作。

值得慶幸的是,Struts的開發(fā)人員也意識到了Struts的這些缺點,因此在2006年Struts和另外一個Web項目開發(fā)框架WebWork進行了合并,形成了新的Web項目開發(fā)框架Struts 2。這個所謂的Struts 2其實就是WebWork的一個新版本。

●一方面WebWork在IOC、基于接口編程、新的視圖技術(shù)支持等方面,具有先天優(yōu)勢。

●另一方面Struts使用人群的龐大以及學(xué)習(xí)曲線的平緩,還有它的技術(shù)延續(xù)性,使得這兩個項目開發(fā)框架各取所長,互相補充,形成了一個更有競爭力,更具有健壯性的新框架。

所以Struts并沒有過時,它已經(jīng)進化成一個嶄新的Web項目開發(fā)框架。本書這部分就針對Struts 2的具體技術(shù)細節(jié)進行了詳細附例的說明。而本章則把Struts和Struts 2之間的“恩恩怨怨”,以及同類的Web項目開發(fā)框架產(chǎn)品和Struts 2的關(guān)系具體介紹。希望讀者在學(xué)習(xí)Struts 2技術(shù)之前,能對Struts 2有清晰正確的認識和了解。

1.1 Struts歷史發(fā)展過程

Struts這個名字來源于在建筑和滑翔機中用來支持的金屬架。Struts的開發(fā)者大概是希望用該框架來支持JSP、Servlet、Java這些技術(shù)在Web項目中的應(yīng)用。

2001年春天,Struts的第一個版本在apache網(wǎng)站上發(fā)布時,它只提供了一種分離視圖和業(yè)務(wù)應(yīng)用邏輯的Web應(yīng)用方案。因為在Struts之前,開發(fā)人員都是在JSP里寫入處理業(yè)務(wù)邏輯的Java代碼,尤其是涉及數(shù)據(jù)庫和頁面Form表單數(shù)據(jù)交互時,開發(fā)人員在每個頁面都要寫入像連接數(shù)據(jù)庫這樣的Java代碼,導(dǎo)致了大量的代碼冗余。而且每個頁面顯示速度和性能都不是很好,這是因為頁面中存儲數(shù)據(jù)的Java對象都需要從內(nèi)存中讀取,勢必影響性能。

所以當像Struts這種Web應(yīng)用方案一出現(xiàn),每個開發(fā)人員都把它視為把自己從繁重的開發(fā)工作中解放出來的利器。所以在2001~2003這幾年,大量的為企業(yè)做Web應(yīng)用系統(tǒng)的IT公司,在項目架構(gòu)中都采取Struts作為開發(fā)中必須使用的框架。

1.1.1 Model設(shè)計模式的演進

從市場推廣的角度來看,Struts也是一個創(chuàng)建知名品牌的案例。由于它的知名度,很多開發(fā)人員開始熟悉Struts的應(yīng)用,一批批成功應(yīng)用Struts的Web項目,如雨后春筍般顯現(xiàn)出來,這算是入門者依據(jù)前人的優(yōu)秀經(jīng)驗,應(yīng)用Struts去實現(xiàn)更多的Web項目。隨著它作為項目開發(fā)框架的公司和人員越來越多,作為公司的領(lǐng)導(dǎo)層也讓實際開發(fā)人員把注意力更加著重放在行業(yè)知識、業(yè)務(wù)領(lǐng)域的研究實現(xiàn)工作上。

其實在Struts出現(xiàn)之前,使用J2EE開發(fā)的Web項目都是使用Model1的設(shè)計模式,Model1模式有三種常用的開發(fā)方式:

(1)之前所述的將Java代碼寫在JSP中,就是第一種常見的方式。

(2)還有一種就是將部分業(yè)務(wù)邏輯實現(xiàn)代碼封裝成為JavaBean,在JSP中調(diào)用這些JavaBean。此種方式解決之前所述冗余代碼的問題,而且從內(nèi)存中只讀取一次封裝了數(shù)據(jù)的Java對象,沒必要頻繁地讀取Java對象。它是Model1模式的典型結(jié)構(gòu),如圖1.1所示。

(3)第三種就是將Java中已經(jīng)是標準的內(nèi)置對象在JSP中調(diào)用。比如J2EE的JDBC(JSP中直接使用JDBC的標準類和方法)。實際上和第二種方式是類似的,只不過第二種方式中調(diào)用的是開發(fā)者自己開發(fā)的,而第三種方式調(diào)用的是Java的標準類和方法。

Model1模式對于中小項目的開發(fā)還是很有優(yōu)勢的,有些企業(yè)為了避免開發(fā)帶來的風(fēng)險,同時這些企業(yè)的相關(guān)環(huán)境決定使用其他模式也沒有那么迫切,因此還在使用這種模式開發(fā)自己的企業(yè)應(yīng)用。但是它有以下明顯的缺點:

(1)首先,如果企業(yè)級應(yīng)用需要改動原有需求或者新增需求,那勢必需要改動很多代碼,開發(fā)工作量會很大。

(2)其次,就是業(yè)務(wù)邏輯代碼和使用視圖來表示頁面的代碼是在JSP中混合的,如果某個JSP頁面需要重用,是根本無法實現(xiàn)的。因為業(yè)務(wù)邏輯在每個頁面是不同的,無法用一個JSP中的業(yè)務(wù)邏輯套用到另外一個JSP頁面中。

圖1.1 Model1模式結(jié)構(gòu)

基于這些原因,在開發(fā)者中有人提出了Model2模式,這種模式保留了Model1的優(yōu)點,又針對它的缺點進行了修正和改良。Model2模式基礎(chǔ)概念是組件化,它的設(shè)計者在最初的設(shè)想是開發(fā)Web項目時,如果需要實現(xiàn)某個業(yè)務(wù)邏輯將封裝好的組件進行調(diào)用,而開發(fā)者不需要再關(guān)心該組件內(nèi)部是如何實現(xiàn)的。

這就好比購買了一臺電腦,直接開機使用就可以,沒必要關(guān)心電腦內(nèi)部是如何組成的,內(nèi)部又是怎樣實現(xiàn)讓用戶使用電腦功能這些細節(jié)化的東西。該模式采用業(yè)務(wù)邏輯、視圖分離的方法,讓JSP只負責(zé)展現(xiàn)表示功能,相應(yīng)的業(yè)務(wù)邏輯由Java來實現(xiàn),當開發(fā)新的需求或者修改原有需求時沒必要在JSP中更改,而且JSP也可以被復(fù)用。具體結(jié)構(gòu)如圖1.2所示。

圖1.2 Model2模式結(jié)構(gòu)

主站蜘蛛池模板: 汤原县| 浦北县| 黑山县| 中方县| 遵化市| 乌兰察布市| 内乡县| 深水埗区| 焉耆| 昌吉市| 宝山区| 湘潭县| 德钦县| 石屏县| 澄城县| 商都县| 莱芜市| 东兰县| 华宁县| 天全县| 惠州市| 宜宾市| 巫溪县| 登封市| 浪卡子县| 融水| 尚志市| 盘锦市| 文水县| 阜平县| 太白县| 平安县| 青神县| 望江县| 洮南市| 玉溪市| 光泽县| 苏尼特左旗| 通州市| 乐昌市| 星座|