- 我的J2EE成功之路
- 郭鋒等編著
- 1733字
- 2018-12-28 13:10:26
1.5 Java Web開發(fā)所需要的技術(shù)
前面對(duì)JavaEE和MVC進(jìn)行了講解,從講解中可以知道,要開發(fā)Java Web需要遵循上面的標(biāo)準(zhǔn)和規(guī)范,當(dāng)然讀者可以自己實(shí)現(xiàn)上述規(guī)范,從而進(jìn)行Java Web開發(fā)。但幸運(yùn)的是,目前市場上有不少的開源框架已經(jīng)實(shí)現(xiàn)了上述規(guī)范,比如Struts、Spring、Hibernate等,這些開源框架大大地減輕了開發(fā)人員的工作量。
1.5.1 Ajax
Ajax并不是一個(gè)新技術(shù),它其實(shí)是整合了XMLHttpRequest、JavaScript、DOM、CSS、XML等眾多技術(shù)。
Google的Sugges(t搜索建議)、Map、Gmail等都實(shí)現(xiàn)了Ajax技術(shù)。它采用XMLHttpRequest對(duì)象進(jìn)行數(shù)據(jù)的異步交互,使用JavaScript增強(qiáng)用戶體驗(yàn),使用DOM組織內(nèi)容,使用CSS顯示外觀,使用XML封裝數(shù)據(jù)。在創(chuàng)建一個(gè)XMLHttpRequest對(duì)象時(shí),一般采用如下寫法:
var xmlhttp; if (window.XMLHttpRequest) { //其他瀏覽器 xmlhttp = new XMLHttpRequest(); } else if (window.ActiveXObject) { try { //IE瀏覽器 xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) { xmlhttp = new ActiveXObject('Msxml2.XMLHTTP'); } }
采用Ajax還需要用到JavaScript、DOM、CSS、XML等技術(shù),在后面的章節(jié)中筆者將詳細(xì)介紹上述技術(shù)。
隨著Ajax的逐漸流行,開發(fā)人員發(fā)現(xiàn),Ajax的代碼非常零亂,難于維護(hù)。為了解決這個(gè)問題,很多的Ajax框架便應(yīng)運(yùn)而生了,比如Ext、Prototype、DOJO、DWR、GWT、Buffalo等。
這里以Ext為例進(jìn)行簡單的介紹。Ext最初來源于Yui-Ext,后來Ext又獨(dú)立于Yui發(fā)展,它積累了眾多的組件,有表格、表單、動(dòng)態(tài)樹、菜單、工具條、對(duì)話框等,以方便開發(fā)人員的使用。Ext的官方網(wǎng)址為http://www.extjs.com,首頁如圖1.14所示。

圖1.14 Ext的首頁
Ext一經(jīng)推出,就以其優(yōu)美的界面迅速流行起來,開發(fā)人員只需要很少的JavaScript代碼,就能實(shí)現(xiàn)一個(gè)漂亮的界面和復(fù)雜的功能。比如,要實(shí)現(xiàn)一個(gè)帶Tab的對(duì)話框,如圖1.15所示。

圖1.15 Ext實(shí)現(xiàn)帶Tab對(duì)話框的示例
上述復(fù)雜的對(duì)話框示例所需要的JavaScript代碼如下:
//創(chuàng)建一個(gè)單列的對(duì)話框 var LayoutExample = function(){ //定義變量 var dialog, showBtn; var toggleTheme = function(){ Ext.get(document.body, true).toggleClass('xtheme-gray'); }; //返回一個(gè)公共接口 return { init : function(){ showBtn = Ext.get('show-dialog-btn'); //定義單擊事件 showBtn.on('click', this.showDialog, this); }, //定義對(duì)話框大小 showDialog : function(){ if(!dialog){ //只創(chuàng)建一次 dialog = new Ext.LayoutDialog("hello-dlg", { modal:true, width:600,//寬 height:400,//高 shadow:true, minWidth:300, minHeight:300,//最小高度 proxyDrag: true, west: { split:true, initialSize: 150, minSize: 100,//最小 maxSize: 250,//最大 titlebar: true, collapsible: true, animate: true }, center: { autoScroll:true, tabPosition: 'top',//定義Tab的位置 closeOnTab: true, alwaysShowTabs: true } }); //增加鍵盤監(jiān)聽事件和按鈕 dialog.addKeyListener(27, dialog.hide, dialog); dialog.addButton('Submit', dialog.hide, dialog); dialog.addButton('Close', dialog.hide, dialog); //添加上面定義的內(nèi)容 var layout = dialog.getLayout(); //開始更新 layout.beginUpdate(); layout.add('west', new Ext.ContentPanel('west', {title: 'West'})); layout.add('center', new Ext.ContentPanel('center', {title: 'The First Tab'})); //生成Tab layout.add('center', new Ext.ContentPanel(Ext.id(), { autoCreate:true, title: 'Another Tab', background:true})); layout.add('center', new Ext.ContentPanel(Ext.id(), { autoCreate:true, title: 'Third Tab', closable:true, background:true})); //結(jié)束更新 layout.endUpdate(); } //顯示對(duì)話框 dialog.show(showBtn.dom); } }; }(); //代替window.onload,使得不需要等待圖片和其他資源即可進(jìn)行初始化 Ext.EventManager.onDocumentReady(LayoutExample.init, LayoutExample, true);
通過上面的示例,讀者可以看出,要實(shí)現(xiàn)一個(gè)帶Tab的對(duì)話框,只需要不多的JavaScript代碼即可實(shí)現(xiàn),這在沒有Ext之前,是很難想象的。Ext提供了和后臺(tái)進(jìn)行交互的功能,但和Ext本身聯(lián)系比較緊密,不方便單獨(dú)使用它的Ajax功能。
1.5.2 MVC框架
目前實(shí)現(xiàn)MVC的框架非常多,比如大家都熟悉的Struts、Spring和WebWork等。通過前面對(duì)Mode l的介紹可以知道,Model 2會(huì)導(dǎo)致多個(gè)Controller的出現(xiàn),并且對(duì)頁面導(dǎo)航的處理比較復(fù)雜,所以Craig R. McClanahan于2000年5月 提交了一個(gè)框架給Java Community,這就是后來的Struts。2001年7月,Struts 1.0正式發(fā)布。截至到目前,Struts 2.1.6已經(jīng)正式發(fā)布了。
Struts 2概覽圖如圖1.16所示。
在2002年,Rod Johnson編寫了一本書:《Expert One-on-One J2EE設(shè)計(jì)與開發(fā)》,在這本書中,他描繪了Spring的雛形。最終,他因?yàn)椴荒苋淌蹺JB實(shí)現(xiàn)的繁雜,從而決定開發(fā)一個(gè)框架,這就是Spring。Spring由6部分組成,分別實(shí)現(xiàn)了開發(fā)Java應(yīng)用程序的不同內(nèi)容。得益于Spring框架設(shè)計(jì)的靈活性,使得它能與眾多開源框架相結(jié)合。
Spring框架如圖1.17所示。

圖1.16 Struts 2概覽圖

圖1.17 Spring框架圖
可以看到,Spring的整個(gè)框架的核心建立在Core的基礎(chǔ)之上,包括DAO、ORM、JEE、Web和AOP,由此也可以看出Spring的強(qiáng)大。
1.5.3 持久層技術(shù)
隨著EJB 3的發(fā)布,也有越來越多的人直接使用JPA了。Hibernate也提供了對(duì)JPA的支持,因此,在當(dāng)前的Java持久層框架中,Hibernate仍然是一個(gè)比較好的選擇。Hibernate在2001年發(fā)布了它的第一個(gè)正式版本;2003年6月,Hibernate 2發(fā)布;2003年年末,Hibernate被JBoss吸納;2005年3月,Hibernate 3正式發(fā)布。
為什么要使用ORM(Object/Relational Mapping)呢?這是因?yàn)殚_發(fā)人員使用的技術(shù)是面向?qū)ο蠹夹g(shù),而使用的數(shù)據(jù)庫卻是關(guān)系型數(shù)據(jù)庫,一個(gè)完整的類很難以對(duì)象的方式存儲(chǔ)在一個(gè)關(guān)系型數(shù)據(jù)庫中,它更適合存儲(chǔ)在對(duì)象型數(shù)據(jù)庫中。但目前關(guān)系型數(shù)據(jù)庫仍然占主流位置,所以要使用ORM在對(duì)象型和關(guān)系型之間建立關(guān)系,從而可以使開發(fā)人員完全用OO的思想去設(shè)計(jì)業(yè)務(wù)邏輯,而數(shù)據(jù)的存儲(chǔ)仍然使用關(guān)系型數(shù)據(jù)庫。
Hibernate對(duì)Java和.NET的支持體系圖,如圖1.18所示。

圖1.18 Hibernate對(duì)Java和.NET的支持體系圖
可以看到,因?yàn)镴DK 5.0推出的Annotations,Hibernate也開始支持Annotations,從而推出了Hibernate Annotations,使得Hibernate的配置文件不再只有XML這一種選擇。
- 現(xiàn)代測(cè)控電子技術(shù)
- 大學(xué)計(jì)算機(jī)基礎(chǔ):基礎(chǔ)理論篇
- TestStand工業(yè)自動(dòng)化測(cè)試管理(典藏版)
- Julia 1.0 Programming
- 數(shù)據(jù)庫原理與應(yīng)用技術(shù)學(xué)習(xí)指導(dǎo)
- PIC單片機(jī)C語言非常入門與視頻演練
- 可編程序控制器應(yīng)用實(shí)訓(xùn)(三菱機(jī)型)
- 大數(shù)據(jù)驅(qū)動(dòng)的設(shè)備健康預(yù)測(cè)及維護(hù)決策優(yōu)化
- MATLAB/Simulink權(quán)威指南:開發(fā)環(huán)境、程序設(shè)計(jì)、系統(tǒng)仿真與案例實(shí)戰(zhàn)
- INSTANT Drools Starter
- Linux嵌入式系統(tǒng)開發(fā)
- AVR單片機(jī)工程師是怎樣煉成的
- 大數(shù)據(jù):引爆新的價(jià)值點(diǎn)
- Learn Microsoft Azure
- 玩機(jī)器人 學(xué)單片機(jī)