瘋狂XML講義(第2版)

瘋狂XML講義(第2版)

《瘋狂XML講義(第2版)》是2011年8月出版的圖書,作者是李剛。本書主要以XML為核心,深入地介紹了XML的各種相關知識。

宣傳語

瘋狂源自夢想

技術成就輝煌

內 容 簡 介

本書作為瘋狂Java體系圖書之一,依然保持該體系圖書系統、全面的特點:不僅詳細介紹了XML文檔的各種知識,還通過案例示範了實際開發中如何套用XML知識。

本書主要分為五個部分。第一部分介紹了XML、DTD、XML Schema等基礎知識,這些知識主要教讀者如何定義有效的XML文檔,這部分內容是深入學習後面知識的基礎,也是每個使用XML的開發者都應該掌握的基礎。第二部分介紹了CSS、XSLT和XPath等知識,通過使用CSS或XSLT,可直接將XML文檔當成視圖技術。第三部分介紹了DOM、SAX、JAXP、dom4j、JDOM、XQuery和XQJ等,其中的DOM、SAX、JAXP、dom4j和JDOM都以結構化的方式來創建、解析XML文檔,從而可以將XML文檔作為數據傳輸工具,而XQuery則是一種新規範,通過XQuery可以查詢XML文檔中的數據,就像使用SQL查詢關係資料庫的數據一樣。第四部分介紹了Web Service和CXF,其中CXF是Java領域的主流Web Service框架,簡單易用。第五部分則提供了兩個綜合性案例:基於XML的電子公告系統和電子拍賣系統,讓讀者將前面所學套用到實際項目中,尤其是電子拍賣系統。它是一個包含5個表,表之間具有複雜關聯映射的系統,該案例採用目前最流行、最規範的輕量級Java EE架構,將整個套用分為領域對象層、DAO層和業務邏輯層,然後用CXF將業務邏輯組件包裝成Web Service,從而可以將現有的Java EE項目與其他平台的、其他語言的異構項目進行整合,具有極好的指導價值和借鑑意義。

本書大部分章節後都提供了相應的編程習題,供開發者鞏固所學,將理論融入實際開發之用。本書是瘋狂Java體系叢書之一,學習本書無須任何XML基礎,但DOM、SAX、dom4j、JDOM解析部分包含了大量Java編程,因此建議先認真閱讀瘋狂Java體系的《瘋狂Java講義》一書。

前 言

自從1998年問世以來,XML已經廣泛套用於各種開發平台、各種程式語言中,並衍生出大量新的標記語言:如SVG(Scalable Vector Graphics)、SMIL(Synchronized Multimedia Integration Language)等,這些都充分說明了XML強大的生命力和廣泛的套用前景。

對於大部分Java開發者而言,使用XML最多的地方還是配置檔案,不管是Java Web套用的初學者,還是Struts、Spring等開源框架的學習者,幾乎每天都會接觸到大量的XML文檔。因此大部分開發者都會把XML文檔和配置檔案等同起來,但實際上XML的套用是非常廣泛的。本書系統而深入地介紹了XML以及XML相關方面的內容,並通過實際案例示範了XML在實際開發中的套用,本書將帶領讀者系統而深入地掌握XML的相關知識。

本書大部分章節後都提供了相應的編程習題,供學習者鞏固所學、將理論融入實際開發之用。

本書希望系統、深入地介紹XML以及相關技術,希望讀者能通過本書更全面地掌握、使用XML的相關知識。歸納起來,本書大致有如下3個特點。

1.知識全面、專業性強

本書並不是一本關於XML基礎的圖書,本書系統而深入地介紹了XML相關知識,不僅包括DTD、XML Schema等基礎內容,也包括XSLT、XPath、XQuery、DOM、SAX、JDOM和dom4j等高級內容。除此之外,還介紹了XML在實際企業開發中一個重要的套用方向:Web Service,並介紹了Java領域的Web Service框架CXF的用法。這些知識點覆蓋了XML相關的絕大部分內容,專業性非常強。

2.案例實際、實用性強

本書前面各章講解各小知識點時,不僅介紹了它們的基本語法,還提供了與之對應的小範例,希望讀者能理論結合實際,邊讀邊練,通過編碼來掌握相應的知識。本書除了介紹XML及其相關知識之外,更重點介紹了如何將XML知識融入實際套用開發,例如書中最後兩個案例,都是XML在實際企業開發中極好的範例。

3.深入淺出、易讀性強

本書與瘋狂Java體系的其他圖書一樣,即使在介紹專業性極強的知識時,也儘量使用深入淺出的類比來幫助讀者理解它們,然後配合針對性很強、重點突出的小示例來說明這些知識,降低初學者的學習難度。通過這種案例驅動的講解方式,讓讀者閱讀時更容易理解各知識點的功能;接下來又能迅速將所學知識套用於實際開發。

本書創作感言

動手寫作本書之前,博文視點的朱沭紅老師已經善意地提醒筆者:關於XML的書都很難賣,可能大家都覺得XML太簡單了。想一想也是,幾乎所有學習Java開發的讀者都應該接觸過XML文檔:當你開始學習JSP開發時,你就得寫web.xml配置檔案;當你學習Struts時,你又得寫struts-config.xml配置檔案。幾乎所有Java學習者都接觸過XML文檔,所以大家可能覺得XML如此簡單,怎么可能需要一本書來介紹呢?

很多人可能覺得XML非常簡單,因為他們每天都會接觸XML文檔,但如果再深入問一下:XML除了做配置檔案之外,還能幹什麼?他們往往一無所知。

他們知道XML可以做配置檔案,但可能不知道XML配置檔案的結構是由DTD、Schema控制的——因為我經常看到有人問web.xml檔案能包含哪些元素?如何將JSP檔案配置成一個Servlet?等等諸如此類的問題,如果他知道閱讀web.xml檔案對應的DTD、Schema,那他就不會再存在這些疑問了。

他們可能不知道XML還可以作為一種輕量級的持久化解決方案,就像資料庫一樣,應用程式可以用類似於SQL的XQuery來查詢XML文檔中的信息。他們可能不知道XML可以直接作為表現層來代替傳統的HTML……

後來我覺得,如果確實存在上面這些情況,那我就更應該有這樣一本書:全面而深入地來介紹XML的相關知識,希望可以讓大家掌握XML的全貌。作為配置檔案只是XML的功能之一,而XML的作用遠不止這些。

最後我和朱沭紅老師達成一個共識:出版一本圖書除了考慮經濟上的回報之外,更多地應該考慮一本書對社會價值的作用。就我以一個老程式設計師的眼光來看,XML不管是對於Java平台、還是其他如.NET平台都具有非常重要的作用。就像做B/S開發的程式設計師,你可以選擇Java、PHP或者其他,但你無法迴避JavaScript;XML也是如此,它不僅對於Java平台是有用的,而且對於其他開發平台也是有用的。

由於XML技術有著廣泛的用途,而廣大Java學習者、開發者又對其重視不夠,因而我們覺得出版這樣一本書也許可以讓大家對XML投以更多的目光,那這本書的價值也就體現出來了。

本書寫給誰看

本書是瘋狂Java體系叢書之一,學習本書無須任何XML基礎,但DOM、SAX、dom4j、JDOM解析部分包含了大量Java編程,因此建議先閱讀瘋狂Java體系的《瘋狂Java講義》一書。如果時間允許,建議讀者按照本書所附的學習線路圖,遵循學習規律進行學習。

目 錄

第1章 XML概述 1

1.1 XML的起源 2

1.1.1 標記語言 2

1.1.2 XML的基本概念 3

1.1.3 XML和HTML 3

1.2 XML的優勢 4

1.2.1 簡單易用的標記語言 4

1.2.2 嚴格的格式 5

1.2.3 數據邏輯和顯示邏輯分離 5

1.3 XML和Java EE 6

1.3.1 配置描述 6

指定Web組件的配置信息是不是只能採用web.xml檔案呢? 7

1.3.2 簡化的數據交換 7

1.3.3 Web Service 8

1.4 XML的編輯工具 8

1.4.1 普通文本編輯工具 8

1.4.2 XMLSpy簡介 9

1.4.3 使用XMLSpy編輯

1.4.3 XML文檔 9

1.4.4 Stylus Studio簡介 11

1.4.5 使用Stylus Studio編輯

1.4.5 XML文檔 11

1.5 XML的競爭對手 12

1.5.1 Java的Annotation 12

1.5.2 輕量級的數據交換格式

1.5.2 ——JSON 15

1.6 本章小結 17

第2章 XML文檔規則 18

2.1 XML文檔的分類 19

2.1.1 格式不良好的XML文檔 19

2.1.2 格式良好但無效的

2.1.2 XML文檔 20

2.1.3 有效的XML文檔 22

2.2 XML文檔的整體結構 22

2.2.1 有且僅有一個根元素 22

2.2.2 元素必須合理結束 23

2.2.3 元素之間必須合理嵌套 24

2.2.4 元素的屬性必須有值 24

2.3 XML聲明 26

UTF-8不是兼容Unicode嗎?

那UTF-8也應該支持中文啊,

為什麼上面的XML文檔會

出現字元集錯誤的情況呢? 27

2.4 XML元素的基本規則 28

2.4.1 合法的標籤名 28

2.4.2 嵌套子元素 29

2.4.3 空元素 29

2.5 字元數據 30

2.5.1 使用實體引用 31

2.5.2 使用CDATA標記 32

2.6 注釋 33

2.7 處理指令 33

2.8 W3C對於屬性的使用建議 35

2.9 換行處理 36

2.10 本章小結 36

本章練習 36

第3章 DTD詳解 37

3.1 XML語義約束 38

我一直有一個疑問:XML太“隨意”了,我們想怎樣定義元素都可以,想怎樣嵌套子元素也行,想怎樣定義屬性也行,真的是這樣嗎? 38

3.2 引入DTD 39

3.2.1 內部DTD 39

3.2.2 外部DTD 40

3.2.3 公用DTD 41

3.3 DTD文檔的結構 41

3.3.1 驗證XML文檔的有效性 42

3.4 定義元素 42

3.4.1 定義任意類型的元素 43

3.4.2 定義空元素 44

3.4.3 定義字元串內容的元素 45

3.4.4 定義混合內容 45

3.5 定義子元素 47

3.5.1 有序的子元素 47

3.5.2 互斥的子元素 48

3.5.3 子元素出現的頻率 48

3.5.4 組合子元素 49

3.5.5 無序的子元素 51

上面的DTD中明明定義了<書名…/>、<價格…/>、<作者…/>和<簡要介紹…/>4個元素之間具有互斥關係,它們怎么可以同時出現呢? 52

3.6 定義元素屬性 53

3.6.1 對屬性的約束規則 53

3.6.2 定義屬性類型 55

3.7 定義實體 57

3.7.1 定義實體 57

3.7.2 定義參數實體 59

3.7.3 外部實體 60

3.7.4 外部參數實體 61

3.8 定義符號 61

3.8.1 未解析實體 62

XML文檔里的內容不是應該由XML解析器負責處理嗎?如果XML解析器不負責處理,那這些數據豈不就失去作用了? 62

3.8.2 ENTITY和ENTITIES

3.8.2 類型的屬性 63

3.8.3 NOTATION類型的屬性 63

3.9 使用XMLSpy創建DTD 64

3.10 本章小結 65

本章練習 65

第4章 XML Schema基本語法 66

4.1 DTD和Schema 67

4.1.1 Schema概述及其優勢 67

4.1.2 Schema在Java EE中的套用 68

4.2 XML Schema入門 69

4.2.1 XML Schema根元素 69

4.2.2 在XML中引用無命名

4.2.2 空間的Schema 70

4.2.3 在XML中引用有命名

4.2.3 空間的Schema 71

4.3 Schema中的注釋 72

4.4 理解Schema的數據類型 72

4.5 Schema內置類型 74

4.5.1 字元串及相關類型 76

4.5.2 數值類型 77

4.5.3 日期、時間類型 78

4.5.4 boolean類型 80

4.5.5 anyURI類型 80

4.5.6 二進制數據 81

4.6 使用限制派生新類型 81

4.6.1 指定基類型的兩種方式 82

4.6.2 指定類型的兩種方式 84

4.6.3 範圍約束 86

4.6.4 長度約束 86

4.6.5 精度約束 86

4.6.6 枚舉約束 87

4.6.7 正則表達式約束 88

4.6.8 空白處理 88

4.7 使用<list.../>派生列表類型 91

4.7.1 限制列表類型 92

4.8 使用<union.../>派生聯合類型 94

4.8.1 限制聯合類型 96

4.9 列表和聯合結合使用 97

4.10 阻止派生新的簡單類型 98

4.10.1 使用final屬性 98

4.10.2 為約束指定fixed屬性 99

4.11 合併多個Schema 100

4.11.1 使用include元素 100

4.11.2 使用redefine元素 101

4.11.3 使用import元素 102

4.12 XMLSpy中關於Schema的

4.12 操作 103

4.12.1 創建新的Schema 103

4.12.2 為XML創建Schema 104

4.12.3 為XML分配Schema 104

4.13 本章小結 105

第5章 XML Schema高級知識 106

5.1 使用anyType定義任意類型 107

5.2 定義複雜類型 108

5.2.1 定義複雜類型的方式 109

5.2.2 擴展簡單類型 109

既然派生複雜類型的方式有兩種,那接下來是不是應該介紹“限制簡單類型來派生複雜類型”了? 110

5.2.3 包含屬性的兩種方式 111

5.2.4 擴展包含簡單內容的複雜

5.2.4 類型 112

5.2.5 使用派生類型的另一種方式 114

在上面的Schema中先定義了一個book_ Type類型,然後擴展該類型增加了一個price屬性,為何不在定義book_Type類型時一次性添加isbn、name和price三個屬性,而非要一次一次地添加呢?這樣做有實際意義嗎? 114

5.2.6 限制包含簡單內容的複雜類型 115

5.2.7 限制anyType派生新類型 116

為什麼沒有通過擴展anyType來派生新類型呢? 117

5.2.8 包含子元素的兩種方式 120

5.2.9 空元素類型 123

5.2.10 混合內容類型 124

5.3 複雜類型的進一步派生 125

5.3.1 限制空元素類型 125

5.3.2 擴展空元素類型 126

5.3.3 限制包含子元素的類型 127

5.3.4 擴展包含子元素的類型 128

5.3.5 限制混合內容類型 131

5.3.6 擴展混合內容類型 133

5.4 阻止派生新的類型 133

5.5 通配符 135

5.5.1 元素通配符 135

5.5.2 屬性通配符 137

5.6 元素替換 138

5.6.1 阻止自己被替換 139

5.6.2 阻止指定派生類型的替換 141

5.7 抽象元素和抽象類型 143

5.7.1 抽象元素 143

5.7.2 抽象類型 144

5.8 一致性約束 145

5.8.1 key約束 147

5.8.2 unique約束 149

5.8.3 keyref約束 150

5.9 元素組與屬性組 152

5.10 定義符號 153

5.11 本章小結 154

本章練習 155

如何確定一個XML元素所在的命名空間呢? 157

第6章 命名空間詳解 156

6.1 使用命名空間 157

6.2 Schema的命名空間支持 159

6.2.1 在Schema中使用命名空間 159

6.2.2 命名空間對XML文檔的作用 162

6.2.3 為屬性使用命名空間限定 166

6.2.4 命名空間對一致性約束的影響 168

6.2.5 局部元素和局部屬性的強制限定 170

6.3 命名空間和DTD 174

6.4 本章小結 176

第7章 使用CSS顯示XML檔案 177

7.1 樣式單簡介 178

7.1.1 顯示XML的兩種常用樣式單 178

7.1.2 樣式單的優勢 178

7.2 CSS的基本用法 179

7.2.1 CSS基本語法 179

7.2.2 引入外部樣式檔案 180

7.2.3 使用內部CSS樣式 181

7.2.4 使用內聯樣式 183

7.3 對XML文檔有效的CSS

7.3 選擇器 184

7.4 使用CSS顯示XML 186

7.5 本章小結 187

第8章 使用XSLT顯示XML 188

8.1 XSL概述 189

8.2 XSLT入門 189

8.2.1 XSLT轉換入門 189

XSLT為什麼不直接將XML根元素當成根元素呢? 192

8.2.2 使用template元素定義模板 192

8.2.3 使用apply-templates處理子節點 193

8.2.4 使用value-of輸出節點內容 196

8.2.5 匹配節點的模式 198

8.2.6 mode屬性 200

8.3 XSLT轉換分類 202

8.3.1 客戶端轉換和伺服器端轉換 202

8.3.2 Xalan處理器 202

8.3.3 Saxon處理器 205

我發現用Saxon進行實時轉換和用Xalan進行實時轉換的JSP頁面代碼完全相同,這是為什麼呢? 207

8.4 XSLT的內置模板規則 208

8.5 流程控制元素 209

8.5.1 分支處理 209

8.5.2 循環控制 211

8.5.3 排序控制 213

8.6 控制空白的處理方式 215

8.7 創建結果樹 215

8.7.1 創建元素和屬性 216

8.7.2 創建文本 221

8.7.3 創建處理指令 222

8.7.4 創建注釋 222

8.7.5 複製 223

8.7.6 輸出格式化數值 225

8.8 變數和參數 230

8.8.1 為變數和參數指定值 231

8.8.2 全局和局部的變數和參數 232

8.8.3 改變參數值 234

8.9 使用命名模板 235

8.10 包含和導入 238

8.10.1 使用import導入 238

8.10.2 使用include包含 239

8.10.3 解決模板定義衝突 241

8.11 XSLT 1.1的fallback支持 241

8.12 指定輸出格式 242

8.12.1 轉換XML文檔的相關格式 242

8.12.2 轉換HTML文檔的相關格式 244

8.13 XSLT的內置函式 245

8.13.1 使用system-property函式 245

8.13.2 使用current函式返回當前節點集 246

8.13.3 使用element-available和

8.13.3 function-available 函式 246

8.13.4 使用unparsed-entity-uri函式 247

8.13.5 使用document 函式處理多個源

8.13.5 XML文檔 248

8.13.6 使用format-number 函式 250

8.13.7 使用key函式 251

8.13.8 使用generate-id函式 254

8.14 XSLT 2.0的常用新功能 255

8.14.1 分組 255

8.14.2 多文檔輸出 257

8.14.3 字元映射 259

8.14.4 <xsl:value-of>元素的改進 260

8.14.5 數據類型綁定 260

8.14.6 正則表達式支持 261

8.14.7 用戶自定義函式 263

8.15 使用XMLSpy管理XSLT

8.15 操作 264

8.16 本章小結 265

本章練習 265

第9章 XPath語言詳解 266

9.1 XPath語言簡介 267

9.1.1 XPath節點 267

9.1.2 XPath基本概念 268

9.1.3 節點關係 268

9.2 絕對路徑和相對路徑 269

9.2.1 XPath基路徑 269

9.3 XPath基礎語法 270

9.3.1 軸(axis) 271

9.3.2 節點測試(node-test) 271

9.3.3 限定謂語(predicate) 272

9.3.4 簡化寫法 272

9.4 運算符和表達式 273

9.4.1 算術運算符 273

9.4.2 比較運算符 274

9.4.3 邏輯運算符 274

9.4.4 組合多個路徑的運算符 275

9.5 XPath 2.0新增的表達式 275

9.5.1 for表達式 275

9.5.2 if表達式 278

9.5.3 some/every判斷表達式 279

9.6 XPath 2.0的類型支持 280

9.7 內置函式館 281

9.7.1 字元串相關函式 281

9.7.2 數值相關函式 283

9.7.3 日期和時間相關函式 284

9.7.4 boolean值相關函式 287

9.7.5 節點相關函式 287

9.7.6 序列相關函式 288

9.8 本章小結 290

第10章 DOM、SAX和JAXP解析 291

10.1 DOM、SAX和JAXP概述 292

接口的實現不是類嗎,怎么接口的實現還是接口啊? 294

10.2 JAXP的DOM支持 297

10.2.1 XML文檔和DOM模型 297

10.2.2 DOM樹中的對象類型 298

10.2.3 DOM解析器 299

10.2.4 使用DTD驗證XML文檔 300

10.2.5 使用DOM解析XML文檔 302

10.2.6 使用DOM創建XML文檔 304

10.2.7 使用DOM修改XML文檔 307

10.2.8 解析DTD信息 308

如果我想獲取DTD中的元素定義、屬性定義等信息該怎么辦? 311

10.2.9 DOM和命名空間 310

10.3 JAXP的SAX支持 312

10.3.1 SAX的處理機制 312

10.3.2 SAX解析器和監聽器 313

為何XMLReader在調用時不需要傳入SAX解析事件的監聽器呢?SAX解析不是總是基於事件機制的嗎? 314

XMLReader和SAXParser到底什麼關係?我們到底應該用哪個呢? 316

10.3.3 使用DTD驗證XML的有效性 316

10.3.4 使用SAX解析XML文檔 317

10.3.5 SAX和命名空間 320

10.4 DOM和SAX的比較 323

10.5 使用XML Schema驗證XML

10.5 文檔 324

10.5.1 SchemaFactory和驗證 324

上面的SchemaFactory的newInstance()方法中怎么還有一個schemaLanguage參數,它代表什麼呢? 326

10.5.2 獲取節點的類型信息 328

10.6 瀏覽器對DOM的支持 330

10.7 本章小結 334

本章練習 334

第11章 使用dom4j處理XML文檔 335

11.1 dom4j簡介 336

11.1.1 dom4j的封裝和優勢 336

11.1.2 下載和安裝dom4j 337

11.2 dom4j常用API 338

11.3 使用dom4j訪問XML文檔 339

11.3.1 驗證XML文檔 339

11.3.2 使用dom4j解析XML文檔 340

11.3.3 使用訪問者模式遍歷XML文檔 342

11.4 使用dom4j創建XML文檔 344

11.5 修改XML文檔 345

11.6 使用dom4j獲取命名空間信息 346

11.7 本章小結 349

本章練習 349

第12章 使用JDOM處理XML文檔 350

12.1 JDOM簡介 351

12.1.1 JDOM常用API 351

12.1.2 下載和安裝JDOM 352

12.2 使用JDOM訪問XML文檔的

12.3 實例 352

12.2.1 驗證XML文檔的有效性 353

12.2.2 使用JDOM解析XML文檔 354

12.3 使用JDOM創建XML文檔 356

12.4 修改XML文檔 357

12.5 使用JDOM獲取命名空間信息 358

12.6 選擇dom4j還是JDOM 361

12.7 本章小結 361

本章練習 361

第13章 XQuery詳解 362

13.1 XQuery簡介 363

13.1.1 XQuery和XPath的關係 363

13.1.2 XQuery和XSLT的關係 363

13.2 使用XQuery 364

13.2.1 使用XMLSpy查看XQuery結果 365

13.2.2 使用Saxon執行XQuery查詢 366

13.3 基本表達式

13.3 (Primary Expressions) 367

13.3.1 直接量(Literal) 367

13.3.2 變數引用 367

13.3.3 圓括弧表達式 367

13.3.4 上下文項表達式 367

13.3.5 函式調用 367

13.4 序列表達式 368

13.4.1 構造序列 368

13.4.2 過濾表達式 368

13.4.3 組合節點序列 369

13.5 算術表達式 370

13.6 比較表達式 370

13.6.1 值比較 371

13.6.2 通用比較 371

13.6.3 節點比較 371

13.7 邏輯表達式 372

13.8 構造器 373

13.8.1 直接構造 373

13.8.2 計算構造 373

13.9 FLWOR表達式 373

13.9.1 for、let和return子句 374

13.9.2 where子句 375

13.9.3 order by子句 376

13.10 if表達式 376

13.11 some/every判斷表達式 377

13.12 與序列類型有關的表達式 378

13.12.1 instance of 378

13.12.2 typeswitch 378

13.12.3 cast 378

13.12.4 castable 379

13.13 模組和序言 379

13.13.1 序言 380

13.13.2 版本聲明 380

13.13.3 模組聲明 380

13.13.4 設定器(setter) 381

13.13.5 導入設定 382

13.13.6 命名空間聲明 384

13.13.7 默認命名空間聲明 384

13.13.8 變數聲明 385

13.13.9 函式聲明 386

13.13.10 選項聲明 387

13.14 使用XQJ執行XQuery 388

13.14.1 XQJ和JDBC的類比性 388

JDBC API和接口我都知道,但JDBC實現好像很少聽說啊? 389

13.14.2 XQJ的編程步驟 389

13.15 本章小結 392

第14章 Web Service詳解 393

14.1 XML和Web Service 394

14.1.1 Web Service概述 394

14.1.2 Web Service平台概述 395

14.1.3 Web Service的廣泛套用 396

14.2 SOA和雲計算 398

14.2.1 SOA和Web Service 398

14.2.2 雲計算和Web Service 399

14.3 XML和Web Service 400

14.3.1 SOAP基本語法 400

14.3.2 Header元素 401

14.3.3 Body元素 403

14.3.4 Fault元素 403

14.4 XML和WSDL 404

14.4.1 WSDL基本語法 405

14.4.2 portType元素 409

14.4.3 binding元素 410

14.4.4 service元素 412

14.4.5 WSDL和UDDI 412

14.5 使用CXF開發Web Service 413

14.5.1 CXF概述 413

14.5.2 下載和安裝CXF 414

14.5.3 使用CXF開發Web Service 415

是否必須將Web Service服務接口的.class檔案複製到客戶端呢? 419

14.5.4 動態客戶端 419

14.5.5 複雜類型的處理 421

14.5.6 使用攔截器 425

14.5.7 使用攔截器進行許可權控制 427

14.6 整合與Spring開發Web Service 431

14.6.1 在Spring中使用CXF 431

14.6.2 通過Spring啟用CXF攔截器 434

14.6.3 在Spring容器中配置Web Service

14.6.3 客戶端 436

14.7 本章小結 437

第15章 基於XML的電子公告系統 438

15.1 系統設計 439

15.1.1 系統組件的互動關係 439

15.2 設計XML文檔 439

15.2.1 保存狀態的XML文檔 440

15.2.2 定義XML Schema 442

15.3 定義XSLT樣式單 444

15.3.1 為公告列表定義樣式單 444

15.3.2 為用戶評論設計樣式單 446

15.4 實現控制器 449

15.4.1 添加公告 449

15.4.2 查看評論列表 452

為什麼不直接將XML文檔保存在Web套用根路徑下呢?這樣不是就可以讓瀏覽者直接訪問這些XML文檔了么? 453

15.4.3 添加評論 453

15.5 本章小結 455

本章練習 455

第16章 Web Service案例

第16章 ——電子拍賣系統 456

16.1 系統功能簡介和架構設計 457

16.1.1 系統功能簡介 457

16.1.2 系統架構設計 458

16.2 持久層設計 458

16.2.1 系統實體 459

16.2.2 系統E-R圖和數據表 459

16.2.3 實現Hibernate PO 461

16.2.4 管理SessionFactory 469

16.3 實現系統DAO層 470

16.3.1 DAO的基礎配置 472

16.3.2 實現系統DAO組件 472

16.3.3 配置系統DAO組件 478

16.4 實現業務邏輯層 479

16.4.1 定義業務邏輯組件接口 479

16.4.2 依賴注入DAO組件 481

16.4.3 業務邏輯組件中的異常處理 482

16.4.4 處理用戶競價 484

16.4.5 判斷拍賣物品狀態 486

16.4.6 事務管理 488

16.4.7 配置業務層組件 489

16.5 使用CXF提供Web Service 491

16.5.1 啟用CXF支持 492

16.5.2 實現Web Service 493

16.5.3 測試Web Service 498

16.6 本章小結 499

本章練習 500

相關詞條

熱門詞條

聯絡我們