版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 譯文:</b></p><p> Java技術(shù)與SSH框架</p><p> Duke,Java語(yǔ)言的吉祥物語(yǔ)言最開始只是太陽(yáng)微系統(tǒng)(Sun MicroSystems)公司在1990年12月開始研究的一個(gè)內(nèi)部項(xiàng)目。太陽(yáng)微系統(tǒng)公司的一個(gè)叫做帕特里克?諾頓的工程師被公司自己開發(fā)的C++和C語(yǔ)言編譯器搞得焦頭爛額,因?yàn)槠渲械腁PI極其難用。
2、帕特里克決定改用NeXT,同時(shí)他也獲得了研究公司的一個(gè)叫做“Stealth計(jì)劃”的項(xiàng)目的機(jī)會(huì)?!癝tealth計(jì)劃”后來(lái)改名為“Green計(jì)劃”,詹姆斯·高斯林和麥克?舍林丹也加入了帕特里克的工作小組。他們和其他幾個(gè)工程師一起在加利福尼亞州門羅帕克市沙丘路的一個(gè)小工作室里面研究開發(fā)新技術(shù),瞄準(zhǔn)下一代智能家電(如微波爐)的程序設(shè)計(jì),太陽(yáng)公司預(yù)料未來(lái)科技將在家用電器領(lǐng)域大顯身手。團(tuán)隊(duì)最初考慮使用C++語(yǔ)言,但是很多成員包括太陽(yáng)的首
3、席科學(xué)家比爾?喬伊,發(fā)現(xiàn)C++和可用的API在某些方面存在很大問(wèn)題。工作小組使用的是內(nèi)嵌類型平臺(tái),可以用的資源極其有限。很多成員發(fā)現(xiàn)C++太復(fù)雜以至很多開發(fā)者經(jīng)常錯(cuò)誤使用。他們發(fā)現(xiàn)C++缺少垃圾回收系統(tǒng),還有可移植的安全性、分布程序設(shè)計(jì)、和多運(yùn)行續(xù)功能。最后,他們想要一種易于移植到各種設(shè)備上的平臺(tái)。</p><p> 根據(jù)可用的資金,比爾?喬伊決定開發(fā)一種集C語(yǔ)言和Mesa語(yǔ)言大成的新語(yǔ)言,在一份報(bào)告上,喬伊把
4、它叫做“未來(lái)”,他提議太陽(yáng)公司的工程師應(yīng)該在C++的基礎(chǔ)上,開發(fā)一種面向?qū)ο蟮沫h(huán)境。最初,高斯林試圖修改和擴(kuò)展C++的功能,他自己稱這種新語(yǔ)言為C++ ++ --,但是后來(lái)他放棄了。他將要?jiǎng)?chuàng)造出一種全新的語(yǔ)言,被他命名為“Oak”(橡樹),以他的辦公室外的橡樹命名。就像很多開發(fā)新技術(shù)的秘密工程一樣,工作小組沒(méi)日沒(méi)夜地工作到了1992年的夏天,他們能夠演示新平臺(tái)的一部分了,包括Green操作系統(tǒng),Oak的程序設(shè)計(jì)語(yǔ)言,類庫(kù)及其硬件。最初的
5、嘗試是面向一種類PDA設(shè)備,被命名為Star7,這種設(shè)備有鮮艷的圖形界面和被稱為“Duke”的智能代理來(lái)幫助用戶。1992年12月3日,這臺(tái)設(shè)備進(jìn)行了展示。同年11月,Green計(jì)劃被轉(zhuǎn)化成了“FirstPerson有限公司”,一個(gè)太陽(yáng)公司的全資子公司,團(tuán)隊(duì)也被重新安排到了帕洛阿爾托。FirstPerson團(tuán)隊(duì)對(duì)建造一種高度交互的設(shè)備感興趣,當(dāng)時(shí)代華納發(fā)布了一個(gè)關(guān)于電視機(jī)頂盒的征求提議書時(shí)(Request for proposal),F(xiàn)
6、irstPerson改變了</p><p> Java和互聯(lián)網(wǎng)1994年6月、7月間,在經(jīng)歷了一場(chǎng)歷時(shí)三天的腦力激蕩的討論后,約翰·蓋吉、詹姆斯·高斯林、比爾·喬伊、帕特里克·諾頓、韋恩·羅斯因和埃里克·斯庫(kù)米,團(tuán)隊(duì)決定再一次改變了努力的目標(biāo),這次他們決定將該技術(shù)應(yīng)用于萬(wàn)維網(wǎng)。他們認(rèn)為隨著Mosaic瀏覽器的到來(lái),因特網(wǎng)正在向同樣的高度互動(dòng)的遠(yuǎn)景演變,
7、而這一遠(yuǎn)景正是他們?cè)谟芯€電視網(wǎng)中看到的。作為原型,帕特里克·諾頓寫了一個(gè)小型萬(wàn)維網(wǎng)瀏覽器,WebRunner,后來(lái)改名為HotJava。Java和“Java”由于商標(biāo)搜索顯示,Oak已被一家顯卡制造商注冊(cè)。于是同年,Oak被改名為Java。當(dāng)使用十六進(jìn)制編輯器打開由Java源代碼編譯出的二進(jìn)制文件(.class文件)的話,最前面的32位將顯示為CA FE BA BE,即詞組“CAFE BABE”(咖啡屋寶貝)。[編輯] Jav
8、a和瀏覽器1994年10月,HotJava和Java平臺(tái)為公司高層進(jìn)行演示。1994年,Java 1.0a版本已經(jīng)可以提供下載,但是Java和HotJava瀏覽器的第一次公開發(fā)布卻是在1995年3月23日SunWorld大會(huì)上進(jìn)行的。升陽(yáng)公司的科學(xué)指導(dǎo)約翰·蓋吉</p><p> 目前Java提供以下三個(gè)版本:Java Platform, Enterprise Edition(Java EE:Java
9、平臺(tái)企業(yè)版)、Java Platform, Standard Edition(Java SE:Java平臺(tái)標(biāo)準(zhǔn)版)、Java Platform, Micro Edition(Java ME:Java平臺(tái)微型版)Java Platform, Card Edition。Java開放源代碼項(xiàng)目2006年SUN在JavaOne公布Java 開放源代碼項(xiàng)目,并推出OpenJDK計(jì)劃。[2] Java虛擬機(jī)、Java編譯器和Java類庫(kù)以GNU通用
10、公共許可證公開。</p><p> Java語(yǔ)言之所以被開發(fā),是要達(dá)到以下五個(gè)目的:應(yīng)當(dāng)使用面向?qū)ο蟪绦蛟O(shè)計(jì)方法學(xué)、應(yīng)當(dāng)允許同一程序在不同的計(jì)算機(jī)平臺(tái)執(zhí)行、應(yīng)當(dāng)包括內(nèi)建的對(duì)計(jì)算機(jī)網(wǎng)絡(luò)的支持、應(yīng)當(dāng)被設(shè)計(jì)成安全地執(zhí)行遠(yuǎn)端代碼、應(yīng)當(dāng)易于使用,并借鑒以前那些面向?qū)ο笳Z(yǔ)言(如C++)的長(zhǎng)處。Java技術(shù)主要分成幾個(gè)部分:Java語(yǔ)言、運(yùn)行環(huán)境JVM、類庫(kù)。一般情況下說(shuō)Java時(shí)并不區(qū)分指的是哪個(gè)部分。Java在1.5版本
11、時(shí),做了重大改變,太陽(yáng)公司并1.5版本重命名為Java 5.0。面向?qū)ο驤ava的特點(diǎn)之一就是面向?qū)ο?,是程序設(shè)計(jì)方法的一種?!懊嫦?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言”的核心之一就是開發(fā)者在設(shè)計(jì)軟件的時(shí)候可以使用自定義的類型和關(guān)聯(lián)操作。代碼和數(shù)據(jù)的實(shí)際集合體叫做“對(duì)象”。一個(gè)對(duì)象可以想像成綁定了很多“行為(代碼)”和“狀態(tài)(數(shù)據(jù))”的物體。對(duì)于數(shù)據(jù)結(jié)構(gòu)的改變需要和代碼進(jìn)行通信然后操作,反之亦然。面向?qū)ο笤O(shè)計(jì)讓大型軟件工程的計(jì)劃和設(shè)計(jì)變得更容易管理,能增強(qiáng)
12、工程的健康度,減少失敗工程的數(shù)量。面向?qū)ο笤O(shè)計(jì)另外一個(gè)目標(biāo)就是能產(chǎn)生很多的有關(guān)聯(lián)的類,可以讓軟件的再開發(fā)變得簡(jiǎn)單。舉例來(lái)說(shuō),很多軟件工程都有同樣的功能,尤其是很多應(yīng)用了同一原理組織的</p><p> Java語(yǔ)言在最開始應(yīng)用的時(shí)候是沒(méi)有解釋層的,所有需要編譯的代碼都直接轉(zhuǎn)換成機(jī)器的原始代碼。這樣做的后果就是獲得了最佳的性能,但是程序臃腫異常。從JIT技術(shù)開始,Java的程序都經(jīng)過(guò)一次轉(zhuǎn)換之后才變成機(jī)器碼。很多
13、老牌的第三方虛擬機(jī)都使用一種叫做“動(dòng)態(tài)編譯”的技術(shù),也就是說(shuō)虛擬機(jī)實(shí)時(shí)監(jiān)測(cè)和分析程序的運(yùn)行行為,同時(shí)選擇性地對(duì)程序所需要的部分進(jìn)行編譯和優(yōu)化。所有這些技術(shù)都改善了代碼的運(yùn)行速度,但是又不會(huì)讓程序的體積變得失常。程序的輕便性事實(shí)上是軟件編寫很難達(dá)到的一個(gè)目標(biāo),Java雖然成功地實(shí)現(xiàn)了“一次編譯,到處運(yùn)行”,但是由于平臺(tái)和平臺(tái)之間的差異,所編寫的程序在轉(zhuǎn)換代碼的時(shí)候難免會(huì)出現(xiàn)微小的、不可察覺(jué)的錯(cuò)誤和意外。有些程序員對(duì)此非常頭疼,他們嘲笑Ja
14、va的程序不是“一次編譯,到處運(yùn)行”,而是“一次編譯,到處調(diào)試”。</p><p> 平臺(tái)無(wú)關(guān)性讓Java在服務(wù)器端軟件領(lǐng)域非常成功。很多服務(wù)器端軟件都使用Java或相關(guān)技術(shù)創(chuàng)建。</p><p> Java的性能和復(fù)雜性:</p><p> 關(guān)于Java的批評(píng)Java試圖通過(guò)新的方式解決軟件編寫的復(fù)雜性。很多人認(rèn)為Java語(yǔ)言做到了它承諾的一切。但是Java
15、并不是一門完美的語(yǔ)言。整體性問(wèn)題并不是所有的工程和環(huán)境需要企業(yè)級(jí)別的復(fù)雜性,比如一個(gè)簡(jiǎn)單的個(gè)人網(wǎng)站或者獨(dú)自編程的程序師所寫的程序。這些程序師會(huì)發(fā)現(xiàn)Java的復(fù)雜管理對(duì)于自己要做的程序來(lái)說(shuō)過(guò)于強(qiáng)大了。一些人覺(jué)得Java在面向?qū)ο笊厦孀龅臎](méi)有Ruby和Smalltalk純粹。但是最新出現(xiàn)的用Java實(shí)現(xiàn)的語(yǔ)言Groovy解決了這些問(wèn)題。</p><p> 作為一種已經(jīng)創(chuàng)建的新技術(shù),Java顯然綜合了很多語(yǔ)言的特性,
16、比如C++、C語(yǔ)言、Python等等。一些對(duì)于Java的評(píng)論認(rèn)為Java的不變性在動(dòng)搖。</p><p> 語(yǔ)言問(wèn)題有些程序師不喜歡原始類型(primitive type)和類(class)的分離,尤其是那些曾經(jīng)使用過(guò)Smalltalk和Ruby的程序師。Java的代碼相對(duì)于其他的代碼來(lái)說(shuō)過(guò)于冗長(zhǎng),這與它的輕便化聲明相違背。Java是一種單層繼承的語(yǔ)言。這也導(dǎo)致了程序師在試圖使用多重繼承時(shí)候的不便,而很多語(yǔ)言都
17、可以使用這個(gè)特性。但是Java可以使用接口類,把多重繼承可能導(dǎo)致的風(fēng)險(xiǎn)減少到最小。Java不支持運(yùn)算符重載,這是為了防止運(yùn)算符重載使得代碼的功能變得不清晰。但是用Java實(shí)現(xiàn)的語(yǔ)言Groovy可以進(jìn)行運(yùn)算符重載。過(guò)去Java對(duì)于文本的操作和其他語(yǔ)言,比如Perl和PHP相比差的較多,但Java在1.4版本時(shí)候引入了正則表達(dá)式。</p><p> 類庫(kù)問(wèn)題使用Swing平臺(tái)編寫的帶有GUI(圖形用戶接口)的程序和
18、其他原始程序非常不同。選用AWT工具包編寫程序的程序師看到的都是原始接口,而且也無(wú)法獲得先進(jìn)的GUI編程支持,如果使用的話,就要提供每個(gè)平臺(tái)上面所需的API,這將是一項(xiàng)龐大的工程。Swing則是完全用Java語(yǔ)言所寫的程序,避免了接口元素重復(fù)的問(wèn)題,只使用所有平臺(tái)都支持的最基本的繪圖機(jī)制。但是很多用戶不知道如何在Java風(fēng)格和Windows風(fēng)格之間進(jìn)行轉(zhuǎn)換,結(jié)果造成了Java程序的接口在很多程序中非常特殊。蘋果電腦已經(jīng)提供了優(yōu)化過(guò)的Ja
19、va運(yùn)行時(shí)程序,包含了Mac OS X的經(jīng)典Aqua接口風(fēng)格。性能問(wèn)題由于Java編譯器和虛擬機(jī)的不同對(duì)Java代碼的性能影響比語(yǔ)言本身的影響大的多,所以統(tǒng)一討論Java的程序的性能經(jīng)常是有誤導(dǎo)性的。據(jù)IBM的數(shù)據(jù),在同樣的硬件上2001年時(shí)的IBM JDK版本的性能是1996年的JDK版本的十倍左右。見IBM東京研究院的數(shù)據(jù): http://www.is.titech.ac.jp/ppl2004/proceedings/ishizak
20、i_slides.pdf 而即使是在同一時(shí)期,不同公司</p><p> Java語(yǔ)言的一些特性不可避免的有額外的性能代價(jià),例如數(shù)組范圍檢查、運(yùn)行時(shí)類型檢查等等。Java程序的性能還會(huì)因?yàn)椴煌膭?dòng)態(tài)復(fù)雜性和垃圾處理機(jī)制使用的多少而各有不同。如果JVM的實(shí)現(xiàn)比較優(yōu)化的話,那么這些功能甚至可以增加存儲(chǔ)器分配的性能。這和總是使用STL或者托管C++的程序的情況類似。</p><p> 盡管如
21、此,仍然有許多人認(rèn)為Java的性能低。這部分歸因于Sun公司最初的JVM實(shí)現(xiàn)使用未優(yōu)化的解釋機(jī)制來(lái)運(yùn)行字節(jié)碼。一些新版本的JVM使用Just-In-Time(JIT)編譯器,在加載字節(jié)碼的時(shí)候?qū)⑵渚幾g成針對(duì)運(yùn)行環(huán)境的本地代碼來(lái)實(shí)現(xiàn)一些本地編譯器的優(yōu)化特性。Just-In-Time機(jī)制和本地編譯的性能比較仍舊是一個(gè)有爭(zhēng)議的話題。JIT編譯需要很多時(shí)間,對(duì)于運(yùn)行時(shí)間不長(zhǎng)或者代碼很多的大型程序并不適宜。但是不算JIT編譯階段的話,程序的運(yùn)行性
22、能在很多JVM下可以和本地編譯的程序一爭(zhēng)短長(zhǎng),甚至在一些計(jì)算比較密集的數(shù)值計(jì)算領(lǐng)域也是這樣。目前,Java已經(jīng)使用更先進(jìn)的HotSpot技術(shù)來(lái)代替JIT技術(shù),Java的性能有了更進(jìn)一步的提升。另外,在使用-server選項(xiàng)運(yùn)行java程序時(shí),也可以對(duì)java進(jìn)行更深入的優(yōu)化,比如在運(yùn)行時(shí)將調(diào)用較多的方法內(nèi)聯(lián)(inline)到程序中來(lái)提高運(yùn)行速度,這就是所謂的“動(dòng)態(tài)優(yōu)化”,而本地編譯器是無(wú)法做到這一點(diǎn)的;這也是一些java代碼比對(duì)應(yīng)用C/
23、C++等語(yǔ)言編寫的本地代碼運(yùn)行的更快的原因之一。微軟的.NET平臺(tái)也使用JIT編譯器,所以也有類似問(wèn)題。</p><p> Java的設(shè)計(jì)目的主要是安全性和可攜性,所以對(duì)于一些特性,比如對(duì)硬件架構(gòu)和存儲(chǔ)器地址訪問(wèn)的直接訪問(wèn)都被去除了。如果需要間接調(diào)用這些底層功能的話,就需要使用JNI(Java本地接口)來(lái)調(diào)用本地代碼,而間接訪問(wèn)意味著頻繁調(diào)用這些特性時(shí)性能損失會(huì)很大,微軟的.NET平臺(tái)也有這樣的問(wèn)題。所以到目前
24、為止,性能敏感的代碼,例如驅(qū)動(dòng)程序和3D視頻游戲,還是大多使用本地編譯,甚至直接以不直接支持面向?qū)ο蟮腃語(yǔ)言或機(jī)器碼編寫。但最近已經(jīng)有了許多用純Java編寫的3D游戲,其效果與用C語(yǔ)言編寫的不相上下,例如“合金戰(zhàn)士”(英文名:Chrome)。這主要是因?yàn)樾掳娴腏ava 3D技術(shù)已經(jīng)能像C++一樣調(diào)用硬件加速,也就是使用顯卡來(lái)加速,無(wú)論是C++還是Java語(yǔ)言寫的3D游戲都是使用顯卡及GPU來(lái)處理,從而使得CPU可以專注于其他方面的工作。
25、</p><p><b> 垃圾回收機(jī)制:</b></p><p> 自動(dòng)垃圾回收(Garbage Collection)C++語(yǔ)言被用戶詬病的原因之一是大多數(shù)C++編譯器不支持垃圾收集機(jī)制。通常使用C++編程的時(shí)候,程序員于程序中初始化對(duì)象時(shí),會(huì)在主機(jī)存儲(chǔ)器堆棧上分配一塊存儲(chǔ)器與地址,當(dāng)不需要此對(duì)象時(shí),進(jìn)行解構(gòu)或者刪除的時(shí)候再釋放分配的存儲(chǔ)器地址。如果對(duì)象是在堆
26、棧上分配的,而程序員又忘記進(jìn)行刪除,那么就會(huì)造成存儲(chǔ)器泄漏(Memory Leak)。長(zhǎng)此以往,程序運(yùn)行的時(shí)候可能會(huì)生成很多不清除的垃圾,浪費(fèi)了不必要的存儲(chǔ)器空間。因此如果同一存儲(chǔ)器地址被刪除兩次的話,程序會(huì)變得不穩(wěn)定,甚至崩潰。因此有經(jīng)驗(yàn)的C++程序員都會(huì)在刪除之后將指針重置為0,然后在刪除之前先判斷指針是否為0。C++中也可以使用“智能指針”(Smart Pointer)或者使用C++托管擴(kuò)展編譯器的方法來(lái)實(shí)現(xiàn)自動(dòng)化存儲(chǔ)器釋放,智能
27、指針可以在標(biāo)準(zhǔn)類庫(kù)中找到,而C++托管擴(kuò)展被微軟的Visual C++ 7.0及以上版本所支持。智能指針的優(yōu)點(diǎn)是不需引入緩慢的垃圾收集機(jī)制,而且可以不考慮線程安全的問(wèn)題,但是缺點(diǎn)是如果不善使用智能指針的話,性能有可能不如垃圾收集機(jī)制,而且不斷地分配和釋放存儲(chǔ)器可能</p><p> String str = "這是一段字串";</p><p> System.out
28、.println(s);</p><p> for(int i){</p><p> System.out.println("Hallo Would"+i);</p><p><b> }</b></p><p> 在循環(huán)開始之前,字符串str已經(jīng)不會(huì)再用到了,但未將這個(gè)參考指向null,因此
29、字符串str無(wú)法被gc所回收。這種存儲(chǔ)器泄漏必須等到一個(gè)函數(shù)退出之后才會(huì)被系統(tǒng)取回,自不過(guò)發(fā)生的機(jī)率要比不激活垃圾收集機(jī)制的C++程序少很多。但是總體來(lái)講,自動(dòng)垃圾收集機(jī)制要安全和簡(jiǎn)單許多。</p><p> 不同廠商、不同版本的JVM中的存儲(chǔ)器垃圾回收機(jī)制并不完全一樣,通常越新版本的存儲(chǔ)器回收機(jī)制越快,IBM、BEA、SUN等等開發(fā)JVM的公司都曾宣稱過(guò)自己制造出了世界上最快的Template:WhatJVM
30、,JVM性能的世界紀(jì)錄也在不斷的被打破并提高。</p><p> IBM有一篇有關(guān)Java存儲(chǔ)器回收機(jī)制比不激活垃圾收集機(jī)制的C++存儲(chǔ)器處理快數(shù)倍的技術(shù)文章,而著名的Java技術(shù)書籍《Java編程思想》(Thinking in Java)也有一段論述Java存儲(chǔ)器及性能達(dá)到甚至超過(guò)C++的章節(jié)。</p><p> Java的設(shè)計(jì)者們不想讓Java有多重繼承的特性,因?yàn)镃++的多重繼承
31、顯示了這種特性的困難。Java的接口功能可以提供同樣的功能,但是又不會(huì)很復(fù)雜。應(yīng)用程序開發(fā)接口在Java語(yǔ)言中,應(yīng)用程序接口(API)化身成類,并且分組成為包。每個(gè)包中包含有相關(guān)的接口和類。對(duì)于不同的平臺(tái),Java提供了不同版本的包。API的設(shè)定由sun公司和其他公司通過(guò)JCP(Java社區(qū)程序)決定。任何公司和個(gè)人都可以參與這個(gè)工程,對(duì)API進(jìn)行設(shè)計(jì)。2004年,IBM和BEA公司準(zhǔn)備聯(lián)合對(duì)官方的Java開源軟件工程進(jìn)行支持,但是20
32、05年初,sun公司拒絕了這個(gè)支持。</p><p><b> Spring </b></p><p> Spring Framework 是一個(gè)開源的Java/Java EE全功能棧(full-stack)的應(yīng)用程序框架,以Apache許可證形式發(fā)布,也有.NET平臺(tái)上的移植版本。該框架基于 Expert One-on-One Java EE Design an
33、d Development(ISBN 0-7645-4385-7)一書中的代碼,最初由 Rod Johnson 和 Juergen Hoeller等開發(fā)。Spring Framework 提供了一個(gè)簡(jiǎn)易的開發(fā)方式,這種開發(fā)方式,將避免那些可能致使底層代碼變得繁雜混亂的大量的屬性文件和幫助類。Spring 中包含的關(guān)鍵特性:強(qiáng)大的基于 JavaBeans 的采用控制翻轉(zhuǎn)(Inversion of Control,IoC)原則的配置管理,使
34、得應(yīng)用程序的組建更加快捷簡(jiǎn)易。一個(gè)可用于從 applet 到 Java EE 等不同運(yùn)行環(huán)境的核心 Bean 工廠。數(shù)據(jù)庫(kù)事務(wù)的一般化抽象層,允許聲明式(Declarative)事務(wù)管理器,簡(jiǎn)化事務(wù)的劃分使之與底層無(wú)關(guān)。內(nèi)建的針對(duì) JTA 和 單個(gè) JDBC 數(shù)據(jù)源的一般化策略,使 Spring 的</p><p> JDBC 抽象層提供了有針對(duì)性的異常等級(jí)(不再?gòu)腟QL異常中提取原始代碼),簡(jiǎn)化了錯(cuò)誤處理,大
35、大減少了程序員的編碼量。再次利用JDBC時(shí),你無(wú)需再寫出另一個(gè) '終止' (finally) 模塊。并且面向JDBC的異常與Spring 通用數(shù)據(jù)訪問(wèn)對(duì)象(Data Access Object)異常等級(jí)相一致。</p><p> 以資源容器,DAO 實(shí)現(xiàn)和事務(wù)策略等形式與 Hibernate,JDO 和 iBATIS SQL Maps 集成。利用眾多的翻轉(zhuǎn)控制方便特性來(lái)全面支持,解決了許多典型的
36、Hibernate集成問(wèn)題。所有這些全部遵從Spring通用事務(wù)處理和通用數(shù)據(jù)訪問(wèn)對(duì)象異常等級(jí)規(guī)范。</p><p> 靈活的基于核心 Spring 功能的 MVC 網(wǎng)頁(yè)應(yīng)用程序框架。開發(fā)者通過(guò)策略接口將擁有對(duì)該框架的高度控制,因而該框架將適應(yīng)于多種呈現(xiàn)(View)技術(shù),例如 JSP,F(xiàn)reeMarker,Velocity,Tiles,iText 以及 POI。值得注意的是,Spring 中間層可以輕易地結(jié)合于
37、任何基于 MVC 框架的網(wǎng)頁(yè)層,例如 Struts,WebWork,或 Tapestry,提供諸如事務(wù)管理等服務(wù)的面向方面編程框架。</p><p> 在設(shè)計(jì)應(yīng)用程序Model時(shí),MVC 模式(例如Struts)通常難于給出一個(gè)簡(jiǎn)潔明了的框架結(jié)構(gòu)。Spring卻具有能夠讓這部分工作變得簡(jiǎn)單的能力。程序開發(fā)員們可以使用Spring的 JDBC 抽象層重新設(shè)計(jì)那些復(fù)雜的框架結(jié)構(gòu)。</p><p&
38、gt; Struts技術(shù)介紹</p><p> Struts項(xiàng)目是Apache軟件基金會(huì)(ASF)贊助的一個(gè)開源項(xiàng)目。它最初是Jakarta項(xiàng)目中的一個(gè)子項(xiàng)目,并在2004年3月成為ASF的頂級(jí)項(xiàng)目。它通過(guò)采用Java Servlet/JSP技術(shù),實(shí)現(xiàn)了基于Java EE Web應(yīng)用的Model-View-Controller〔MVC〕設(shè)計(jì)模式的應(yīng)用框架〔Web Framework〕,是MVC經(jīng)典設(shè)計(jì)模式中的
39、一個(gè)經(jīng)典產(chǎn)品。</p><p> MVC結(jié)構(gòu)在Struts中,已經(jīng)由一個(gè)名為ActionServlet的Servlet充當(dāng) 控制器(Controller)的角色,根據(jù)描述模型、視圖、控制器對(duì)應(yīng)關(guān)系的struts-config.xml的配置文件,轉(zhuǎn)發(fā)視圖(View)的請(qǐng)求,組裝響應(yīng)數(shù)據(jù)模型(Model)。在MVC的 模型(Model)部分,經(jīng)常劃分為兩個(gè)主要子系統(tǒng)(系統(tǒng)的內(nèi)部數(shù)據(jù)狀態(tài)與改變數(shù)據(jù)狀態(tài)的邏輯動(dòng)作),這
40、兩個(gè)概念子系統(tǒng)分別具體對(duì)應(yīng)Struts里的ActionForm與Action兩個(gè)需要繼承實(shí)現(xiàn)超類。在這里,Struts可以與各種標(biāo)準(zhǔn)的數(shù)據(jù)訪問(wèn)技術(shù)結(jié)合在一起,包括Enterprise Java Beans(EJB), JDBC與JNDI。在Struts的視圖(View)端,除了使用標(biāo)準(zhǔn)的JavaServer Pages(JSP)以外,還提供了大量的標(biāo)簽庫(kù)使用,同時(shí)也可以與其他表現(xiàn)層組件技術(shù)(產(chǎn)品)進(jìn)行整合,比如Velocity Temp
41、lates,XSLT等。通過(guò)應(yīng)用Struts的框架,最終用戶可以把大部分的關(guān)注點(diǎn)放在自己的業(yè)務(wù)邏輯(Action)與 映射關(guān)系的配置文件(struts-config.xml)中。</p><p> 發(fā)展歷程在Java EE的Web應(yīng)用發(fā)展的初期,除了使用Servlet技術(shù)以外,普遍是在JavaServer Pages(JSP)的源代碼中,采用HTML與Java代碼混合的方式進(jìn)行開發(fā)。因?yàn)檫@兩種方式不可避免的要把
42、表現(xiàn)與業(yè)務(wù)邏輯代碼混合在一起,都給前期開發(fā)與后期維護(hù)帶來(lái)巨大的復(fù)雜度。為了擺脫上述的約束與局限,把業(yè)務(wù)邏輯代碼從表現(xiàn)層中清晰的分離出來(lái),2000年,Craig McClanahan采用了MVC的設(shè)計(jì)模式開發(fā)Struts。后來(lái)該框架產(chǎn)品一度被認(rèn)為是最廣泛、最流行JAVA的WEB應(yīng)用框架。</p><p> Struts 2的合并示意圖2006年,WebWork與Struts這兩個(gè)優(yōu)秀的Java EE Web框架(
43、Web Framework〕的團(tuán)體,決定合作共同開發(fā)一個(gè)新的,整合了WebWork與Struts優(yōu)點(diǎn),并且更加優(yōu)雅、擴(kuò)展性更強(qiáng)的框架,命名為“Struts 2”,原Struts的1.x版本產(chǎn)品稱為“Struts 1”。至此,Struts項(xiàng)目并行提供與維護(hù)兩個(gè)主要版本的框架產(chǎn)品——Struts 1與Struts 2。很多開發(fā)人員認(rèn)為Struts目前尚不成熟,應(yīng)用的成本較高。 附帶的一點(diǎn)點(diǎn)建議: Struts的優(yōu)點(diǎn)主要集中體現(xiàn)在兩個(gè)方面:T
44、aglib和頁(yè)面導(dǎo)航。Taglib是Struts的標(biāo)記庫(kù),靈活動(dòng)用,能大大提高開發(fā)效率。 Struts這個(gè)名字來(lái)源于在建筑和舊式飛機(jī)中使用的支持金屬架。它的目的是為了減少在運(yùn)用MVC設(shè)計(jì)模型來(lái)開發(fā)Web應(yīng)用的時(shí)間。你仍然需要學(xué)習(xí)和應(yīng)用該架構(gòu),不過(guò)它將可以完成其中一些繁重的工作。Struts跟Tomcat、Turbine等諸多Apache項(xiàng)目一樣,是開源軟件,這是它的一大優(yōu)點(diǎn),使開發(fā)者能更深入的了解其內(nèi)部實(shí)現(xiàn)機(jī)制。</p>
45、<p> Hibernate開源框架介紹</p><p> Hibernate是一種Java語(yǔ)言下的對(duì)象關(guān)系映射解決方案。 它是使用GNU寬通用公共許可證發(fā)行的自由、開源的軟件。它為面向?qū)ο蟮念I(lǐng)域模型到傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)的映射,提供了一個(gè)使用方便的框架。 概覽它的設(shè)計(jì)目標(biāo)是將軟件開發(fā)人員從大量相同的數(shù)據(jù)持久層相關(guān)編程工作中解放出來(lái)。無(wú)論是從設(shè)計(jì)草案還是從一個(gè)遺留數(shù)據(jù)庫(kù)開始,開發(fā)人員都可以采用Hibe
46、rnate。</p><p> Hibernate不僅負(fù)責(zé)從Java類到數(shù)據(jù)庫(kù)表的映射(還包括從Java數(shù)據(jù)類型到SQL數(shù)據(jù)類型的映射),還提供了面向?qū)ο蟮臄?shù)據(jù)查詢檢索機(jī)制,從而極大地縮短的手動(dòng)處理SQL和JDBC上的開發(fā)時(shí)間。.NET 上的 HibernateHibernate 有個(gè)在 .NET Framework 上的實(shí)現(xiàn)版本,稱為 NHibernate,在 ADO.NET Entity Framework
47、 發(fā)表之前,NHibernate 是在 .NET Framework 上經(jīng)常被使用的 ORM 實(shí)現(xiàn)。</p><p> Hibernate的架構(gòu)有三個(gè)主要部分組成:</p><p> 1連接管理:Hibernate的連接管理服務(wù)提供的數(shù)據(jù)庫(kù)連接的有效管理。數(shù)據(jù)庫(kù)連接是與數(shù)據(jù)庫(kù)進(jìn)行交互,因?yàn)樗枰罅抠Y源的開放和關(guān)閉數(shù)據(jù)庫(kù)連接的最昂貴的部分。 </p><p>
48、 2交易管理:事務(wù)管理服務(wù)提供給用戶能夠同時(shí)執(zhí)行多個(gè)數(shù)據(jù)庫(kù)報(bào)表。</p><p> 3對(duì)象關(guān)系映射:對(duì)象關(guān)系映射是從對(duì)象映射模型的數(shù)據(jù)表示為關(guān)系數(shù)據(jù)模型的技術(shù)。這部分是用來(lái)休眠選擇,插入,更新和刪除記錄窗體的基礎(chǔ)表。當(dāng)我們傳遞一個(gè)對(duì)象到Session.save()的方法時(shí),Hibernate讀取該對(duì)象的變量的狀態(tài),并執(zhí)行必要的查詢。 Hibernate是很好的工具盡可能對(duì)象關(guān)系映射的關(guān)注,但在連接管理和事
49、務(wù)管理方面,它在性能和能力缺乏。所以通常冬眠與其他正在使用的連接管理和事務(wù)管理工具。例如Apache的二溴氯丙烷是用于與Hibernate的連接池。Hibernate提供了使用中的靈活性。它被稱為“輕型”的體系結(jié)構(gòu)時(shí),我們只使用對(duì)象關(guān)系映射的組成部分。而在“全面解決”的體系結(jié)構(gòu)的所有三個(gè)組件對(duì)象關(guān)系映射,連接管理和事務(wù)管理)的使用。 </p><p><b> 原文:</b></p&
50、gt;<p> Java Technology and SSH Frame</p><p> Duke, the Java mascotJames Gosling, Mike Sheridan, and Patrick Naughton initiated the Java language project in June 1991. Java was originally designed f
51、or interactive television, but it was too advanced for the digital cable television industry at the time. The language was initially called Oak after an oak tree that stood outside Gosling's office; it went by the na
52、me Green later, and was later renamed Java, from a list of random words.Gosling aimed to implement a virtual machine and a language </p><p> Sun Microsystems released the first public implementation as Java
53、 1.0 in 1995. It promised "Write Once, Run Anywhere" (WORA), providing no-cost run-times on popular platforms. Fairly secure and featuring configurable security, it allowed network- and file-access restrictions
54、. Major web browsers soon incorporated the ability to run Java applets within web pages, and Java quickly became popular. With the advent of Java 2 (released initially as J2SE 1.2 in December 1998–1999), new versions had
55、 mult</p><p> In 1997, Sun Microsystems approached the ISO/IEC JTC1 standards body and later the Ecma International to formalize Java, but it soon withdrew from the process. Java remains a de facto standard
56、, controlled through the Java Community Process. At one time, Sun made most of its Java implementations available without charge, despite their proprietary software status. Sun generated revenue from Java through the sel
57、ling of licenses for specialized products such as the Java Enterprise System. Sun distin</p><p> Following Oracle Corporation's acquisition of Sun Microsystems in 2009–2010, Oracle has described itself
58、as the "steward of Java technology with a relentless commitment to fostering a community of participation and transparency".</p><p> PrinciplesThere were five primary goals in the creation of the
59、Java language:1.It should be "simple, object oriented, and familiar"、2.It should be "robust and secure".</p><p> 3.It should be "architecture neutral and portable"、4.It should
60、execute with "high performance"、5.It should be "interpreted, threaded, and dynamic".</p><p> Java PlatformMain articles: Java (software platform) and Java Virtual Machine</p><
61、p> One characteristic of Java is portability, which means that computer programs written in the Java language must run similarly on any supported hardware/operating-system platform. This is achieved by compiling the
62、Java language code to an intermediate representation called Java bytecode, instead of directly to platform-specific machine code. Java bytecode instructions are analogous to machine code, but are intended to be interpret
63、ed by a virtual machine (VM) written specifically for the host hard</p><p> A major benefit of using bytecode is porting. However, the overhead of interpretation means that interpreted programs almost alway
64、s run more slowly than programs compiled to native executables would. Just-in-Time compilers were introduced from an early stage that compile bytecodes to machine code during runtime.ImplementationsSun Microsystems offic
65、ially licenses the Java Standard Edition platform for Linux, Mac OS X, and Solaris. Although in the past Sun has licensed Java to Microsoft, the licen</p><p> Sun's trademark license for usage of the Ja
66、va brand insists that all implementations be "compatible". This resulted in a legal dispute with Microsoft after Sun claimed that the Microsoft implementation did not support RMI or JNI and had added platform-s
67、pecific features of their own. Sun sued in 1997, and in 2001 won a settlement of US$20 million, as well as a court order enforcing the terms of the license from Sun. As a result, Microsoft no longer ships Java with Windo
68、ws, and in recent versions </p><p> Java performance and garbage collectors:</p><p> Programs written in Java have a reputation for being slower and requiring more memory than those written in
69、 C. However, Java programs' execution speed improved significantly with the introduction of Just-in-time compilation in 1997/1998 for Java 1.1, the addition of language features supporting better code analysis (such
70、as inner classes, StringBuffer class, optional assertions, etc.), and optimizations in the Java Virtual Machine itself, such as HotSpot becoming the default for Sun's JVM in 200</p><p> Some platforms o
71、ffer direct hardware support for Java; there are microcontrollers that can run java in hardware instead of a software JVM, and ARM based processors can have hardware support for executing Java bytecode through its Jazell
72、e option.</p><p> Automatic memory managementJava uses an automatic garbage collector to manage memory in the object lifecycle. The programmer determines when objects are created, and the Java runtime is re
73、sponsible for recovering the memory once objects are no longer in use. Once no references to an object remain, the unreachable memory becomes eligible to be freed automatically by the garbage collector. Something similar
74、 to a memory leak may still occur if a programmer's code holds a reference to an object that</p><p> One of the ideas behind Java's automatic memory management model is that programmers can be spare
75、d the burden of having to perform manual memory management. In some languages, memory for the creation of objects is implicitly allocated on the stack, or explicitly allocated and deallocated from the heap. In the latter
76、 case the responsibility of managing memory resides with the programmer. If the program does not deallocate an object, a memory leak occurs. If the program attempts to access or deall</p><p> Garbage collec
77、tion may happen at any time. Ideally, it will occur when a program is idle. It is guaranteed to be triggered if there is insufficient free memory on the heap to allocate a new object; this can cause a program to stall mo
78、mentarily. Explicit memory management is not possible in Java.</p><p> Java does not support C/C++ style pointer arithmetic, where object addresses and unsigned integers (usually long integers) can be used
79、interchangeably. This allows the garbage collector to relocate referenced objects and ensures type safety and security.</p><p> As in C++ and some other object-oriented languages, variables of Java's pr
80、imitive data types are not objects. Values of primitive types are either stored directly in fields (for objects) or on the stack (for methods) rather than on the heap, as commonly true for objects (but see Escape analysi
81、s). This was a conscious decision by Java's designers for performance reasons. Because of this, Java was not considered to be a pure object-oriented programming language. However, as of Java 5.0, autoboxing</p>
82、<p> A class that is not declared public may be stored in any .java file. The compiler will generate a class file for each class defined in the source file. The name of the class file is the name of the class, wi
83、th .class appended. For class file generation, anonymous classes are treated as if their name were the concatenation of the name of their enclosing class, a $, and an integer. </p><p> The keyword public de
84、notes that a method can be called from code in other classes, or that a class may be used by classes outside the class hierarchy. The class hierarchy is related to the name of the directory in which the .java file is loc
85、ated.</p><p> The keyword static in front of a method indicates a static method, which is associated only with the class and not with any specific instance of that class. Only static methods can be invoked
86、without a reference to an object. Static methods cannot access any method variables that are not static.</p><p> The keyword void indicates that the main method does not return any value to the caller. If a
87、 Java program is to exit with an error code, it must call System.exit() explicitly.</p><p> The method name "main" is not a keyword in the Java language. It is simply the name of the method the Ja
88、va launcher calls to pass control to the program. Java classes that run in managed environments such as applets and Enterprise JavaBean do not use or need a main() method. A java program may contain multiple classes that
89、 have main methods, which means that the VM needs to be explicitly told which class to launch from.</p><p> The main method must accept an array of String objects. By convention, it is referenced as args al
90、though any other legal identifier name can be used. Since Java 5, the main method can also use variable arguments, in the form of public static void main(String... args), allowing the main method to be invoked with an ar
91、bitrary number of String arguments. The effect of this alternate declaration is semantically identical (the args parameter is still an array of String objects), but allows an alterna</p><p> The Java launch
92、er launches Java by loading a given class (specified on the command line or as an attribute in a JAR) and starting its public static void main(String[]) method. Stand-alone programs must declare this method explicitly. T
93、he String[] args parameter is an array of String objects containing any arguments passed to the class. The parameters to main are often passed by means of a command line.</p><p> Criticism of Java:</p>
94、;<p> A number of criticisms have been leveled at Java programming language for various design choices in the language and platform. Such criticisms include the implementation of generics, the handling of unsigne
95、d numbers, the implementation of floating-point arithmetic, and security vulnerabilities.</p><p> Class libraries: </p><p> Java Platform and Class libraries diagramJava libraries are the comp
96、iled bytecodes of source code developed by the JRE implementor to support application development in Java. Examples of these libraries are: </p><p> The core libraries, which include: </p><p>
97、 Collection libraries that implement data structures such as lists, dictionaries, trees, sets, queues and double-ended queue, or stacks</p><p> XML Processing (Parsing, Transforming, Validating) libraries&l
98、t;/p><p><b> Security</b></p><p> Internationalization and localization libraries</p><p> The integration libraries, which allow the application writer to communicate wi
99、th external systems. These libraries include: </p><p> The Java Database Connectivity (JDBC) API for database access</p><p> Java Naming and Directory Interface (JNDI) for lookup and discovery
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 計(jì)算機(jī)外文翻譯---jsp技術(shù)與主流java+ee開源框架(ssh)技術(shù)簡(jiǎn)介
- 計(jì)算機(jī)專業(yè) java外文翻譯
- 外文翻譯---jsp技術(shù)與主流java+ee開源框架(ssh)技術(shù)簡(jiǎn)介
- 外文翻譯---java技術(shù)及ssh框架和jsp技術(shù)的介紹
- 計(jì)算機(jī)外文翻譯---jsp應(yīng)用框架
- 計(jì)算機(jī)外文翻譯---jsp 應(yīng)用框架
- 計(jì)算機(jī)類外文文獻(xiàn)翻譯---java核心技術(shù)
- 計(jì)算機(jī)科學(xué)與技術(shù)外文翻譯
- 計(jì)算機(jī)外文翻譯--java編程語(yǔ)言的介紹
- 計(jì)算機(jī)專業(yè)英語(yǔ)java介紹外文翻譯
- 計(jì)算機(jī)專業(yè)外文翻譯---jsp 應(yīng)用框架
- 計(jì)算機(jī)專業(yè)外文翻譯--計(jì)算機(jī)
- 計(jì)算機(jī)科學(xué)與技術(shù)外文資料翻譯
- 計(jì)算機(jī)外文翻譯--java抽象窗口工具包
- 計(jì)算機(jī)外文翻譯---計(jì)算機(jī)引論
- [雙語(yǔ)翻譯]--計(jì)算機(jī)外文翻譯---安全型java servlet的開發(fā)
- java及ssh框架與jsp技術(shù)介紹
- 計(jì)算機(jī)控制技術(shù)外文翻譯
- [雙語(yǔ)翻譯]計(jì)算機(jī)專業(yè)外文翻譯—云計(jì)算中的java web部署
- 計(jì)算機(jī)科學(xué)與技術(shù)外文文獻(xiàn)翻譯
評(píng)論
0/150
提交評(píng)論