史軍倉
(洛陽有色金屬加工設計研究院,河南 洛陽 471039)
Struts、Hibernate和Spring是我們Java開發(fā)中常用的框架結構,他們分別針對不同的應用場景給出最合適的解決方案。我們知道,傳統(tǒng)的Java Web應用程序是采用JSP+Servlet+Javabean來實現(xiàn)的,這種模式實現(xiàn)了最基本的MVC分層,使得程序結構分為幾層:有負責前臺展示的JSP、負責流程邏輯控制的Servlet以及負責數(shù)據封裝的Javabean。但是這種結構仍然存在問題:如JSP頁面中需要使用符號嵌入很多的Java代碼,造成頁面結構混亂,Servlet和Javabean負責了大量的跳轉和運算工作,耦合緊密,程序復用度低等。
為了解決這些問題,出現(xiàn)了Struts框架,它是一個完美的MVC實現(xiàn),它有一個中央控制類(一個Servlet),針對不同的業(yè)務,我們需要一個Action類負責頁面跳轉和后臺邏輯運算,一個或幾個JSP頁面負責數(shù)據的輸入和輸出顯示,還有一個Form類負責傳遞Action和JSP中間的數(shù)據。JSP中可以使用Struts框架提供的一組標簽,就像使用HTML標簽一樣簡單,但是可以完成非常復雜的邏輯。從此JSP頁面中不需要出現(xiàn)一行包圍的Java代碼了。
可是所有的運算邏輯都放在Struts的Action里將使得Action類復用度低和邏輯混亂,所以通常人們會把整個Web應用程序分為三層,Struts負責顯示層,它調用業(yè)務層完成運算邏輯,業(yè)務層再調用持久層完成數(shù)據庫的讀寫。
使用JDBC連接來讀寫數(shù)據庫,我們最常見的就是打開數(shù)據庫連接、使用復雜的SQL語句進行讀寫、關閉連接,獲得的數(shù)據又需要轉換或封裝后往外傳,這是一個非常煩瑣的過程。
這時出現(xiàn)了Hibernate框架,它需要你創(chuàng)建一系列的持久化類,每個類的屬性都可以簡單的看做和一張數(shù)據庫表的屬性一一對應,當然也可以實現(xiàn)關系數(shù)據庫的各種表件關聯(lián)的對應。當我們需要相關操作是,不用再關注數(shù)據庫表。我們不用再去一行行的查詢數(shù)據庫,只需要持久化類就可以完成增刪改查的功能。使我們的軟件開發(fā)真正面向對象,而不是面向混亂的代碼。我的感受是使用Hibernate比JDBC方式減少了80%的編程量。
現(xiàn)在我們有三個層了,可是每層之間的調用是怎樣的呢?比如顯示層的Struts需要調用一個業(yè)務類,就需要new一個業(yè)務類出來,然后使用;業(yè)務層需要調用持久層的類,也需要new一個持久層類出來用。通過這種new的方式互相調用就是軟件開發(fā)中最糟糕設計的體現(xiàn)。簡單的說,就是調用者依賴被調用者,它們之間形成了強耦合,如果我想在其他地方復用某個類,則這個類依賴的其他類也需要包含。程序就變得很混亂,每個類互相依賴互相調用,復用度極低。如果一個類做了修改,則依賴它的很多類都會受到牽連。 為此,出現(xiàn)Spring框架。
Spring的作用就是完全解耦類之間的依賴關系,一個類如果要依賴什么,那就是一個接口。至于如何實現(xiàn)這個接口,這都不重要了。只要拿到一個實現(xiàn)了這個接口的類,就可以輕松的通過xml配置文件把實現(xiàn)類注射到調用接口的那個類里。所有類之間的這種依賴關系就完全通過配置文件的方式替代了。所以Spring框架最核心的就是所謂的依賴注入和控制反轉。
現(xiàn)在的結構是,Struts負責顯示層,Hibernate負責持久層,Spring負責中間的業(yè)務層,這個結構是目前國內最流行的Java Web應用程序架構了。另外,由于Spring使用的依賴注射以及AOP(面向方面編程),所以它的這種內部模式非常優(yōu)秀,以至于Spring自己也實現(xiàn)了一個使用依賴注入的MVC框架,叫做Spring MVC,同時為了很好的處理事務,Spring集成了Hibernate,使事務管理從Hibernate的持久層提升到了業(yè)務層,使用更加方便和強大。
Struts框架是2000年就開始起步了,到目前已經發(fā)展了10年左右,技術相當成熟,目前全球Java開發(fā)中Struts框架是顯示層技術中當之無愧的王者。它擁有大量的用戶群和很好的開發(fā)團隊。這也是國內大部分Java軟件公司對新進員工的基本要求。
Java這個名詞似乎注定和開源緊密聯(lián)系在一起了,在Java界,每天都有大量的開源技術出現(xiàn),由于是開放源代碼的,技術中存在的問題和不足很快就會被人發(fā)現(xiàn),開源軟件提供者會很快的修正或擴展這些技術,因此版本更新很快,幾個星期或者幾天就有一個新版本出來。
隨著Internet的快速發(fā)展,企業(yè)對應用程序模式的使用發(fā)生了變化,正在摒棄C/S結構而采用B/S結構,即瘦客戶端/胖服務器、大容量數(shù)據庫的3層或N層體系結構模式。由于Java的特點,使得它在開發(fā)服務器端的應用程序方面有著得天獨厚的優(yōu)勢,面向服務器端的J2EE為當今逐漸流行的N層體系結構提供了一個標準的Java開發(fā)平臺:界面一致、工具簡易、豐富、Web頁面互聯(lián)便捷,從而能大大加速和簡化各種應用系統(tǒng)的開發(fā)。目前,由于Sun、IBM、Oracle、BEA等國際廠商相繼推出各種基于Java技術的應用服務器以及各種應用軟件,帶動了Java在金融、電信、制造等領域日益廣泛的應用。如清華大學計算機系利用Java、XML和Web技術研制開發(fā)了多個軟件平臺,東方科技的Tong Web、金碟的Apusic、中創(chuàng)的Inforweb 等J2EE應用服務器及和佳ERP和寶信ERP等ERP產品,已在許多企業(yè)得到應用。
基于Java平臺的應用服務器、企業(yè)服務總線(ESB)、消息中間件、流程引擎這些企業(yè)應用的關鍵運行平臺還會在相當長的時間內被廣泛使用。但是隨著硬件技術的飛速發(fā)展,以及新的應用模式和商業(yè)模式例如SOA、云計算的出現(xiàn)和成熟,面向企業(yè)應用的開發(fā)語言越來越需要關注并行計算、多核編程、極限事務處理等。例如金融行業(yè),Java慢慢也在逐步走入金融核心領域,很多集成商和行業(yè)最終用戶都在基于Java和SOA做銀行的新一代核心。而且輕量級的IOC容器、OSGi的應用服務器已經逐步成為主流,尤其是在云計算的大環(huán)境下,EJB在慢慢老去,企業(yè)應用的互聯(lián)網化、“云化”是大勢所趨。
計算機的發(fā)展創(chuàng)造了Internet,但是計算機現(xiàn)在卻不是訪問Internet的唯一方式。正在出現(xiàn)的信息化、智能化的消費類電子產品打破了PC作為信息終端的壟斷地位,成為人類進入Internet的新門戶。信息終端的多元化預示著所謂后PC(post-PC)時代的到來。消費類的信息終端量大面廣,是典型的瘦客戶機,其本身的資源和能力不能與PC相比,但必須更加智能化,并對服務器端的管理提出了更高的要求。而Java平臺恰恰滿足了這種要求。最近推出的Kjava虛擬機能運行在16以上的微處理器上,占用內存少,人們可以隨心所欲,在資源有限的設備上方便地開發(fā)出各種各樣的應用,直接運行在不同的消費類或其它電子設備上;而Jini的出現(xiàn)為Java網絡連接提供了公共標準,使得任何Java設備都可以連入網絡中被自動識別,并可充分利用網絡上已有的各種資源。計算的網絡化、嵌入化、部件化這三大趨勢是緊密聯(lián)系的。java和作為java擴展的jini技術將為這三者的結合找到合適的紐帶。java絕不僅僅是一種語言,最近的發(fā)展越來越表明:java和作為java擴展的jini是一個分布式的,部件化的,可廣泛運用于從服務器、pc機到機頂盒、微波爐、智能卡等各種設備的、與操作系統(tǒng)無關的優(yōu)秀網絡計算平臺。對于它在急劇變革的IT產業(yè)中日益增強的作用,我們必須有充分的認識。大力推進Jini的發(fā)展是Sun公司加速后PC時代進程的一項重要策略。
Java系統(tǒng)主要的展示有:應用工具、應用系統(tǒng)、信息家電等。特別在實時系統(tǒng)開發(fā)方面,以IBM為首開發(fā)出了應用于工業(yè)實時環(huán)境的Java嵌入系統(tǒng),展現(xiàn)出Java在工業(yè)領域的廣闊應用前景。
Java語言的出現(xiàn)和發(fā)展,得到了IT業(yè)界的青睞。作為一種與底層硬件無關的、“編寫一次,到處運行”的高級語言和計算平臺,Java天生就具有將網絡上的各個平臺連成一體的能力,優(yōu)秀的多線程設計也是Java語音的一大特色,多平臺的支持是其他編程語言所無法比擬的。Java語言最初并不是為網絡環(huán)境設計的,用戶能用它編寫獨立的桌面應用程序,在這個領域Java已經被各大廠商接受,如Oracle數(shù)據庫、Eclipse開發(fā)環(huán)境都是使用Java語言編寫的。當網絡出現(xiàn)以后,由于網絡軟硬件環(huán)境的復雜性,常見的編程語言逐漸不能適應這種環(huán)境的要求,而Java語言平臺無關性的特性正好適應網絡這個潮流。
“Java易得 一將難求 !”Sun大中華區(qū)軟件、ISV和Java業(yè)務總監(jiān)黃震認為,Java入門容易,但是精通不易。這就好像會畫中國畫的人不少,業(yè)余愛好者很多,但真正能夠成為畫家的很少。而在中國的Java人才,似乎不只是精通者不夠多,真正愿意學習運用Java語言的愛好者數(shù)量也不容樂觀。在我國,Java的引進與開發(fā)相對起步早,發(fā)展水平基本與世界同步,但是應用卻總是略顯滯后。重新反思中國Java的十年發(fā)展歷程,除了贊譽與慶賀外,更有現(xiàn)實意義的做法是,認真考慮如何為中國Java的未來發(fā)展繼續(xù)涵養(yǎng)水土。目前,Sun公司已在中國建成了由5個授權中心、20多個Internet/Intarnet Java解決方案中心和10所Java大學、若干培訓中心組成的三級結構。全面推動Java在中國的普及、應用、研究、開發(fā),培養(yǎng)了數(shù)以十萬計的Java開發(fā)人員。此外,Sun還牽頭成立了中外軟件廠商的開發(fā)聯(lián)盟。不管對Java是怎樣一個態(tài)度,有一點不可否認,Java是現(xiàn)在全球最流行的開發(fā)工具之一,它擁有一套龐大且完善的類庫,內置了其他語言需要的類庫甚至是操作系統(tǒng)支持的功能,只需擁有一個虛擬機就可以跨平臺移植??傊?Java的出現(xiàn),確實給整個程序界帶來了巨大的沖擊,也許現(xiàn)在還無法準確評估Java為整個IT業(yè)帶來的影響。但是有一點卻毋庸置疑,Java將不可避免地影響一代程序員,作為一名職業(yè)程序員,應該認真評估一下Java在可以預見的一段時間里帶給自己的影響。在美國,越來越多的應用程序是基于Java開發(fā)的。Java在企業(yè)的應用中的日臻完美,打消了許多人對Java無法應用于大型企業(yè)級應用的顧慮,而在國內,Java也已如火如荼。
[1] 美JamieJaworski著,曹康等譯,Java開發(fā)指南。北京:中國水利水電出版社,1996
[2]廖衛(wèi)東等編著,Java程序設計實用指南.北京:機械工業(yè)出版社,1996;(10)
[3]csdn開發(fā)者論壇