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

第1章 Struts概述

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

原因有很多種,一方面是Struts出現(xiàn)的時間比較早,現(xiàn)在流行的技術(shù)都是在Struts后出現(xiàn)的,因此必然導致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使用人群的龐大以及學習曲線的平緩,還有它的技術(shù)延續(xù)性,使得這兩個項目開發(fā)框架各取所長,互相補充,形成了一個更有競爭力,更具有健壯性的新框架。

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

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

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

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

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

1.1.1 Model設計模式的演進

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

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

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

(2)還有一種就是將部分業(yè)務邏輯實現(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ā)帶來的風險,同時這些企業(yè)的相關(guān)環(huán)境決定使用其他模式也沒有那么迫切,因此還在使用這種模式開發(fā)自己的企業(yè)應用。但是它有以下明顯的缺點:

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

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

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

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

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

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

主站蜘蛛池模板: 阿瓦提县| 卢氏县| 那坡县| 靖边县| 天台县| 左贡县| 桓台县| 武宣县| 平南县| 特克斯县| 凤阳县| 华容县| 安远县| 历史| 东山县| 通海县| 岑巩县| 杭锦旗| 龙江县| 丹巴县| 阿拉善盟| 武城县| 阳新县| 仙居县| 阿尔山市| 合阳县| 会同县| 英山县| 安泽县| 从江县| 崇阳县| 泽州县| 红安县| 突泉县| 天峻县| 海口市| 宁阳县| 镇雄县| 林周县| 阿勒泰市| 东海县|