出版時(shí)間:2009-1 出版社:機(jī)械工業(yè)出版社 作者:(美)吉爾里(Geary,D.),(美)高登(Gordon,R.) 著,李松峰,李維鑫 譯 頁(yè)數(shù):330
Tag標(biāo)簽:無
前言
Ajax的成功非常耐人尋味。既沒有經(jīng)過特別地發(fā)布,也沒有產(chǎn)品或報(bào)道讓人們知道有一種技術(shù)叫Ajax。好像是一夜之間,Ajax就出現(xiàn)了。盡管Jesse James Garret寫了文章為這種技術(shù)取了名字,但該文也沒有聲稱這是他的創(chuàng)造,而是指出它是一種值得關(guān)注的新趨勢(shì)、結(jié)果,雖然我們都意識(shí)到了它的存在,但對(duì)于“Ajax”到底意味著什么卻難以達(dá)成共識(shí)。對(duì)此,20位專家可能會(huì)有22種不同的解說。假如非要我概括一下他們的意見,那么我只能說它是過去15年來軟件領(lǐng)域中最好的,同時(shí)也是最差的一種技術(shù)。然而,無論人們是否知道它的起源,它是什么,或者它的優(yōu)點(diǎn)和缺點(diǎn),但每個(gè)軟件從業(yè)人員似乎都想在自己的下一個(gè)產(chǎn)品中加入平滑的新Ajax界面。從技術(shù)人員的角度看,這并不意味著是一件簡(jiǎn)單的事情。瀏覽器普遍存在兼容性問題,而且其不一致性也給開發(fā)人員帶來了無盡的痛苦。于是,大家都從自己的角度提出了正確的意見,但反映的問題卻讓人無法樂觀。。 不過,值得欣慰的是Ajax并非只有技術(shù)人員在推動(dòng)。還有另一股力量對(duì)技術(shù)人員結(jié)構(gòu)之美的困惑起到了調(diào)和作用—即用戶越來越強(qiáng)烈地認(rèn)為軟件應(yīng)該簡(jiǎn)化生活,而不是讓生活復(fù)雜化。雖然技術(shù)人員抱怨瀏覽器是軟件開發(fā)中的混沌地帶,但用戶卻因?yàn)樽约菏煜ず瓦m應(yīng)瀏覽器而對(duì)它推崇倍至。對(duì)用戶而言,瀏覽器把Internet連接的全部復(fù)雜性簡(jiǎn)化為幾個(gè)關(guān)鍵概念:地址。鏈接。前進(jìn)。后退和搜索。這就是Web中的語(yǔ)言,而且用戶對(duì)這種具有局限性的技術(shù)圖景卻樂在其中。他們?yōu)槭裁床粦?yīng)該如此呢?除了要熟悉各種瀏覽器之外,額外的約束也強(qiáng)迫軟件開發(fā)人員更關(guān)注用戶的需求。成功使用Ajax開發(fā)的一個(gè)重要標(biāo)志,就是無論你使用什么技術(shù),但結(jié)果必須對(duì)用戶有價(jià)值。雖然這對(duì)于推動(dòng)應(yīng)用程序開發(fā)的創(chuàng)新明顯具有積極意義,但軟件開發(fā)人員必須為此付出的代價(jià),則是要承受更多的痛苦和磨難。 在我聽說的新項(xiàng)目中,“當(dāng)然,它的UI要設(shè)計(jì)成非常Ajax的風(fēng)格”這樣的論調(diào)越來越多。一般情況下,通過他們對(duì)項(xiàng)目的深愛程度,我都能推測(cè)出項(xiàng)目進(jìn)展。而那些剛剛參與到項(xiàng)目中的人,則會(huì)因?yàn)槟茉诒妒荜P(guān)注的領(lǐng)域內(nèi)工作而激動(dòng)不已。他們會(huì)討論選擇某個(gè)框架的過程,有時(shí)也會(huì)粗略地聊一聊早期UI模型的情況。此時(shí)此刻,他們已經(jīng)構(gòu)建了一些小例子,一切好像都按部就班。不過,也很容易看出基于瀏覽器開發(fā)的困難對(duì)他們來說并沒有那么夸張,反而對(duì)攻克技術(shù)難關(guān)的滿足感倒是溢于言表。于是,他們決定品嘗一種時(shí)尚的濃咖啡來獎(jiǎng)勵(lì)自己。幾個(gè)月后,當(dāng)我再遇到他們時(shí),發(fā)覺他們對(duì)那個(gè)項(xiàng)目欲言又止。然而,他們最終還是向我透露,開始時(shí)對(duì)某些問題的難度估計(jì)不足,而事實(shí)證明挑戰(zhàn)還不小?!拔覀儽緛硎窍胱屗鼘?shí)時(shí)更新,但誰(shuí)知道加載要花那么多時(shí)間”。此時(shí),我的初步判斷就是他們的信心開始低落,但我還是盡力鼓勵(lì)他們。不過,我知道一場(chǎng)耐力賽才剛剛拉開帷幕。這時(shí)候,我通常會(huì)建議他們別再喝濃咖啡了,而是改喝茶。與咖啡因相比,茶更溫和且具有持久力,咖啡卻總愛在關(guān)鍵時(shí)刻掉鏈子。簡(jiǎn)單地說,要為好的Ajax應(yīng)用程序畫上完美的句號(hào),必須有足夠的時(shí)間。雖然他們都對(duì)接近真實(shí)挑戰(zhàn)的終點(diǎn)持樂觀態(tài)度,但卻往往對(duì)我的建議一笑置之。 項(xiàng)目真正的災(zāi)難開始于出現(xiàn)如下問題:我們的用戶在想什么?在試圖回答這個(gè)問題時(shí),多數(shù)人都想通過用戶測(cè)驗(yàn),或者通過發(fā)布早期的beta版來找到答案。另外還有一些人,—這些人大概吃水果之前都不會(huì)先洗一下,他們會(huì)基于自己認(rèn)為的對(duì)用戶需求的精確把握,提前發(fā)布完整版。我覺得這些人最可憐。事實(shí)上,在回答這個(gè)問題時(shí),上述兩類開發(fā)人員存在一些共同問題。首先,他們作出的避免涉及某些較難問題的決定,對(duì)用戶而言實(shí)際上是錯(cuò)誤的。其次,他們認(rèn)為任何測(cè)試都比不上實(shí)際使用。目前,類似的認(rèn)識(shí)并不僅僅存在于UI內(nèi)置的Ajax上面。我不知道有哪個(gè)成功的項(xiàng)目可以繞過這些難題。但對(duì)Ajax應(yīng)用程序而言,獨(dú)有的一個(gè)特點(diǎn)就是這些問題越來越難以解決好。因?yàn)?,需要闖過的關(guān)口實(shí)在是太多了。.。 首先要面對(duì)的恐怕就是瀏覽器間行為的不一致性。用戶會(huì)報(bào)告說在一個(gè)瀏覽器中他們的菜單顯示在了錯(cuò)誤的位置上。在另外一個(gè)瀏覽器中,文本又發(fā)生了折行。但在第三種瀏覽器中,雖然不存在前兩個(gè)問題,但卻在加載應(yīng)用程序15分鐘后,由于某些內(nèi)容的變化,導(dǎo)致整個(gè)界面出現(xiàn)了閃爍現(xiàn)象。其次,你可能會(huì)發(fā)現(xiàn)用戶的使用模式不對(duì)頭,而且UI中的某些部分還必須得改變—如果不是出現(xiàn)討厭且莫名其妙的問題,這些改變通過JavaScript的靈活表達(dá)性來實(shí)現(xiàn)也確實(shí)會(huì)讓人折服。我也曾在很多情況下嘗試無縫地重構(gòu)大型JavaScript代碼基,但沒有一次令人滿意。在這些錯(cuò)綜復(fù)雜的問題之上,只有一個(gè)硬道理:應(yīng)用程序必須讓用戶滿意。因此,除了剛剛介紹的這些直接困難之外,用戶體驗(yàn)最大化這個(gè)主要目標(biāo)仍然未變。而且,當(dāng)應(yīng)用程序運(yùn)行后,這也是人們?cè)u(píng)估它的唯一標(biāo)準(zhǔn)。你的應(yīng)用程序能夠滿足用戶需要嗎? 簡(jiǎn)單地說,這正是Google Web Toolkit的使命—讓開發(fā)人員在面對(duì)這些問題時(shí),能夠更輕松說“沒問題”。我們?cè)絹碓接憛捁袅钊祟^疼的Ajax開發(fā),特別是忿忿地抱怨瀏覽器,因?yàn)檫@最終毫無結(jié)果,更得不到什么好處。不過,這樣卻會(huì)讓你知道什么對(duì)用戶最好,但你卻無法真正實(shí)現(xiàn)—因?yàn)檫@就相當(dāng)于連一把好用的錘子都沒有,卻幻想著建設(shè)一套房子。GWT充分利用了已有的工具。例如,軟件工程中就有不少好用的“錘子”,而我們就非常奇怪,怎么就沒有人在Ajax開發(fā)中有效地使用它們呢。我們堅(jiān)定地認(rèn)為,確保Web應(yīng)用程序持續(xù)改進(jìn)的正確方法,就是利用優(yōu)秀的軟件工程工具和已有的最佳實(shí)踐。GWT可以讓開發(fā)人員通過Java來編寫Ajax代碼,也利用了UI開發(fā)人員耳熟能詳?shù)母鞣N概念和模式,在開發(fā)中使用可驗(yàn)證的開發(fā)環(huán)境,包括像Eclipse這樣具有代碼完成和重構(gòu)工具的IDE,在真實(shí)的瀏覽器中運(yùn)行并調(diào)試應(yīng)用程序,并使用可靠的調(diào)試器,然后,再通過編譯器將全部Java代碼轉(zhuǎn)換成小型化但卻高性能的JavaScript代碼。而且,這些代碼可以應(yīng)對(duì)絕大多數(shù)瀏覽器問題,甚至讓開發(fā)人員都毫無覺察。當(dāng)然,也包括將各種從未想到過的操作平滑地轉(zhuǎn)換為JavaScript。GWT無意挑起趨勢(shì)和語(yǔ)言之爭(zhēng),它只是一種實(shí)用的。能夠解決問題的方案。 為此,當(dāng)我看到David Geary的這本書如其名的著作時(shí),感到非常高興,因?yàn)楸緯鴤?cè)重于具體而實(shí)用的解決方案。本書與GWT的精神完全合拍。如果拋開用戶關(guān)心的問題不談,那么無論設(shè)計(jì)模式還是優(yōu)雅的代碼都將無的放矢。David在本書中不僅提供了精心準(zhǔn)備的各種示例,同時(shí)也向讀者展示了更高級(jí)的內(nèi)容。而且,書中每個(gè)示例都能完美地適應(yīng)兩個(gè)層面的應(yīng)用。首先,通過這些示例可以學(xué)習(xí)到使用GWT構(gòu)建用戶界面的過程,其中不僅融合了常見的模式,甚至還揭示出許多可能的缺陷。其次,書中每個(gè)解決方案都可以在實(shí)際項(xiàng)目中照樣子加以重用。因此,如果將來涌現(xiàn)的GWT應(yīng)用程序中出現(xiàn)這些示例的影子,我一點(diǎn)也不會(huì)感到驚訝。我相信讀者也會(huì)認(rèn)同這種高效率的方法。事實(shí)上,讀者對(duì)書中解決方案的評(píng)判標(biāo)準(zhǔn),最好能像我對(duì)GWT給出的評(píng)判標(biāo)準(zhǔn)一樣:看手中的這本書對(duì)您創(chuàng)建滿足用戶需求的應(yīng)用程序是否有用。
內(nèi)容概要
Google Web Toolkit (GWT)是一種開源的Java框架,用于構(gòu)建Java驅(qū)動(dòng)的Web應(yīng)用程序。通過GWT,開發(fā)者可以使用純Java來實(shí)現(xiàn)豐富的客戶端應(yīng)用。在簡(jiǎn)化開發(fā)能夠運(yùn)行于各種瀏覽器中的、類似于桌面應(yīng)用程序的客戶端應(yīng)用方向,GWT超過了大多數(shù)Java框架。局限用戶界面豐富性的唯一因素就是開發(fā)者的想象力。本書內(nèi)容涵蓋了GWT的高級(jí)特性,在構(gòu)建具有豐富用戶界面的真實(shí)應(yīng)用程序時(shí),完全可以利用這些特性而不必學(xué)習(xí)JavaScript和其他相關(guān)的Java技術(shù)。本書中的每個(gè)解決方案并不局限于解決一個(gè)問題,而是融合了設(shè)計(jì)模式和最佳實(shí)踐。作者對(duì)示例應(yīng)用程序的耐心解釋,有助于讀者迅速掌握高級(jí)的GWT技術(shù),例如實(shí)現(xiàn)拖放、整合JavaScript庫(kù),以及使用高級(jí)事件處理機(jī)制等?! ”緯鴥?nèi)容:構(gòu)建自定義GWT部件,包括高級(jí)復(fù)合部件和低級(jí)組件。實(shí)現(xiàn)具有iPhone風(fēng)格的自動(dòng)滾動(dòng)功能的視口類。通過GWT在應(yīng)用程序中整合Web服務(wù)。將Script.aculo.us.JavaScript框架整合到GWT應(yīng)用程序中。組合Hibernate和GWT實(shí)現(xiàn)基于數(shù)據(jù)庫(kù)的Web應(yīng)用程序。擴(kuò)展GWT的PopupPanel類以實(shí)現(xiàn)可拖動(dòng)和可調(diào)整大小的窗口。創(chuàng)建拖放模塊,包含拖動(dòng)源和放置目標(biāo)。將GWT應(yīng)用程序部署到外部服務(wù)器。動(dòng)態(tài)調(diào)整可伸縮表格。在基于Struts.JavaServer Faces等其他框架開發(fā)的原有應(yīng)用程序中使用GWT部件。
作者簡(jiǎn)介
David Geary著名作者、演講者和顧問。他是JSF(JavaServer Faces)的專家組成員。此外,David不曾為Sun的Web Developer Certification Exam編寫試題。David Geary編著了8本Java技術(shù)書,包括最暢銷的Graphic Java 2 Series、Advanced JavaServer Pages和Core JavaServer Faces
書籍目錄
譯者序序前言第1章 GWT入門與進(jìn)階 1.1 綜述 1.2 本章要點(diǎn) 1.3 GWT部件簡(jiǎn)介 1.4 GWT應(yīng)用程序分析 1.5 通過GWT面板構(gòu)建用戶界面 1.5.1 根面板 1.5.2 user.client.ui API 1.6 通過CSS為部件添加樣式 1.7 GWT與事件驅(qū)動(dòng)的程序設(shè)計(jì) 1.8 國(guó)際化與本地化 1.8.1 實(shí)現(xiàn)GWT國(guó)經(jīng)的4個(gè)步驟 1.8.2 使用GWT的il8nCreator命令 1.9 GWT Web應(yīng)用程序中的新“視圖” 1.10 GWT的歷史機(jī)制 1.10.1 添加歷史類和歷史偵聽器 1.10.2 處理瀏覽器后退按鈕 1.11 GWT的對(duì)等實(shí)體:DOM元素 1.12 使用延遲命令賦予部件鍵盤焦點(diǎn) 1.13 實(shí)現(xiàn)遠(yuǎn)程過程調(diào)用 1.14 使用自定義部件 1.15 在GWT模塊中封裝自定義部件 1.16 完整的登錄實(shí)用程序 1.17 本章回顧第2章 JavaScript整合技術(shù) 2.1 本章要點(diǎn) 2.2 整合JavaScript庫(kù)Script.aculo.us 2.2.1 在HTML文件中導(dǎo)入JavaScript文件 2.2.2 在GWT配置文件中導(dǎo)入JavaScript文件 2.3 整合JavaScript日歷 2.4 本章回顧第3章 自定義部件 3.1 本章要點(diǎn) 3.2 復(fù)合的自定義部件 3.2.1 復(fù)合部件和傳遞方法 3.2.2 事件處理程序 3.2.3 觸發(fā)變化事件 3.2.4 實(shí)現(xiàn)HasText和Has Name接口 3.2.5 整合Script.aculo.us的Blind Down效果 3.3 低級(jí)自定義部件 3.3.1 在低級(jí)自定義部件中使用DOM類 3.3.2 為自定義部件設(shè)置默認(rèn)CSS樣式 3.3.3 在自定義部件中通過參數(shù)控制Script.aculo.us效果 3.4 本章回顧第4章 視口與地圖 4.1 本章要點(diǎn) 4.2 通用視口部件 4.3 地圖應(yīng)用程序的文件和目錄 4.4 實(shí)現(xiàn)視口 4.4.1 通過AbsolutePanel實(shí)例在像素級(jí)別上放置部件 4.4.2 在視口中拖動(dòng)視圖 4.4.3 通過焦點(diǎn)面板響應(yīng)鼠標(biāo)事件 4.4.4 通過事件預(yù)覽禁止瀏覽器對(duì)鼠標(biāo)事件的默認(rèn)響應(yīng) 4.4.5 捕獲事件 4.5 深入理解焦點(diǎn)面板在視口中的應(yīng)用 4.6 帶動(dòng)態(tài)手勢(shì)的視口視圖 4.7 完成后的視口 4.7.1 加入拖動(dòng)手勢(shì) 4.7.2 響應(yīng)拖動(dòng)手勢(shì)的動(dòng)態(tài)滾動(dòng) 4.7.3 與拖動(dòng)手勢(shì)保持同方向動(dòng)態(tài)滾動(dòng) 4.7.4 改變動(dòng)態(tài)滾動(dòng)的速度 4.8 本章回顧第5章 訪問在線Web服務(wù) 5.1 本章要點(diǎn) 5.2 Yahoo!Maps Web服務(wù) 5.2.1 示例應(yīng)用程序分析 5.2.2 地圖應(yīng)用程序的文件和目錄 5.2.3 實(shí)現(xiàn)Yahoo!Maps應(yīng)用程序 5.3 訪問Yahoo!Maps的Web服務(wù) 5.4 縮放 5.5 本章回顧第6章 拖放技術(shù) 6.1 本章要點(diǎn) 6.2 拖放示例應(yīng)用程序 6.3 拖放模塊 6.4 實(shí)現(xiàn)拖放模塊 6.4.1 使用音樂播放器和購(gòu)物車面板組件 6.4.2 使用拖動(dòng)源和放置目標(biāo) 6.4.3 定義CSS類 6.5 在GWT模塊中實(shí)現(xiàn)拖放 6.5.1 模塊配置文件 6.5.2 抽象拖動(dòng)源和放置目標(biāo)類 6.5.3 鼠標(biāo)偵聽器 6.6 本章回顧第7章 簡(jiǎn)單的窗口 7.1 本章要點(diǎn) 7.2 基于伸縮表格構(gòu)建窗口 7.3 簡(jiǎn)單的窗口 7.3.1 使用彈出面板 7.3.2 重寫彈出面板默認(rèn)的事件處理行為 7.3.3 使用GWT的伸縮表格并為其單元格添加樣式 7.3.4 接收事件 7.3.5 操作部件DOM元素的Z軸堆疊次序 7.3.6 調(diào)整彈出面板的大小 7.3.7 防止意外的瀏覽器效果 7.4 窗口標(biāo)題欄 7.4.1 在水平面板的單元格內(nèi)對(duì)齊部件 7.4.2 通過鼠標(biāo)偵聽器和圖像模擬3D按鈕 7.4.3 移動(dòng)彈出面板 7.4.4 在窗口標(biāo)題中防止意外的瀏覽器效果 7.5 本章回顧第8章 伸縮表格 8.1 本章要點(diǎn) 8.2 伸縮表格簡(jiǎn)介 8.3 簡(jiǎn)化伸縮表格的操作 8.4 刪除伸縮表格的行 8.5 編輯伸縮表格的單元格 8.6 動(dòng)態(tài)調(diào)整伸縮表格的列 8.6.1 通過GWT構(gòu)建事件偵聽器和觸發(fā)事件 8.6.2 構(gòu)建ResizableCellPanel部件 8.6.3 將ResizableCellPanel部件加入伸縮表格 8.7 通過伸縮表格實(shí)現(xiàn)數(shù)據(jù)分頁(yè) 8.8 使用Pager部件 8.9 本章回顧第9章 文件上傳 9.1 本章要點(diǎn) 9.2 GWT的文件上傳部件 9.2.1 創(chuàng)建用戶界面 9.2.2 解析JSON 9.3 Apache Commons fileUpload 9.4 本章回顧第10章 整合Hibernate第11章 外部服務(wù)器部署第12章 GWT與遺留程序
章節(jié)摘錄
插圖:
圖書封面
圖書標(biāo)簽Tags
無
評(píng)論、評(píng)分、閱讀與下載
Google Web Toolkit開發(fā)實(shí)戰(zhàn) PDF格式下載