1 Struts的來龍去脈 7
1.1 木匠的寓言 7
1.2 Struts是什么? 8
1.2.1 框架 8
1.2.2 Web應用 9
1.2.3 Struts框架中的組件 10
1.3 Struts的狀況:發(fā)展現狀 12
1.3.1 Struts版本 12
1.3.2 其他可以和Struts一同使用的應用 12
1.4 代碼背后的面孔:Struts的開發(fā) 13
1.4.1 核心開發(fā)者 13
1.5 Struts將走向何處 14
1.5.1 集成JSTL 14
1.5.2 集成JavaServer Faces 14
1.5.3 Struts將會被更廣泛地接受 14
1.6 結論 15
2 Model-View-Controller設計模式:'Model 2' JSP開發(fā) 17
2.1 Model-View-Controller設計模式 18
2.2 Model 1與Model 2的起源 20
2.2.1 JSP規(guī)范0.92版 20
2.2.2 JavaWorld, 1999 21
2.2.3 時至Craig McClanahan, Jakarta Tomcat, 以及Struts 21
2.3 Struts如何實現Model 2模式 21
2.3.1 用于Web應用的MVC架構 22
2.3.2 Model組件 23
2.3.3 View組件 24
2.3.4 Controller組件 25
2.4 結論 25
3 Hello World! 第一個Struts應用 27
3.1 Hello World! 應用的需求 28
3.2 應用Model-View-Controller模式 28
3.3 View組件:HTML表單以及表單Bean 29
3.4 MessageResources和Application.properties文件 33
3.5 Struts表單Bean:HelloForm.java 33
3.6 數據驗證以及ActionError 36
3.7 Controller組件:HelloAction.java 38
3.7.1 Action類是如何工作的 40
3.7.2 在MessageResources中訪問特定Locale的文本 41
3.7.3 業(yè)務邏輯級驗證 42
3.7.4 與Model組件交互 42
3.7.5 向View組件傳遞數據 43
3.7.6 跳轉到合適的View組件 44
3.8 Model組件(HelloModel.java) 44
3.9 通過使用屬性向View傳遞數據:Constants.java 46
3.10 將所有部分整合到一起:struts-config.xml文件 47
3.11 結論 49
4 HTTP協議: Web應用的通信與控制 51
4.1 HTTP協議以及請求/響應循環(huán) 52
4.2 控制信息:HTTP頭和HTTP響應碼 55
4.2.1 HTTP響應碼 55
4.2.2 HTTP請求和響應頭 57
4.3 HTTP Cookies和會話/用戶管理 60
4.4 結論 63
5 JSP, 標記庫和JSTL: 使用Java擴充頁面 65
5.1 Servlets和JSP 65
5.1.1 JSP的威力 67
5.2 JSP中的對象作用范圍 70
5.2.1 除會話范圍之外的其它對象范圍 71
5.2.2 從JSP中存取范圍對象 72
5.3 使用Bean來隱藏業(yè)務邏輯 73
5.4 JSP自定義標記庫 78
5.5 Web應用部署 81
5.5.1 WAR文件 83
5.6 JSTL:標準標記庫 84
5.6.1 通用目的操作 85
5.6.2 條件操作 85
5.6.3 迭代操作 85
5.6.4 URL相關的操作 85
5.6.5 國際化操作 85
5.6.6 格式化操作 85
5.6.7 SQL操作 86
5.6.8 XML操作 86
5.6.9 表達式語言 86
5.7 JSP與J2EE:一幅宏圖 86
5.8 J2EE與Struts 88
5.9 結論 88
6 簡單的應用: 財務投資管理 89
6.1 需求:從頭到腳覆蓋需求 89
6.2 從線框(Wireframes)開始 90
6.2.1 主頁面 90
6.2.2 創(chuàng)建賬號頁面 91
6.2.3 交易條目(Transaction Entry) 91
6.3 開發(fā)用況(Use Cases) 94
6.3.1 用況:初始頁面 95
6.3.2 用況:賬號創(chuàng)建頁面 95
6.3.3 用況:已登錄用戶的主頁面 96
6.3.4 用況:添加交易頁面 96
6.4 數據源與存儲 98
6.5 選擇技術 99
6.5.1 Torque 99
6.6 結論 105
7 View組件: 最終用戶之所見 107
7.1 ActionForm 107
7.2 JSP文件:Alpha與Omega 116
7.3 自動類型轉換的危險 123
7.4 html:errors標記 127
7.5 國際化 127
7.6 結論 130
8 Controller: 導引Action 131
8.1 Action類 131
8.2 訪問會話和其它表單Bean 136
8.3 用戶驗證和Struts 150
8.4 在應用內部和外部轉移控制 152
8.5 結論 153
9 Model組件: 業(yè)務建模 155
9.1 設計良好的Model 156
9.2 更多增強獨立性的技術 159
9.3 結論 165
10 struts-config.xml文件: 整合所有部件 167
10.1 struts-config的DTD 167
10.1.1 數據源 168
10.1.2 表單Bean 171
10.1.3 全局異常(Global Exceptions) 172
10.1.4 全局轉發(fā)(Global Forwards) 174
10.1.5 Action映射 175
10.1.6 Controller 177
10.1.7 消息資源 178
10.1.8 Plug-in 179
10.1.9 動態(tài)地訪問和改變配置 180
10.2 config文件的前生后世 180
10.3 結論 181
11 Struts標記庫是如何工作的: 內部探察 183
11.1 回顧JSP標記庫 184
11.2 理解Struts標記如何工作:<bean:page>標記 184
11.2.1 <bean:page>標記的Java代碼 185
11.2.2 Struts Bean 標記庫描述文件(struts-bean.tld) 190
11.2.3 使用<bean:page>標記:整合所有部件 191
11.3 與Java標準標記庫相比較 192
11.4 結論 194
12 Struts HTML標記: 頁面構造和表單處理 195
12.1 Struts標記、JSP自定義標記以及Java Scriptlets:什么是正確的平衡 196
12.2 使用Struts HTML標記渲染HTML基本元素 197
12.2.1 <html:html>標記 202
12.2.2 <html:base>標記 202
12.2.3 <html:link>和<html:rewrite>標記 203
12.2.4 <html:img>標記 207
12.3 基本的表單處理 208
12.3.1 表單的基本知識:<html:form>標記 212
12.3.2 <html:text>標記 213
12.3.3 <html:cancel>標記 213
12.3.4 <html:reset>標記 215
12.3.5 <html:submit>標記 216
12.3.6 <html:hidden>標記 216
12.4 復選框和單選框 217
12.4.1 <html:checkbox>標記 223
12.4.2 <html:multibox>標記 224
12.4.3 <html:radio>標記 225
12.5 下拉和選取/選項列表 225
12.5.1 <html:select>標記 231
12.5.2 <html:option>標記 232
12.5.3 <html:options>標記 233
12.5.4 <html:optionsCollection>標記 235
12.6 輸入驗證與<html:errors> 236
12.6.1 <html:errors>標記 240
12.6.2 錯誤處理是如何工作的 241
12.6.3 為錯誤文本指定資源包,并對文本進行本地化 242
12.6.4 指定全局的錯誤消息,相對于字段相關 243
12.6.5 使用參數定制錯誤消息 243
12.7 使用<html:file>上傳文件 244
12.7.1 <html:file>標記 249
12.7.2 在JSP文件中使用<html:file> 249
12.7.3 在表單中指定私有的FormFile屬性 250
12.7.4 在Action類中處理文件上傳 250
12.8 結論 251
13 Struts Bean標記: 保存與傳輸數據 253
13.1 使用Struts Bean標記來訪問Servlet上下文的有關內容 253
13.1.1 <bean:cookie>標記 257
13.1.2 <bean:header>標記 257
13.1.3 <bean:parameter>標記 257
13.1.4 <bean:page>標記 258
13.2 使用Struts Bean標記來訪問Java資源 258
13.2.1 <bean:message>標記 261
13.2.2 <bean:resource>標記 262
13.2.3 <bean:struts>標記 263
13.2.4 <bean:include>標記 263
13.3 使用Struts Bean標記來訪問Bean屬性 263
13.3.1 <bean:define>標記 266
13.3.2 <bean:size>標記 267
13.3.3 <bean:write>標記 267
13.4 結論 268
14 Struts邏輯標記: 條件性表達邏輯 269
14.1 使用Struts邏輯標記進行基于值的條件顯示 270
14.1.1 <logic:equal>和<logic:notEqual>標記 282
14.1.2 <logic:lessThan>和<logic:greaterThan>標記 282
14.1.3 <logic:lessEqual>和<logic:greaterEqual>標記 283
14.2 使用Struts邏輯標記進行子串匹配 283
14.2.1 <logic:match>與<logic:noMatch>標記 285
14.3 使用Struts邏輯標記來迭代 285
14.3.1 <logic:iterate>標記 287
14.4 使用Struts邏輯標記來檢測值是否存在 288
14.4.1 <logic:empty>和<logic:notEmpty>標記 291
14.4.2 <logic:present>和<logic:notPresent>標記 292
14.4.3 <logic:messagesPresent>和<logic:messagesNotPresent>標記 292
14.5 使用Struts邏輯標記來轉移控制 292
14.5.1 <logic:forward>標記 292
14.5.2 <logic:redirect>標記 293
14.6 結論 293
15 Struts嵌套與模板標記庫: 子屬性處理與內容插入處理 295
15.1 使用Struts嵌套標記 296
15.2 使用Struts模板標記 304
15.3 結論 309
16 Struts Tiles標記庫: 創(chuàng)建主文檔模板 311
16.1 Tiles總覽 311
16.2 啟用Tiles 312
16.3 定義之配置文件(Definitions Configuration File) 312
16.4 為Tiles編寫JSP文件 313
16.5 修改Action 316
16.6 把所有部分整合到一起 317
16.7 Tiles的其它方面 317
16.8 結論 318
17 DynaForm和驗證器 319
17.1 DynaForm:不使用Java的表單 319
17.2 DynaBean和Struts 320
17.2.1 <form-property>標記 326
17.3 驗證器:自動字段檢驗 328
17.3.1 為NewUserAddress添加Validator 332
17.3.2 最新的validator相關新聞 335
17.3.3 定義新的驗證 336
17.4 結論 340
18 結合EJB使用Struts 341
18.1 EJB適配Model組件 341
18.2 EJB技術的快速回顧 342
18.2.1 EJB存活在EJB容器中 342
18.2.2 EJB剖析 343
18.3 結合Struts使用不同的EJB類型 344
18.3.1 Entity Bean 344
18.3.2 無狀態(tài)會話Bean(Stateless Session Bean) 345
18.3.3 有狀態(tài)會話Bean(Stateful Session Bean) 346
18.3.4 消息驅動Bean(Message-Driven Bean) 346
18.3.5 結合EJB使用Struts的規(guī)則總結 347
18.3.6 Struts和EJB的未來方向 347
18.4 Struts/EJB應用示例 348
18.4.1 應用示例:更新用戶信息 348
18.4.2 配置和建立應用 349
18.4.3 檢視示例應用的源文件 358
18.5 結論 374
19 結合Web服務使用Struts 375
19.1 Web適配Struts的Model組件 376
19.2 快速回顧Web服務技術 377
19.2.1 Web服務通信如何工作 377
19.2.2 比較EJB和Web服務方法 378
19.2.3 剖析Web服務 379
19.3 如何結合Web服務使用Struts 380
19.4 Struts/Web服務的應用示例 381
19.4.1 應用:更新客戶信息 381
19.4.2 安裝示例應用文件 382
19.4.3 在構建環(huán)境中配置Axis 388
19.5 結論 415
20 構建、部署和測試Struts應用 417
20.1 集成和漸增式的構建/測試循環(huán):It’s Extreme! 417
20.2 使用Jakarta Ant來構建和部署Struts應用 418
20.2.1 推薦的開發(fā)目錄結構 419
20.2.2 被部署的應用(以及.war文件)所需的目錄結構 420
20.3 編寫build.xml文件來使用Ant構建Struts應用 421
20.4 使用集成和即時測試的Struts極限開發(fā) 429
20.4.1 測試方法和工具的概述 429
20.4.2 JUnit:驅動即時測試(Ongoing Testing)的引擎 430
20.4.3 Cactus:一個容器內測試框架 430
20.4.4 StrutsTestCase:用于測試Struts應用的JUnit擴展 431
20.5 使用JUnit、StrutsTestCase和Ant進行模擬對象測試 431
20.5.1 配置你的系統以運行模擬對象測試 433
20.5.2 運行模擬測試用例并查看結果 436
20.5.3 在模擬測試用例中測試附加的Struts功能 437
20.5.4 運行模擬測試用例并查看結果 439
20.6 使用Cactus、JUnit、StrutsTestCase和Ant進行容器內測試 440
20.6.1 修改測試用例,以使用Cactus進行容器內測試 441
20.6.2 修改你的系統配置來使用Cactus進行容器內測試 442
20.6.3 運行容器內測試并查看結果 446
20.7 結論 447
附錄A 從CD中安裝Struts和示例應用 449
A.1 附帶CD-ROM中包含的軟件列表 449
A.2 第1步:安裝JDK和Tomcat 450
A.3 第2步:安裝MySQL 450
A.4 將WAR文件拷貝到Tomcat的webapps目錄中 451
A.5 重新啟動Tomcat 452
索引 453