內 容 簡 介
本書是《基於J2EE的Ajax寶典》的第二版。《基於J2EE的Ajax寶典》面市近2年,作為Ajax領域最全面、實用的圖書,一直深受讀者的好評。
全書主要分為三個部分。第一部分介紹了XHTML、CSS、JavaScript和DOM編程等內容。第二部分詳細介紹了Prototype、jQuery、DWR、AjaxTags等四個最常用的Ajax框架的用法,並針對每個框架提供了一個實用案例。這兩個部分是筆者在“瘋狂Java實訓營”的培訓講義,是本書的重點部分。第三部分則提供了2個綜合性案例:Blog系統和電子拍賣系統,讓讀者將前面所學真正套用到實際項目中。
本書絕大部分章節後都提供了相應的編程習題,供開發者鞏固所學,將理論融入實際開發之用。關於這些編程習題的解題思路和參考答案可登錄網站獲取。
本書是瘋狂Java體系叢書之一,前8章基本以XHTML、JavaScript和DOM編程為主,無須任何基礎即可閱讀;第9章以後的內容則需要掌握Spring、Hibernate等Java EE知識,建議先認真閱讀瘋狂Java體系的《輕量級Java EE企業套用實戰》一書。
編輯推薦
瘋狂源自夢想,技術成就輝煌。
看得懂 學得會 做得出
不知道是否有人仔細研究過筆者寫的書,書中的長句是很少的——因為很多語句自己都會反覆地調整,有興趣的讀者可以仔細體會一下這個特點。此外,本書還有如下特點:
該書第一版作為培訓教材近2年了.在吸收大量學習者的學習體會和心得的基礎上,本書重點講解了學習過程中難以理解和掌握的知識點,降低了學習者的學習難度。
2.知識豐富,內容全面正如該書的第一版,書中知識非常全面:XHTML、CSS、JavaScript、DOM、Event機制XMLHttpRequest、Prototype庫、jQuery、DWR、AjaxTags等Ajax知識的相關內容.都可在本書中找到詳細的講解。
3.深入實用,實踐性強本書並不是一本Ajax的入門圖書,本書將Ajax技術融入輕量級Java EE開發,深入介紹了Ajax+Java EE整合開發的方法和步驟,對實際企業開發具有極好的指導意義。
前 言
Ajax技術已經不再是新技術,它已經成為企業開發中套用最廣泛的技術之一,不管採用什麼樣的開發平台:Java EE也好,.NET也好,PHP也好,Ruby on Rails也好,只要開發B/S架構的套用,那么表現層就一定會使用Ajax技術。
Ajax技術採用異步方式傳送請求,避免了每個請求對應一個頁面的模式,允許在一個頁面傳送多個請求,從而可以更大程度地利用已下載的頁面,伺服器每次回響生成的只是必需的數據,無須回響生成整個頁面。對用戶而言,傳送異步請求不會阻塞當前的瀏覽器執行緒,瀏覽器可以繼續下一步操作:比如繼續瀏覽或再次傳送異步請求。因此用戶將不會處於等待狀態,而是感覺自己一直與套用處於互動狀態,從而帶給了用戶連續的體驗。
Ajax技術是Web 2.0的重要技術之一,互連網上各種Blog系統、RSS,以及Wiki系統和SNS交友網路等,都大量使用了Ajax技術。
Ajax技術還催生了大量的網頁遊戲。國內的很多遊戲運營商紛紛推出了自己的網頁遊戲。網頁遊戲具有無須下載、安裝,即開即玩、簡單便捷的特徵,尤其對辦公室上班族具有較大的吸引力,因此也具有很好的市場前景。在這種網頁遊戲中,每個網頁上都包含了大量製作精美的圖片,當遊戲玩家單擊、雙擊這些圖片時,系統將採用Ajax技術與遠程伺服器通信,這是絕大部分網頁遊戲的底層運行機制。
2007年出版的《基於J2EE的Ajax寶典》具有全面、專業的特徵,書中不僅深入介紹了Ajax編程的底層原理和技術,還全面介紹了Prototype、Dojo、DWR、JSON-RPC-Java和AjaxTags等5個Ajax框架。不過,Dojo版本更新太快,這一點限制了它在實際企業開發中的套用。本書作為《基於J2EE的Ajax寶典》的第二版,詳細介紹了XHTML、CSS、JavaScript、DOM和JavaScript事件機制等基礎知識,重點分析了XMLHttpRequest對象的運行機制和運行原理。Ajax框架的介紹部分,Prototype、DWR、AjaxTags等框架升級到了最新版本,另外新增介紹了JQuery框架。
寫一本書真的很累!每次一本書寫到最後幾章時,都會有一種近似虛脫的感覺。此外,如果還遭遇一些來自外界的困擾,就讓人更加難以靜下來做事。不過,筆者現在的主要職業是培訓,需要不斷地面對新的學生,有責任引導他們進入軟體開發行業,這大概是支持自己繼續寫下去的一個動力吧。
最初,筆者寫書僅僅是為了作為筆者的培訓教材,幫助自己的學生能更好地理解自己所講授的內容,所以總是儘量使用清晰條理的方式來組織內容,用實用、易操作的實例來演示開發,用通俗易懂的語言進行表達。希望把實際企業開發中解決問題的方法,用通俗、簡單的語言告訴學生。
在本書創作過程中,筆者一度感到非常困惑:其實筆者這些書的學術價值真的很少,因為基本上沒有什麼創新,絕大部分都是前人的智慧。充其量,筆者只是進行了再歸納、總結,於是難免感到意興闌珊。
無聊中和一位美籍華人(一位資深CTO)在Skype上聊天,他告訴筆者:印度的程式設計師數量大概是中國程式設計師的100倍,因為印度有大量的程式設計師基數,所以就孕育出了大量優秀的程式設計師。中國人,雖然是世界上非常聰明的種族之一,但中國程式設計師太少了,所以中國產生的優秀程式設計師也很少。你寫的書雖然沒有什麼創新,但只要能把實際軟體開發的方法和經驗傳播開來,讓更多的年輕人走進軟體開發行業,你就為中國的軟體開發業做出了貢獻。如果有一天中國擁有1億以上的軟體開發工程師,那中國軟體行業就真正發展起來了。
那天之後,蕭索的心情開始慢慢好轉,畢竟自己還在做一件“切實愛國”的事情。筆者心想:愛國,不是光喊口號的事情,而是需要埋頭做事的。
不知道是否有人仔細研究過筆者寫的書,書中的長句是很少的——因為很多語句自己都會反覆地調整,有興趣的讀者可以仔細體會一下這個特點。
《基於J2EE的Ajax寶典》上市一年半了,其間收到不少讀者來信,對書中內容也提了一些自己的見解。此外,該書也一直作為“瘋狂Java實訓營”的講義,這些對本書的升級起到了很大的幫助。
此外,本書還有如下特點:
1.通俗易懂,適合自學
該書第一版作為培訓教材近2年了,在吸收大量學習者的學習體會和心得的基礎上,本書重點講解了學習過程中難以理解和掌握的知識點,降低了學習者的學習難度。
2.知識豐富,內容全面
正如該書的第一版,書中知識非常全面:XHTML、CSS、JavaScript、DOM、Event機制、XMLHttpRequest、Prototype庫、jQuery、DWR、AjaxTags等Ajax知識的相關內容,都可在本書中找到詳細的講解。
3.深入實用,實踐性強
本書並不是一本Ajax的入門圖書,本書將Ajax技術融入輕量級Java EE開發,深入介紹了Ajax+Java EE整合開發的方法和步驟,對實際企業開發具有極好的指導意義。
本書創作過程中有一些小事情一度影響了筆者的心情,讓筆者產生過心灰意懶、意興闌珊的感覺,使得寫作也一度中斷。在此,要衷心感謝電子工業出版社的朋友,以及瘋狂Java聯盟的楊恩雄、heyitang、petrelsky5等廣大網友和所有給我鼓勵的朋友,是你們的支持讓我再度燃起創作熱情。
本書寫給誰看本書是瘋狂Java體系叢書之一,前半部分(前8章)沒有基礎即可閱讀,後半部分則需要一定的Spring、Hibernate等Java EE基礎。如果讀者只希望掌握JavaScript編程、DHTML和Ajax基礎,則無須任何基礎;如果讀者希望將Ajax融入實際的Java EE開發,則建議先閱讀《輕量級Java EE企業套用實戰》一書。
李 剛
2008年3月17日
目 錄
第1章 Ajax概述1.1 重新思考Web套用 2
1.1.1 套用系統的發展史 2
1.1.2 傳統Web套用的優勢和缺點 4
1.2 重新設計Web套用 5
1.2.1 富Internet套用 5
1.2.2 異步傳送請求,避免等待 7
1.2.3 使用Ajax 7
1.3 Ajax介紹 7
1.3.1 Ajax的工作方式 8
1.3.2 Ajax的核心:XMLHttpRequest 8
1.3.3 Ajax的編程腳本:JavaScript語言 9
1.3.4 HTML頁面的DOM模型 9
1.3.5 數據交換和顯示 10
1.4 Ajax的基本特徵 10
1.4.1 異步傳送請求 10
1.4.2 伺服器回響是數據,而不是頁面
內容 11
1.4.3 瀏覽器中的是套用,不是簡單視圖 11
1.5 Ajax的替代技術 11
1.5.1 Sun的Java Web Start技術 11
1.5.2 Microsoft的CLICKONCE技術 12
1.5.3 基於Flash的Flex 12
1.6 搭建Ajax開發環境 13
1.6.1 本書的Ajax開發環境 13
1.6.2 安裝Tomcat伺服器 13
1.6.3 配置Tomcat的服務連線埠 15
1.6.4 進入Tomcat控制台 15
1.6.5 部署Web套用 17
1.6.6 配置Tomcat的數據源 18
1.6.7 安裝Ant 19
1.6.8 Eclipse的下載和安裝 21
1.6.9 線上安裝Eclipse外掛程式 21
1.6.10 手動安裝Eclipse外掛程式 22
1.7 調試JavaScript腳本 23
1.8 本章小結 24
2.1 Ajax帶來的優勢 26
即使使用Ajax技術,客戶端和服務
器一樣有網路通信延遲,尤其是當網
絡狀況不好時,通信延遲將更嚴重,
用戶一樣感受不到更新延遲嗎? 27
2.2 開始傳統的JSP聊天室 28
2.2.1 實現業務邏輯組件 28
2.2.2 實現控制器 31
2.2.3 實現視圖 33
2.2.4 JSP聊天室的問題 34
2.3 Ajax聊天室 34
2.3.1 異步傳送請求 35
使用Ajax技術是不是會帶來更大
的工作量? 37
2.3.2 解決多餘刷新的問題 37
2.3.3 解析伺服器回響 39
2.3.4 何時傳送請求 40
客戶端頻繁傳送請求,難道不會加
重伺服器負擔? 41
2.3.5 Ajax聊天室的特點 44
2.4 Ajax編程的技術難點 44
2.5 傳統Web套用與Ajax套用的對比 45
2.6 本章小結 46
3.1 XHTML簡介 48
3.1.1 HTML的作用和歷史 48
在保存HTML 檔案時,到底採用
.htm擴展名還是採用.html擴展名呢?
48
我應該使用FrontPage學習HTML文
檔呢?還是使用Dreamweaver好? 49
3.1.2 HTML 4.01和XHTML 49
如果我使用XHTML編寫網際網路
頁,會不會有瀏覽器不支持? 50
3.2 XHTML的基本語法 50
3.2.1 XHTML的基本結構和規則 50
3.2.2 XHTML和DTD 52
3.3 XHTML的常用標籤 54
3.3.1 基本標籤 54
3.3.2 文本格式化標籤 55
如果我希望HTML頁面內的文本更
美觀,例如改變它們的顏色、背景
等,那該用什麼標籤呢? 57
3.3.3 超級連結和錨點 57
3.3.4 列表相關標籤 58
3.3.5 圖像相關標籤 59
3.3.6 表格相關標籤 61
3.3.7 框架相關標籤 64
3.4 XHTML的表單標籤 65
3.4.1 表單標籤 66
3.4.2 使用input元素 67
前面的頁面中包含5個單選框,為
何前面3個只能選中一個,後面2
個只能選中一個,但一共可以選擇
2個呢? 69
3.4.3 使用label定義標籤 69
在表單里直接定義普通文本不可以
作為標籤嗎?專門使用<label.../>元
素定義標籤有什麼作用? 69
3.4.4 使用button定義按鈕 70
3.4.5 列表框和下拉選單 71
3.4.6 使用textarea定義文本域 72
3.5 XHTML頭部和元信息 73
3.6 本章小結 74
本章練習 74
4.1 JavaScript簡介 76
4.1.1 運行JavaScript 77
4.1.2 導入JavaScript檔案 77
4.2 數據類型和變數 77
4.2.1 定義變數的方式 78
4.2.2 類型轉換 78
4.2.3 變數 80
4.3 基本數據類型 82
4.3.1 數值類型 82
4.3.2 字元串類型 86
4.3.3 布爾類型 89
4.3.4 undefined和null 90
4.3.5 正則表達式 91
4.4 複合類型 93
4.4.1 對象 93
4.4.2 數組 93
4.4.3 函式 94
4.5 運算符 96
4.5.1 賦值運算符 96
4.5.2 算術運算符 97
4.5.3 位運算符 98
4.5.4 加強的賦值運算符 99
4.5.5 比較運算符 100
4.5.6 邏輯運算符 101
4.5.7 三目運算符 102
4.5.8 逗號運算符 103
4.5.9 void運算符 103
4.5.10 typeof和instanceof運算符 104
4.6 語句 104
4.6.1 語句塊 105
4.6.2 空語句 105
4.6.3 異常拋出語句 105
4.6.4 異常捕捉語句 106
4.6.5 with語句 107
4.7 流程控制 108
4.7.1 分支 108
4.7.2 while循環 110
4.7.3 do while循環 111
4.7.4 for循環 111
4.7.5 for in循環 112
4.7.6 break和continue 113
4.8 函式 116
4.8.1 函式定義 116
4.8.2 局部變數和局部函式 117
4.8.3 匿名函式 118
4.8.4 函式和類 120
4.8.5 函式的實例屬性和靜態屬性 121
4.8.6 遞歸函式 123
4.9 函式的參數處理 124
4.9.1 基本類型和複合類型的參數傳遞 125
4.9.2 空參數 126
4.9.3 參數類型 127
4.10 對象 128
4.10.1 面向對象的概念 129
4.10.2 對象和關聯數組 129
4.10.3 繼承和prototype 130
4.11 建對象 135
4.11.1 使用關鍵字new創建對象 135
4.11.2 使用Object直接創建對象 135
4.11.3 使用JSON語法創建對象 137
4.12 本章小結 140
本章練習 140
5.1 樣式單概述 142
5.2 CSS的基本使用 143
5.2.1 引入外部樣式檔案 143
5.2.2 使用內部CSS樣式 144
5.2.3 使用內聯樣式 146
5.3 使用CSS屬性 147
5.3.1 文字相關屬性 148
5.3.2 整體段落相關屬性 150
5.3.3 背景相關屬性 151
5.3.4 表格相關屬性 152
5.3.5 大小相關屬性 155
5.3.6 位置相關屬性 155
5.3.7 框線相關屬性 157
5.3.8 輪廓相關屬性 159
5.3.9 三個常用屬性 160
5.4 選擇器定義 161
5.4.1 屬性選擇器 162
5.4.2 ID選擇器 163
5.4.3 class選擇器 164
5.4.4 包含選擇器和子元素選擇器 165
5.4.5 超級連結相關選擇器 166
5.5 在腳本中修改顯示樣式 166
5.5.1 隨機改變頁面的背景色 167
5.5.2 捲簾效果 167
5.5.3 動態增加立體效果 169
5.6 本章小結 170
6.1 DOM模型概述 172
6.2 DOM模型和XHTML文檔 173
6.2.1 XHTML元素之間的繼承圖 173
6.2.2 XHTML元素之間常見的包含
關係 174
6.3 訪問XHTML元素 175
6.3.1 根據ID訪問XHTML元素 175
如何讓每個XHTML元素都有唯
一的id屬性呢?以前我見到很多
XHTML頁面元素並沒有id屬
性啊。 175
程式中為了訪問<div.../>元素和
<textarea.../>元素的“內容”,為
何一個用innerHTML屬性,另一
個用value屬性? 176
6.3.2 利用節點關係訪問XHTML元素 176
6.3.3 訪問表單域控制項 178
6.3.4 訪問列表框、下拉選單的選項 179
6.3.5 訪問表格子元素 180
6.4 修改XHTML元素 182
6.5 新增XHTML元素 183
6.5.1 創建或複製節點 183
6.5.2 添加節點 185
6.5.3 為列表框、下拉選單增加選項 185
6.5.4 動態添加表格內容 187
6.6 刪除XHTML元素 188
6.6.1 刪除節點 188
6.6.2 刪除列表框、下拉選單的選項 189
6.6.3 刪除表格的行或單元格 191
6.7 傳統DHTML模型 192
6.8 使用window對象 194
6.8.1 訪問歷史 196
6.8.2 瀏覽器對象 197
6.8.3 訪問頁面URL 197
6.8.4 客戶機螢幕信息 198
6.8.5 彈出新視窗 199
6.8.6 確認對話框和輸入對話框 199
6.8.7 使用定時器 200
6.9 使用document對象 201
6.9.1 動態頁面 202
6.9.2 讀寫Cookie 203
6.10 兩個常用範例 204
6.10.1 可編輯表格 204
6.10.2 導航選單 206
6.11 DOM模型和XML文檔 210
6.11.1 使用DOM解析XML文檔 210
6.11.2 使用DOM解析器創建XML 212
6.12 本章小結 214
本章練習 214
7.1 基本事件模型 216
7.1.1 綁定XHTML元素屬性 216
7.1.2 綁定DOM對象的屬性 218
7.1.3 事件處理函式和關鍵字this 219
7.1.4 使用返回值改變默認行為 221
7.1.5 在代碼中觸發事件 222
為什麼在<form.../>元素中<input.../>元
素的id屬性值不能是submit呢? 223
7.2 Ajax套用的MVC 224
7.3 Internet Explorer的事件模型 226
7.3.1 使用script for綁定 227
7.3.2 使用attachEvent方法執行綁定 227
7.3.3 訪問事件對象 229
此處介紹的是Internet Explorer中訪問事件的方式,那么其他瀏覽器呢? 232
7.3.4 事件冒泡 232
7.3.5 重定向事件 234
7.3.6 取消事件默認行為 236
7.3.7 捕獲滑鼠事件 237
7.4 DOM 2的事件模型 239
7.4.1 綁定事件處理器 239
7.4.2 訪問事件對象 241
DOM 2事件模型和Internet Explorer事件模型里訪問事件對象的方式完全不同,如果我們需要寫一個跨瀏覽器的程式,是不是只能將事件處理函式綁定到XHTML元素,並將event顯式作為參數傳入事件處理函式? 241
7.4.3 事件傳播 243
7.4.4 轉發事件 247
7.4.5 取消事件的默認行為 249
7.5 本章小結 250
本章練習 250
8.1 XMLHttpRequest對象概述 252
8.2 XMLHttpRequest的方法和屬性 252
8.2.1 XMLHttpRequest的方法 252
8.2.2 XMLHttpRequest的屬性 256
8.3 傳送請求 258
8.3.1 傳送簡單請求 259
8.3.2 傳送GET請求 261
8.3.3 傳送POST請求 263
8.3.4 傳送請求時的編碼問題 264
8.3.5 傳送XML請求 268
8.4 處理伺服器回響 270
8.4.1 處理的時機 270
8.4.2 使用文本回響 271
8.4.3 使用XML回響 271
8.4.4 使用DOM模型生成頁面 273
8.5 XMLHttpRequest對象的運行周期 273
8.6 Ajax必須解決的問題 274
8.6.1 跨瀏覽器問題 274
8.6.2 安全性問題 275
8.6.3 性能問題 277
8.7 本章小結 280
9.1 Prototype的下載和安裝 282
9.1.1 什麼是Prototype庫 282
9.1.2 下載Prototype庫 282
9.1.3 安裝Prototype庫 283
9.1.4 使用Prototype對象 283
9.2 Prototype的工具函式 284
9.2.1 使用$()函式 284
9.2.2 使用$$()函式 286
9.2.3 使用$A()函式 288
9.2.4 使用$F()函式 289
9.2.5 使用$H()函式 290
9.2.6 使用$R()函式 291
9.2.7 使用Try.these()函式 291
9.3 Prototype的JSON支持 293
9.4 Prototype的自定義對象和類 294
9.4.1 使用Element對象 294
9.4.2 使用Element.Methods 298
9.4.3 使用Enumerable 298
9.4.4 使用ObjectRange 302
9.4.5 使用Form.Element操作表單控制項 302
9.4.6 使用Form操作表單 304
9.4.7 使用Hash對象 305
9.4.8 使用Event 307
element()和findElement()的關係到底是怎么回事呢? 307
9.4.9 使用Template 308
9.4.10 使用Class 309
9.4.11 兩個常用的監聽器 310
9.5 Prototype常用的擴展 312
9.5.1 擴展Array 312
9.5.2 擴展document 313
9.5.3 擴展String 314
9.5.4 擴展Function 316
9.5.5 擴展Number 318
9.6 Prototype的Ajax支持 319
9.6.1 使用Ajax.Request類 319
9.6.2 使用Form.request方法 322
9.6.3 使用Ajax.Responders對象 324
9.6.4 使用Ajax對象 325
9.6.5 使用Ajax.Updater類 325
9.6.6 使用Ajax.PeriodicalUpdater類 328
9.7 本章小結 329
10.1 套用的基本分析和設計 331
10.1.1 數據要求 331
10.1.2 數據表結構 331
10.2 Domain Object和持久層 331
10.2.1 Domain Object 332
10.2.2 實現DAO組件 333
10.3 實現Service組件 337
10.4 使用Servlet提供伺服器回響 341
10.4.1 根據前綴查詢品牌 341
10.4.2 根據品牌查詢型號 342
10.4.3 根據型號查詢詳細信息 343
10.5 客戶端HTML頁面實現 344
10.6 增加HTML頁面的事件回響能力 346
10.6.1 實現品牌輸入框的事件處理器 346
10.6.2 實現鍵盤事件的處理器 347
10.6.3 根據品牌提示型號 350
10.6.4 根據型號顯示描述 351
10.6.5 註冊Ajax事件監聽器 352
10.7 本章小結 352
11.1 jQuery入門 354
11.1.1 理解jQuery的設計 354
上面的程式中target對象到底是什麼?它怎么會擁有height、width、css這些方法? 355
11.1.2 下載和安裝jQuery 355
11.1.3 讓jQuery與其他JavaScript庫
共存 356
11.2 獲取jQuery對象 356
11.2.1 JQuery核心函式 356
11.2.2 以css選擇器訪問DOM元素 357
11.2.3 選擇器的附加限定詞 359
11.2.4 表單相關的選擇器 362
11.3 jQuery操作類數組的工具方法 363
11.3.1 過濾相關方法 364
11.3.2 仿DOM導航的相關方法 365
11.3.3 連結方法 367
11.4 jQuery支持的方法 368
11.4.1 jQuery命名空間的方法 368
11.4.2 數據存儲的相關方法 370
11.4.3 操作屬性的相關方法 370
11.4.4 操作CSS屬性的相關方法 371
11.4.5 操作元素內容的相關方法 373
11.4.6 操作DOM節點的相關方法 374
11.5 jQuery事件相關方法 378
11.6 動畫效果相關的方法 380
11.7 Ajax相關方法 383
11.7.1 兩個工具方法 383
11.7.2 使用load方法 384
11.7.3 使用jQuery.ajax(options)方法 385
11.7.4 使用get/post方法 387
11.8 擴展jQuery和jQuery外掛程式 389
11.9 本章小結 390
12.1 實現持久層 392
12.1.1 實現持久化類 392
12.1.2 配置SessionFactory 394
12.2 實現DAO組件 395
12.2.1 DAO接口定義 395
12.2.2 完成DAO組件的實現類 397
12.3 實現業務邏輯層 402
12.3.1 實現業務邏輯組件 402
12.3.2 配置業務邏輯組件 405
12.4 實現客戶端調用 405
12.4.1 訪問業務邏輯組件 406
12.4.2 處理用戶登錄 406
12.4.3 獲得用戶相片列表 408
12.4.4 處理翻頁 409
12.4.5 處理檔案上傳 411
當Servlet重定向到album.html
頁面後,如何彈出如圖12.5所示
對話框? 413
12.4.6 頁面載入時的處理 413
HttpSession里的curImg屬性是從哪裡來的呢? 415
12.5 本章小結 415
本章練習 415
13.1 DWR的下載和安裝 417
13.1.1 什麼是DWR 417
13.1.2 下載和安裝DWR 418
13.2 使用DWR 422
13.2.1 編寫處理類 422
13.2.2 配置DWR 424
13.3 使用DWR的轉換器 425
13.3.1 基本轉換器 425
13.3.2 對象轉換器 426
13.3.3 數組轉換器 428
13.3.4 集合類型轉換器 428
13.4 方法聲明定義 429
13.5 使用DWR的創建器 430
13.5.1 創建器的配置 430
13.5.2 使用new創建器 432
13.5.3 使用none創建器 433
既然none創建器不創建任何對象,哪有對象暴露給JavaScript代碼”? 433
13.5.4 使用script創建器 433
13.6 調用伺服器端的方法 434
13.6.1 調用伺服器端方法的通用配置 434
13.6.2 使用簡單回調 435
13.6.3 使用JSON格式的回調 440
13.6.4 將客戶端參數傳遞到回調函式 442
13.7 使用engine.js 443
13.7.1 設定調用順序 443
13.7.2 設定全局逾時時長 443
13.7.3 設定全局Hook函式 444
13.7.4 設定全局處理函式 444
13.7.5 設定常用的全局選項 444
13.7.6 批處理 445
13.8 使用util.js 445
13.8.1 使用$() 446
13.8.2 處理列表 446
13.8.3 處理表格 450
13.8.4 訪問HTML元素值 454
getValues()可以一次獲取多個HTML元素的值,那返回的值如何保存呢? 455
13.8.5 幾個工具函式 456
13.9 整合第三方Java EE框架 458
13.9.1 訪問Servlet API 458
老師你以前教我們:誰調用方法,誰負責為形參賦值。現在我們調用addSession()方法時沒有為第二個參數賦值,那第二個參數從哪裡獲得參數值呢? 460
13.9.2 整合Spring 461
13.10 使用DWR注釋 463
13.10.1 初始配置 464
如果我有很多類需要列出,那豈不是很臃腫,classes屬性值是否支持通配符?如果想列出內部類應該怎么寫? 464
13.10.2 標註創建器和轉換器 464
13.11 異常處理 465
13.12 反向Ajax 467
13.12.1 配置使用反向Ajax 468
反向Ajax技術不是依賴HTTP協定的嗎?它怎么可以違反請求-回響架構的規律呢? 468
13.12.2 在Java方法中操作Web頁 469
13.12.3 在客戶端調用反向Ajax方法 471
13.13 本章小結 472
14.1 實現Hibernate持久層 474
14.1.1 Hibernate持久層的POJO 474
14.1.2 將POJO映射成持久化對象 476
14.2 實現DAO組件 477
14.2.1 擴展HibernateDaoSupport來實現分頁 478
為什麼不擴展Hibernate Template類來實現分頁?擴展HibernateDaoSup-port是不是會引起一些混亂? 478
14.2.2 實現DAO組件 480
14.3 實現業務邏輯組件 482
14.3.1 業務邏輯組件的接口 483
14.3.2 業務邏輯組件的實現類 484
14.3.3 部署業務邏輯組件 487
14.3.4 基於AOP的許可權控制 488
14.4 調用業務邏輯組件 490
14.4.1 將Spring容器中的Bean創建成JavaScript對象 490
14.4.2 處理用戶登錄 491
既然已經在JavaScript代碼里進行了許可權控制,為何還要在業務邏輯層控制呢? 492
14.4.3 處理用戶註冊 493
14.4.4 處理訊息發布 494
14.4.5 獲取訊息列表 495
14.4.6 處理分頁 496
14.4.7 查看訊息內容 497
14.4.8 頁面載入函式 498
14.5 本章小結 498
本章練習 498
15.1 AjaxTags的下載和安裝 500
15.1.1 什麼是AjaxTags 500
15.1.2 下載和安裝AjaxTags 500
15.2 AjaxTags入門 501
15.2.1 編寫處理類 502
15.2.2 使用標籤 503
15.3 處理類的幾種形式 505
15.3.1 使用普通Servlet生成回響 505
15.3.2 使用AjaxXmlBuilder輔助類 507
15.3.3 使用BaseAjaxServlet生成回響 509
15.3.4 使用非Java回響 510
15.4 使用AjaxTags標籤 511
15.4.1 使用自動完成標籤 511
15.4.2 使用area標籤 515
15.4.3 使用anchors標籤 516
15.4.4 使用callout標籤 517
15.4.5 使用htmlContent標籤 518
15.4.6 使用portlet標籤 520
15.4.7 使用select標籤 522
15.4.8 創建Tab頁 523
15.4.9 使用displayTag標籤 524
15.4.10 使用tree標籤創建樹 526
15.4.11 使用updateField標籤 528
15.5 關於AjaxTags的選擇 530
15.5.1 AjaxTags的優勢和使用場景 530
15.5.2 AjaxTags的缺點 531
15.6 本章小結 531
16.1 實現Hibernate持久層 533
16.1.1 設計Hibernate的持久化類 533
16.1.2 完成映射檔案 535
16.1.3 數據表的結構 537
16.2 實現DAO組件 538
16.2.1 DAO接口定義 538
16.2.2 實現DAO組件 539
16.2.3 配置DAO組件 542
16.3 實現業務邏輯組件 543
16.3.1 業務邏輯組件的接口 543
16.3.2 業務邏輯組件的實現類 544
16.3.3 配置業務邏輯組件 547
16.4 整合DWR框架 548
16.4.1 配置web.xml檔案 548
16.4.2 將Spring容器中的Bean轉化成JavaScript對象 549
16.5 在客戶端調用JavaScript對象 550
16.5.1 獲取Blog文章列表 550
16.5.2 控制Blog文章列表的翻頁 551
16.5.3 頁面載入時的動作 551
16.5.4 查看評論 552
16.5.5 控制回復的翻頁 554
16.5.6 添加回復 554
16.5.7 查看Blog文章內容 556
16.5.8 添加新的Blog文章 556
16.6 本章小結 558
本章練習 558
17.1 總體說明和概要設計 560
17.1.1 系統的總體架構設計 560
17.1.2 資料庫設計 561
17.2 實現Hibernate持久化類 562
17.2.1 設計Domain Object 562
17.2.2 實現Domain Object 563
17.3 DAO層實現 568
17.3.1 DAO的基礎配置 568
17.3.2 實現DAO組件 569
17.3.3 部署DAO組件 574
17.4 業務邏輯層實現 575
17.4.1 設計業務邏輯組件 575
17.4.2 業務邏輯組件的異常處理 576
17.4.3 傳送競價通知郵件 578
17.4.4 實現業務邏輯層組件 578
17.4.5 業務層的許可權控制 587
17.4.6 業務層的任務調度 588
17.4.7 事務管理 589
17.5 暴露業務邏輯方法 590
17.5.1 初始化Spring容器 590
17.5.2 配置DWR的核心Servlet 590
17.5.3 暴露業務邏輯方法 591
17.6 調用業務邏輯方法回響用戶請求 592
17.6.1 頁面載入時的函式 592
17.6.2 處理返回首頁的請求 593
17.6.3 瀏覽所有流拍物品 593
17.6.4 處理用戶登錄 596
17.6.5 管理物品 600
17.6.6 管理物品種類 603
17.6.7 查看競得物品 606
17.6.8 查看自己的競價記錄 608
17.6.9 瀏覽拍賣物品 609
17.6.10 參與競價 611
17.7 本章小結 614
本章練習 614