內容簡介
本書是由struts開發小組的核心成員編寫的一本關於struts開發的經典書籍。它一步步地由淺人深,將struts分解成相對獨立的部分進行了講解。本書除了介紹struts以外,同時還介紹了一些與struts相關的組件,合理地使用這些組件可以幫助程式設計師開發出更加健壯、更加專業、更加容易維護的應用程式。對於剛剛接觸struts的新手而言,本書無異於是學習和掌握struts的聖經。對於在struts方面有不少經驗的程式設計師而言,本書也提供了struts底層內容,幫助讀者更好地編寫基於struts的應用程式。
struts解決了許多web應用程式開發中的常見問題。基於struts應用程式框架構造的應用程式,除了可以復用業已證明可用的解決方案外,同時也可以使得開發人員更加關注應用程式的特性。struts是由apache軟體基金會支持的開源軟體。
本書完整介紹了struts框架結構,涵蓋了設計、數據校驗、資料庫訪問、動態頁面生成、本地化、struts配置以及其他一些重要的方面。書中還介紹了如何同時使用jsp標籤和velocity模板,並仔細介紹了struts體系結構以及struts控制流,同時也說明了如何擴展struts框架結構。
書中還明確指出了struts 1.0和1.1版本間的區別,同時還通過實例說明了struts 1.0應用程式向struts 1.1應用程式轉換的技術。本書還介紹了很多已得到證明的設計技術、模式和策略,而這些內容在其他書中是很難找到的。
目錄
第一部分 struts起步
第1章 概述1
1?1 本書的目的1
1?1?1 struts的開發人員1
1?1?2 為什麼說struts是開源軟體2
1?1?3 為什麼被稱為struts2
1?2 應用程式框架的概念2
1?3 必備知識3
1?3?1 http3
1?3?2 通用網關接口4
1?3?3 java servlet5
1?3?4 jsp6
1?3?5 jsp標籤7
1?3?6 javabean8
1?3?7 model 29
1?4 struts概述9
1?4?1 構造一個簡單的應用程式11
1?4?2 準備工作11
1?4?3 如何完成整個練習12
1?4?4 回顧17
.1?5 總結20
第2章 研究struts體系結構21
2?1 言眾人所言21
2?2 為什麼使用struts21
2?2?1 歷史的回顧21
2?2?2 struts介紹22
2?2?3 struts控制層22
2?2?4 使用struts開發web應用程式26
2?3 為什麼需要框架結構26
2?3?1 web——麻煩的源頭26
2?3?2 servlet解決方案27
2?3?3 servlet框架結構28
2?3?4 黑盒和白盒系列29
2?4 struts、model 2和mvc29
2?4?1 mvc的演變29
2?4?2 model 2的產生30
2?4?3 應用程式層——獨立的視圖層31
2?4?4 struts如何實現model 2、mvc和分層32
2?5 struts控制流33
2?5?1 流程概述33
2?5?2 更微小的細節35
2?5?3 struts的性能37
2?6 struts的強項和弱點38
2?6?1 struts的缺點38
2?6?2 struts的優點40
2?7 總結41
第3章 構造一個簡單的應用程式42
3?1 從基礎了解struts42
3?2 簡述登錄應用程式的流程43
3?2?1 起步43
3?2?2 將會使用的頁面43
3?2?3 歡迎頁面44
3?2?4 登錄頁面44
3?2?5 再次進入歡迎頁面45
3?2?6 退出歡迎頁面45
3?2?7 特性摘要45
3?3 解剖登錄應用程式46
3?3?1 瀏覽器中歡迎頁面的代碼46
3?3?2 歡迎頁面的jsp原始碼47
3?3?3 歡迎頁面的配置信息49
3?3?4 瀏覽器中登錄頁面的代碼50
3?3?5 登錄頁面對應的配置部分52
3?3?6 logonsubmit的原始碼52
3?3?7 logonform的原始碼53
3?3?8 logonaction的原始碼55
3?3?9 logoffaction的原始碼60
3?4 構造一個應用程式62
3?4?1 定義需求62
3?4?2 計畫應用程式63
3?4?3 計畫原始碼樹結構65
3?4?4 安裝自己的開發工具65
3?4?5 建立build?xml檔案66
3?4?6 建立web?xml檔案66
3?4?7 建立struts?config?xml檔案67
3?4?8 測試部署68
3?4?9 構造我們的歡迎頁面69
3?4?10構造登錄頁面70
3?4?11構造常量類71
3?4?12構造其他的類72
3?4?13創建用戶目錄72
3?4?14配置actionerrors73
3?4?15編譯和測試登錄頁面73
3?4?16修改歡迎頁面74
3?4?17struts的action:forward?action75
3?5 總結76
第4章 配置struts組件77
4?1 三個xml檔案和一個屬性檔案77
4?2 web應用程式部署描述檔案78
4?2?1 web?xml檔案78
4?2?2 actionservlet的參數80
4?3 struts配置81
4?3?1 細節82
4?3?2 管理修改83
4?3?3 原則:隱藏變化83
4?4 struts配置元素84
4?4?1〈global?exceptions〉85
4?4?2〈form?beans〉86
4?4?3〈global?forwards〉87
4?4?4〈action?mappings〉88
4?4?5〈controller〉89
4?4?6〈message?resources〉90
4?4?7〈plug?in〉90
4?4?8〈data?sources〉91
4?4?9 編寫自己的子類92
4?4?10struts配置檔案的一個框架92
4?5 應用程式的資源檔案94
4?6 ant檔案95
4?7 配置struts的核心97
4?7?1 安裝java和servlet容器97
4?7?2 安裝一個開發環境98
4?7?3 安裝struts的核心檔案98
4?8 配置tiles框架結構98
4?9 配置struts validator99
4?10使用struts空白應用程式100
4?11配置模組化的應用程式102
4?11?1 分而治之102
4?11?2 前綴化頁面104
4?11?3 更新配置檔案104
4?12 共享struts的jar檔案104
4?13 總結105
第二部 分提出自己的框架結構
第5章 處理actionform107
5?1 輸入垃圾,輸出珠寶107
5?2 多面手actionform110
5?2?1 使用actionform來填充自己的域110
5?2?2 使用actionform作為數據快取111
5?2?3 使用actionform作為數據校驗器112
5?2?4 使用actionform作為類型轉換器112
5?2?5 使用actionform作為數據傳遞對象112
5?2?6使用actionform作為防火牆113
5?3 actionform的設計結果114
5?3?1 actionform可能和業務邏輯層對象共享名字114
5?3?2 actionform可能減少定製的代碼量114
5?3?3 actionform可以封裝輔助函式115
5?3?4 actionform可以內含其他bean115
5?4 actionform的其他類型116
5?4?1 map?backed actionform116
5?4?2 dynaactionform117
5?5 哪些情況下不使用actionform118
5?5?1 為什麼actionform不是一個map對象118
5?5?2 為什麼actionform不是一個簡單的javabean118
5?5?3 為什麼actionform不是一個接口119
5?6 使用actionform119
5?6?1 實現業務層邏輯120
5?6?2 內含可改變的數據對象121
5?6?3 設定不可改變數據對象122
5?6?4 設定可改變的數據對象123
5?6?5 使用工廠方法123
5?6?6 傳遞一個map對象124
5?6?7 通過反射傳遞數據126
5?6?8 使用接口類130
5?7 baseform131
5?7?1 sessionlocale131
5?7?2 dispatch132
5?7?3 自動填充132
5?7?4 basemapform132
5?8 總結133
第6章 使用actionforward對象134
6?1 actionforward的功能134
6?2 actionforward如何工作135
6?3 本地轉發和全局轉發136
6?4 運行時刻參數137
6?4?1 在頁面中增加參數137
6?4?2 在action類中添加參數138
6?5 動態轉發138
6?6 導航條內容不變的原因138
6?7 編寫自己的actionforward139
6?8 總結140
第7章 actionmapping的設計141
7?1 了解actionmapping141
7?1?1 actionmapping bean142
7?1?2 actionmapping目錄142
7?2 actionmapping屬性143
7?2?1 path屬性143
7?2?2 forward屬性144
7?2?3 include屬性144
7?2?4 type屬性144
7?2?5 classname屬性144
7?2?6 name屬性145
7?2?7 roles屬性145
7?2?8 scope屬性145
7?2?9 validate屬性145
7?2?10input屬性145
7?2?11parameter屬性146
7?2?12attribute屬性147
7?2?13prefix和suffix屬性147
7?2?14unknown屬性147
7?3 內部組件148
7?3?1 本地轉發148
7?3?2 本地異常148
7?4 編寫自己的actionmapping148
7?5 總結149
第8章 使用action對象150
8?1 準備,設定,行動150
8?2 使用action對象150
8?2?1 action是什麼151
8?2?2 何時調用action152
8?2?3 action可以做什麼153
8?2?4 action到底是什麼157
8?3 標準的action158
8?3?1 標準的橋接action159
8?3?2 標準的基本action161
8?4 級聯action165
8?5 scaffold action167
8?5?1 僅僅和轉發相關的action167
8?5?2 輔助action172
8?6 基本的view action174
8?7 輔助action類使用的技術175
8?7?1 可選擇的轉發176
8?7?2 先調用177
8?7?3 捕獲級聯的異常177
8?7?4 靈活的錯誤信息轉發179
8?7?5 提示成功訊息180
8?7?6 可變換的視圖180
8?7?7 使用反射技術來調用方法181
8?7?8 使用反射來調用類181
8?8 使用靈活轉發182
8?9 總結186
第9章 擴展actionservlet187
9?1 actionservlet的地位187
9?2 requestprocessor189
9?2?1 process方法190
9?2?2 processroles190
9?3 exceptionhandler192
9?4 外掛程式193
9?5 總結193
第三部 分構造自己的頁面
第10章 顯示動態內容195
10?1 標籤——就是你195
10?1?1 jsp標籤庫——有什麼優點195
10?1?2 struts和jstl198
10?1?3 struts標籤庫和mvc199
10?2 使用擴展標籤庫200
10?2?1 擴展標籤是如何工作的200
10?2?2 如何安裝擴展標籤202
10?2?3 擴展標籤庫不是什麼203
10?3 struts標籤庫204
10?3?1 struts標籤庫的常用功能205
10?3?2 bean標籤206
10?3?3 html標籤208
10?3?4 logic標籤210
10?4 使用struts標籤213
10?4?1 struts的標籤213
10?4?2 基礎213
10?4?3 技術220
10?4?4 可用的控制項231
10?5 不同的視圖232
10?5?1 struts和jsp232
10?5?2 servlet上下文232
10?5?3 除了jsp以外233
10?6 總結233
第11章 使用tiles開發套用235
11?1 管理布局235
11?1?1 用動態模板進行分層235
11?1?2 運用模板的結果236
11?1?3 使用模板236
11?1?4 集成模板、tiles和struts237
11?2 創建一個layout模板238
11?2?1 tile是什麼240
11?2?2 部署tiles模板241
11?2?3 添加樣式表242
11?2?4 模板和mvc243
11?3 tiles definition243
11?3?1 聲明definition243
11?3?2 jsp聲明244
11?3?3 配置檔案聲明247
11?3?4 把definition作為actionforward249
11?4 tile 屬性250
11?4?1 useattribute250
11?4?2 importattribute251
11?4?3 put251
11?4?4 putlist和add253
11?5 把一個應用程式轉化為tiles253
11?5?1 設定tiles框架253
11?5?2 測試默認配置254
11?5?3 瀏覽頁面254
11?5?4 使用〈tiles:insert〉重構頁面256
11?5?5 把〈tiles:insert〉標籤析取到definition中262
11?5?6 模式化基礎layout265
11?5?7 把definition精練為基礎類和擴展類266
11?5?8 形成例程267
11?5?9 對移植的管理267
11?6 總結268
第12章 驗證用戶輸入270
12?1 只有看見時我才知道270
12?1?1 我們不能拒絕的輸入270
12?1?2 web層的校驗271
12?1?3 使用校驗器的結果272
12?2 struts validator簡述273
12?3 基本校驗器280
12?3?1 required校驗器281
12?3?2 mask校驗器281
12?3?3 range校驗器282
12?3?4 maxlength校驗器283
12?3?5 minlength校驗器283
12?3?6 byte、short、integer、long、float和double校驗器283
12?3?7 date校驗器283
12?3?8 creditcard校驗器284
12?3?9 email校驗器284
12?4 資源包284
12?4?1 默認的資源包285
12?4?2 默認校驗器訊息285
12?4?3 定製化的校驗器訊息286
12?5 配置檔案286
12?6 校驗器的jsp標籤287
12?7 validatorform和validatoractionform290
12?8 本地化的校驗器291
12?9 可插入的校驗器291
12?10技術292
12?10?1 多頁面校驗293
12?10?2 取消按鈕293
12?10?3 定製化的訊息293
12?10?4 相關聯域294
12?10?5 聯合使用校驗器和validate方法295
12?11移植應用程式到struts validator296
12?11?1 安裝配置validator框架結構296
12?11?2 測試默認的配置297
12?11?3 回顧你的校驗方法297
12?11?4 擴展validatorform或者scaffold baseform298
12?11?5 選擇一個校驗器來進行移植工作298
12?11?6 添加formset、form和field元素299
12?11?7 在applicationresources中添加新的選項300
12?11?8 調用struts校驗器301
12?11?9 測試和重複301
12?11?10刪除actionform子類302
12?12總結303
第13章 內容本地化305
13?1 用另外一個名字305
13?1?1 為什麼進行本地化306
13?1?2 java的國際化功能306
13?2 struts的國際化組件310
13?2?1 session中的locale屬性310
13?2?2 messageresources311
13?2?3 默認的資源包311
13?2?4 actionerrors313
13?2?5 actionmessages313
13?2?6 區域敏感的jsp標籤314
13?3 本地化struts應用程式318
13?3?1 允許本地化318
13?3?2 使用框架結構locale對象319
13?3?3 將標籤和訊息存放在屬性檔案中320
13?3?4 創建語言相關的屬性檔案320
13?3?5 在可以本地化模組中指定恰當的鍵值321
13?3?6 其他模組使用〈bean:message〉321
13?4 本地化其他模組321
13?4?1 本地化struts validator321
13?4?2 本地化tiles322
13?4?3 本地化集合322
13?5 總結323
第14章 使用數據服務功能325
14?1 起步325
14?1?1 從層次的角度看jdbc325
14?1?2 介紹數據服務326
14?2 研究業務層327
14?2?1 struts——使用自己的模式327
14?2?2 定義業務對象327
14?2?3 設計業務對象328
14?2?4 設計結果329
14?2?5 混合業務方法和action(不推薦)329
14?2?6 一個簡單的例子330
14?3 在struts中使用processbeans和jdbc330
14?3?1 介紹processbean331
14?3?2 作為數據傳遞對象的processbean332
14?3?3 填充processbean333
14?3?4 執行processbean333
14?3?5 訪問數據服務334
14?3?6 使用典型的流程335
14?3?7 對業務行為進行編碼336
14?3?8 使用processbean作為持久層338
14?3?9 使用其他的持久層338
14?4 使用result對象339
14?5 使用輔助action340
14?6 使用lucene341
14?7 使用內容摘要345
14?7?1 digester和rss346
14?7?2 獲取和生成數據346
14?7?3 rss摘要347
14?8 在struts中使用ejb349
14?8?1 session facade350
14?8?2 數據傳遞對象350
14?8?3 實現模式350
14?9 總結351
第四部 分以實例介紹struts
第15章 artimus:實例研究353
15?1 框架的框架353
15?2 scaffold——工具的產生354
15?3 關於artimus354
15?4 部署描述檔案(web?xml)356
15?4?1 配置artimus357
15?4?2 應用程式的屬性357
15?4?3 連線適配器358
15?4?4 啟動屬性358
15?4?5 其他配置設定358
15?4?6 安全設定358
15?4?7 受保護的url359
15?4?8 授權用戶359
15?4?9 鑑證策略359
15?5 artimusservlet359
15?5?1 子類361
15?5?2 串標誌符361
15?5?3 擴展點361
15?6 應用程式與sql屬性檔案362
15?7 index?jsp363
15?8 全局轉發363
15?9 /find/recent365
15?9?1 擴展bean368
15?9?2 super?execute368
15?9?3 getarticles368
15?9?4 access?findbylast與resultlist368
15?9?5 processresult369
15?9?6 processaction370
15?10 tiles?xml與article?jsp371
15?10?1 useattribute373
15?10?2 basestyle373
15?10?3 標題373
15?10?4 tiles373
15?11 result?jsp375
15?11?1 圖例376
15?11?2 isresult376
15?11?3 result377
15?12 article actions380
15?13 view?jsp382
15?13?1 headline383
15?13?2 content383
15?13?3 contributor384
15?14 form?jsp385
15?14?1 article content386
15?14?2 contributed/contributor387
15?14?3 article id387
15?14?4 validation387
15?15 /do/menu389
15?15?1 logon390
15?15?2 選單391
15?15?3 我們的控制項392
15?15?4 saveresult方法392
15?15?5 我們的結果集392
15?16 menu?jsp393
15?16?1 /find/hours394
15?16?2 /menu/find395
15?16?3 /find/last396
15?16?4 /menu/contributor396
15?16?5 /menu/manager397
15?17 總結397
第16章 redux:遷移到struts 1?1398
16?1 下一步:struts 1?1398
16?1?1 struts 1?1特徵集399
16?1?2 我們可使用的特徵401
16?2 改變基礎402
16?2?1 struts 1?1中的tiles402
16?2?2 struts 1?1中的validator405
16?2?3 struts 1?1中的reloadaction406
16?2?4 對web?xml和struts?config?xml的其他變更406
16?2?5 message?jsp(版本1?1)406
16?2?6 form?jsp(版本1?1)407
16?2?7 menucreate(版本1?1)409
16?2?8 繼續前進409
16?3 可自由選擇的修改410
16?3?1 dynaactionform格式410
16?3?2 基於action的安全機制411
16?3?3 修改action路徑413
16?3?4 struts 1?1中的應用程式資源414
16?4 總結414
第17章 velocity:替換jsp416
17?1 轉移到velocity模板416
17?2 變化導致了應用程式框架結構的出現416
17?3 為什麼需要velocity416
17?3?1 velocity輕便、快捷而且通用417
17?3?2 velocity可以很好地與其他軟體協作417
17?3?3 velocity簡單但是功能強大417
17?4 在web應用程式中使用velocity418
17?4?1 將velocity與servlet資源一起使用418
17?4?2 聯合使用velocity和上下文屬性419
17?4?3 velocity如何與struts協同工作420
17?4?4 velocitystruts工具包420
17?4?5 struts view工具421
17?5 我們的登錄模板421
17?6 建立velocityviewservlet424
17?6?1 安裝velocityviewservlet424
17?6?2 部署velocity servlet424
17?6?3 工具箱配置檔案425
17?7 設定struts?config426
17?8 總結427
附錄
附錄a 設計模式429
附錄b struts配置檔案的api435
附錄c 標籤庫快速參考446
術語表450
參考文獻456