輕量級Java EE企業套用實戰(第3版)

輕量級Java EE企業套用實戰(第3版)

《輕量級JavaEE企業套用實戰(第3版)》是電子工業出版社出版的圖書,作者是李剛。

基本介紹

  • 書名:輕量級Java EE企業套用實戰(第3版)
  • 作者:李剛
  • ISBN:9787121128141 
  • 出版社電子工業出版社
基本信息,內容簡介,目錄,前言,

基本信息

上架時間:2011-3-7
出版日期:2011 年2月
開本:16開
頁碼:1
版次:3-1

內容簡介

《輕量級java ee企業套用實戰(第3版)—struts 2+spring 3+hibernate整合開發》是《輕量級java ee企業套用實戰》的第3版,第3版保持了第2版內容全面、深入的特點,主要完成全部知識的升級。
《輕量級java ee企業套用實戰(第3版)—struts 2+spring 3+hibernate整合開發》介紹了java ee領域的三個開源框架:struts 2、spring和hibernate。其中struts 2升級到2.2.1,spring升級到3.0.5,hibernate升級到了3.6.0。本書還全面介紹了servlet 3.0的新特性,以及tomcat 7.0的配置和用法,本書的示例應該在tomcat 7.0上運行。
《輕量級java ee企業套用實戰(第3版)—struts 2+spring 3+hibernate整合開發》重點介紹如何整合struts 2.2+spring 3.0+hibernate 3.6進行java ee開發,主要包括三部分。第一部分介紹java ee開發的基礎知識,以及如何搭建開發環境。第二部分詳細講解struts 2.2、spring 3.0和hibernate 3.6三個框架的用法,介紹三個框架時,從eclipse ide的使用來上手,一步步帶領讀者深入三個框架的核心。這部分內容是筆者講授“瘋狂java實訓”的培訓講義,因此是本書的重點部分,既包含了筆者多年開發經歷的領悟,也融入了豐富的授課經驗。第三部分示範開發了一個包含7個表、表之間具有複雜的關聯映射、繼承映射等關係,且業務也相對複雜的工作流案例,希望讓讀者理論聯繫實際,將三個框架真正運用到實際開發中去,該案例採用目前最流行、最規範的java ee架構,整個套用分為領域對象層、dao層、業務邏輯層、mvc層和視圖層,各層之間分層清晰,層與層之間以松耦合的方法組織在一起。該案例既提供了ide無關的、基於ant管理的項目源碼,也提供了基於eclipse ide的項目源碼,最大限度地滿足讀者的需求。閱讀本書之前,建議先認真閱讀筆者所著的《瘋狂java講義》一書。本書適合於有較好的java編程基礎,或有初步jsp、servlet基礎的讀者。尤其適合於對struts 2、spring、hibernate了解不夠深入,或對struts 2+spring+hibernate整合開發不太熟悉的開發人員閱讀。

目錄

《輕量級java ee企業套用實戰(第3版)—struts 2+spring 3+hibernate整合開發》
第1章 java ee套用和開發環境 1
1.1 java ee套用概述 2
1.1.1 java ee套用的分層模型 2
1.1.2 java ee套用的組件 3
1.1.3 java ee套用的結構和優勢 4
1.1.4 常用的java ee伺服器 4
1.2 輕量級java ee套用相關技術 5
1.2.1 jsp、servlet 3.0和javabean及替代技術 5
1.2.2 struts 2.2及替代技術 5
1.2.3 hibernate 3.6及替代技術 6
1.2.4 spring 3.0及替代技術 6
1.3 tomcat的下載和安裝 7
1.3.1 安裝tomcat伺服器 8
1.3.2 配置tomcat的服務連線埠 9
1.3.3 進入控制台 10
1.3.4 部署web套用 12
1.3.5 配置tomcat的數據源 13
1.4 eclipse的安裝和使用 15
1.4.1 eclipse的下載和安裝 15
.1.4.2 線上安裝eclipse外掛程式 15
1.4.3 從本地壓縮檔安裝外掛程式 17
1.4.4 手動安裝eclipse外掛程式 17
1.4.5 使用eclipse開發java ee套用 18
1.4.6 導入eclipse項目 21
1.4.7 導入非eclipse項目 22
1.5 ant的安裝和使用 23
1.5.1 ant的下載和安裝 23
1.5.2 使用ant工具 24
1.5.3 定義生成檔案 25
1.5.4 ant的任務(task) 29
1.6 使用cvs進行協作開發 31
1.6.1 安裝cvs伺服器 32
1.6.2 配置cvs資源庫 34
1.6.3 安裝cvs客戶端 35
1.6.4 發布項目到伺服器 35
1.6.5 從伺服器下載項目 37
1.6.6 同步(update)本地檔案 38
1.6.7 提交(commit)修改 39
1.6.8 添加檔案和目錄 39
1.6.9 刪除檔案和目錄 40
1.6.10 查看檔案的版本變革 41
1.6.11 提取檔案以前版本的內容 42
1.6.12 從以前版本重新開始 42
1.6.13 創建標籤 43
1.6.14 創建分支 43
1.6.15 沿著分支開發 44
1.6.16 使用eclipse作為cvs客戶端 44
1.7 本章小結 46
第2章 jsp/servlet及相關技術詳解 47
2.1 web套用和web.xml檔案 48
2.1.1 構建web套用 48
2.1.2 配置描述符web.xml 49
2.2 jsp的基本原理 50
2.3 jsp注釋 54
2.4 jsp聲明 54
2.5 輸出jsp表達式 56
2.6 jsp腳本 56
2.7 jsp的3個編譯指令 59
2.7.1 page指令 59
2.7.2 include指令 63
2.8 jsp的7個動作指令 63
2.8.1 forward指令 64
2.8.2 include指令 66
2.8.3 usebean、setproperty、getproperty指令 67
2.8.4 plugin指令 70
2.8.5 param指令 70
2.9 jsp腳本中的9個內置對象 70
2.9.1 application對象 72
2.9.2 config對象 77
2.9.3 exception對象 79
2.9.4 out對象 81
2.9.5 pagecontext對象 82
2.9.6 request對象 84
2.9.7 response對象 91
2.9.8 session對象 95
2.10 servlet介紹 97
2.10.1 servlet的開發 97
2.10.2 servlet的配置 99
2.10.3 jsp/servlet的生命周期 101
2.10.4 load-on-startup servlet 101
2.10.5 訪問servlet的配置參數 102
2.10.6 使用servlet作為控制器 104
2.11 jsp 2的自定義標籤 108
2.11.1 開發自定義標籤類 109
2.11.2 建立tld檔案 109
2.11.3 使用標籤庫 110
2.11.4 帶屬性的標籤 111
2.11.5 帶標籤體的標籤 115
2.11.6 以頁面片段作為屬性的標籤 117
2.11.7 動態屬性的標籤 118
2.12 filter介紹 120
2.12.1 創建filter類 120
2.12.2 配置filter 121
2.12.3 使用url rewrite實現網站偽靜態 125
2.13 listener介紹 126
2.13.1 實現listener類 127
2.13.2 配置listener 128
2.13.3 使用servletcontextattribute-listener 129
2.13.4 使用servletrequestlistener和servletrequestattributelistener 130
2.13.5 使用httpsessionlistener和httpsessionattributelistener 131
2.14 jsp 2特性 136
2.14.1 配置jsp屬性 136
2.14.2 表達式語言 138
2.14.3 tag file支持 146
2.15 servlet 3.0新特性 148
2.15.1 servlet 3.0的annotation 148
2.15.2 servlet 3.0的web模組支持 149
2.15.3 servlet 3.0提供的異步處理 151
2.15.4 改進的servlet api 154
2.16 本章小結 156
第3章 struts 2的基本用法 157
3.1 mvc思想概述 158
3.1.1 傳統model 1和model 2 158
3.1.2 mvc思想及其優勢 159
3.2 struts 2的下載和安裝 160
3.2.1 為web套用增加struts 2支持 160
3.2.2 在eclipse中使用struts 2 161
3.2.3 增加登錄處理 162
3.3 struts 2的流程 165
3.3.1 struts 2套用的開發步驟 165
3.3.2 struts 2的流程 166
3.4 struts 2的常規配置 167
3.4.1 常量配置 167
3.4.2 包含其他配置檔案 173
3.5 實現action 174
3.5.1 action接口和actionsupport基類 175
3.5.2 action訪問servlet api 177
3.5.3 action直接訪問servlet api 179
3.5.4 使用servletactioncontext訪問servlet api 181
3.6 配置action 182
3.6.1 包和命名空間 182
3.6.2 action的基本配置 185
3.6.3 使用action的動態方法調用 186
3.6.4 指定method屬性及使用通配符 188
3.6.5 配置默認action 194
3.6.6 配置action的默認處理類 194
3.7 配置處理結果 195
3.7.1 理解處理結果 195
3.7.2 配置結果 195
3.7.3 struts 2支持的結果類型 197
3.7.4 plaintext結果類型 198
3.7.5 redirect結果類型 200
3.7.6 redirectaction結果類型 201
3.7.7 動態結果 202
3.7.8 action屬性值決定物理視圖資源 202
3.7.9 全局結果 204
3.7.10 使用preresultlistener 205
3.8 配置struts 2的異常處理 206
3.8.1 struts 2的異常處理機制 207
3.8.2 聲明式異常捕捉 208
3.8.3 輸出異常信息 210
3.9 convention外掛程式與“約定”支持 211
3.9.1 action的搜尋和映射約定 211
3.9.2 按約定映射result 214
3.9.3 action鏈的約定 216
3.9.4 自動重載入映射 218
3.9.5 convention外掛程式的相關常量 218
3.9.6 convention外掛程式相關annotation 219
3.10 使用struts 2的國際化 219
3.10.1 struts 2中載入全局資源檔案 219
3.10.2 訪問國際化訊息 220
3.10.3 輸出帶占位符的國際化訊息 222
3.10.4 載入資源檔案的方式 224
3.10.5 載入資源檔案的順序 228
3.11 使用struts 2的標籤庫 228
3.11.1 struts 2標籤庫概述 228
3.11.2 使用struts 2標籤 229
3.11.3 struts 2的ognl表達式語言 230
3.11.4 ognl中的集合操作 232
3.11.5 訪問靜態成員 233
3.11.6 lambda()表達式 234
3.11.7 控制標籤 234
3.11.8 數據標籤 244
3.11.9 主題和模板 254
3.11.10 自定義主題 256
3.11.11 表單標籤 257
3.11.12 非表單標籤 270
3.12 本章小結 273
第4章 深入使用struts 2 274
4.1 詳解struts 2的類型轉換 275
4.1.1 struts 2內建的類型轉換器 276
4.1.2 基於ognl的類型轉換 276
4.2.3 指定集合元素的類型 279
4.1.4 自定義類型轉換器 280
4.1.5 註冊類型轉換器 283
4.1.6 基於struts 2的自定義類型轉換器 284
4.1.7 處理set集合 285
4.1.8 類型轉換中的錯誤處理 288
4.2 使用struts 2的輸入校驗 293
4.2.1 編寫校驗規則檔案 294
4.2.2 國際化提示信息 296
4.2.3 使用客戶端校驗 298
4.2.4 欄位校驗器配置風格 300
4.2.5 非欄位校驗器配置風格 301
4.2.6 短路校驗器 302
4.2.7 校驗檔案的搜尋規則 304
4.2.8 校驗順序和短路 305
4.2.9 內建校驗器 306
4.2.10 基於annotation的輸入校驗 316
4.2.11 手動完成輸入校驗 318
4.3 使用struts 2控制檔案上傳 322
4.3.1 struts 2的檔案上傳 322
4.3.2 實現檔案上傳的action 322
4.3.3 配置檔案上傳的action 325
4.3.4 手動實現檔案過濾 326
4.3.5 攔截器實現檔案過濾 328
4.3.6 輸出錯誤提示 329
4.3.7 檔案上傳的常量配置 330
4.4 使用struts 2控制檔案下載 330
4.4.1 實現檔案下載的action 330
4.4.2 配置action 332
4.4.3 下載前的授權控制 332
4.5 詳解struts 2的攔截器機制 334
4.5.1 攔截器在struts 2中的作用 334
4.5.2 struts 2內建的攔截器 334
4.5.3 配置攔截器 336
4.5.4 使用攔截器 338
4.5.5 配置默認攔截器 338
4.5.6 實現攔截器類 340
4.5.7 使用攔截器 342
4.5.8 攔截方法的攔截器 343
4.5.9 攔截器的執行順序 345
4.5.10 攔截結果的監聽器 347
4.5.11 覆蓋攔截器棧里特定攔截器的參數 348
4.5.12 使用攔截器完成許可權控制 349
4.6 使用struts 2的ajax支持 351
4.6.1 使用stream類型的result實現ajax 352
4.6.2 json的基本知識 354
4.6.3 實現action邏輯 356
4.6.4 json外掛程式與json類型的result 357
4.6.5 實現jsp頁面 359
4.7 本章小結 361
第5章 hibernate的基本用法 362
5.1 orm和hibernate 363
5.1.1 對象/關係資料庫映射(orm) 363
5.1.2 基本映射方式 364
5.1.3 流行的orm框架簡介 365
5.1.4 hibernate概述 366
5.2 hibernate入門 366
5.2.1 hibernate下載和安裝 366
5.2.2 hibernate的資料庫操作 367
5.2.3 在eclipse中使用hibernate 371
5.3 hibernate的體系結構 376
5.4 深入hibernate的配置檔案 377
5.4.1 創建configuration對象 377
5.4.2 hibernate.properties檔案與hibernate.cfg.xml檔案 380
5.4.3 jdbc連線屬性 380
5.4.4 資料庫方言 381
5.4.5 jndi數據源的連線屬性 382
5.4.6 hibernate事務屬性 382
5.4.7 二級快取相關屬性 383
5.4.8 外連線抓取屬性 383
5.4.9 其他常用的配置屬性 383
5.5 深入理解持久化對象 384
5.5.1 持久化類的要求 384
5.5.2 持久化對象的狀態 385
5.5.3 改變持久化對象狀態的方法 386
5.6 深入hibernate的映射檔案 389
5.6.1 映射檔案結構 389
5.6.2 映射主鍵 392
5.6.3 映射普通屬性 393
5.6.4 映射集合屬性 398
5.6.5 集合屬性的性能分析 407
5.6.6 有序集合映射 409
5.6.7 映射資料庫對象 411
5.7 映射組件屬性 414
5.7.1 組件屬性為集合 416
5.7.2 集合屬性的元素為組件 418
5.7.3 組件作為map的索引 420
5.7.4 組件作為複合主鍵 422
5.7.5 多列作為聯合主鍵 425
5.8 使用jpa annotation標註實體 426
5.8.1 增加jpa annotation支持 426
5.8.2 annotation?還是xml映射檔案 429
5.9 本章小結 429
第6章 深入使用hibernate 430
6.1 hibernate的關聯映射 431
6.1.1 單向n-1關聯 431
6.1.2 單向1-1關聯 436
6.1.3 單向1-n關聯 439
6.1.4 單向n-n關聯 443
6.1.5 雙向1-n關聯 443
6.1.6 雙向n-n關聯 448
6.1.7 雙向1-1關聯 450
6.1.8 組件屬性包含的關聯實體 453
6.1.9 基於複合主鍵的關聯關係 456
6.1.10 複合主鍵的成員屬性為關聯實體 458
6.1.11 持久化的傳播性 461
6.2 繼承映射 462
6.2.1 採用subclass元素的繼承映射 466
6.2.2 採用joined-subclass元素的繼承映射 467
6.2.3 採用union-subclass元素的繼承映射 470
6.3 hibernate的批量處理 472
6.3.1 批量插入 473
6.3.2 批量更新 474
6.3.3 dml風格的批量更新/刪除 474
6.4 使用hql查詢 476
6.4.1 hql查詢 476
6.4.2 hql查詢的from子句 478
6.4.3 關聯和連線 478
6.4.4 hql查詢的select子句 481
6.4.5 hql查詢的聚集函式 482
6.4.6 多態查詢 483
6.4.7 hql查詢的where子句 483
6.4.8 表達式 484
6.4.9 order by子句 486
6.4.10 group by子句 486
6.4.11 子查詢 487
6.4.12 命名查詢 488
6.5 條件查詢 488
6.5.1 關聯和動態關聯 491
6.5.2 投影、聚合和分組 492
6.5.3 離線查詢和子查詢 495
6.6 sql查詢 496
6.6.1 標量查詢 496
6.6.2 實體查詢 498
6.6.3 處理關聯和繼承 500
6.6.4 命名sql查詢 501
6.6.5 調用存儲過程 502
6.6.6 使用定製sql 503
6.7 數據過濾 505
6.8 事務控制 508
6.8.1 事務的概念 508
6.8.2 session與事務 509
6.8.3 上下文相關的session 511
6.9 二級快取和查詢快取 511
6.9.1 開啟二級快取 512
6.9.2 管理快取和統計快取 515
6.9.3 使用查詢快取 516
6.10 事件機制 518
6.10.1 攔截器 519
6.10.2 事件系統 521
6.11 本章小結 525
第7章 spring的基本用法 526
7.1 spring簡介和spring 3.0的變化 527
7.1.1 spring簡介 527
7.1.2 spring 3.0的變化 528
7.2 spring的下載和安裝 528
7.2.1 在java se套用中使用spring 528
7.2.2 在web套用中使用spring 529
7.2.3 在eclipse中開發spring套用 530
7.3 spring的核心機制:依賴注入 533
7.3.1 理解依賴注入 533
7.3.2 設值注入 534
7.3.3 構造注入 538
7.3.4 兩種注入方式的對比 539
7.4 使用spring容器 539
7.4.1 spring容器 540
7.4.2 使用applicationcontext 541
7.4.3 applicationcontext的國際化支持 542
7.4.4 applicationcontext的事件機制 544
7.4.5 讓bean獲取spring容器 546
7.5 spring容器中的bean 548
7.5.1 bean的基本定義 548
7.5.2 容器中bean的作用域 551
7.5.3 配置依賴 553
7.5.4 設定普通屬性值 555
7.5.5 配置合作者bean 557
7.5.6 使用自動裝配注入合作者bean 557
7.5.7 注入嵌套bean 560
7.5.8 注入集合值 561
7.5.9 組合屬性名稱 565
7.5.10 spring的bean和javabean 566
7.6 spring 3.0提供的java配置管理 567
7.7 bean實例的創建方式及依賴配置 570
7.7.1 使用構造器創建bean實例 570
7.7.2 使用靜態工廠方法創建bean 572
7.7.3 調用實例工廠方法創建bean 575
7.8 深入理解容器中的bean 577
7.8.1 使用抽象bean 577
7.8.2 使用子bean 578
7.8.3 bean繼承與java繼承的區別 579
7.8.4 容器中的工廠bean 580
7.8.5 獲得bean本身的id 582
7.8.6 強制初始化bean 583
7.9 容器中bean的生命周期 583
7.9.1 依賴關係注入之後的行為 584
7.9.2 bean銷毀之前的行為 585
7.9.3 協調作用域不同步的bean 588
7.10 深入理解依賴關係配置 591
7.10.1 注入其他bean的屬性值 592
7.10.2 注入其他bean的field值 594
7.10.3 注入其他bean的方法返回值 595
7.11 基於xml schema的簡化配置方式 598
7.11.1 使用p名稱空間配置屬性 599
7.11.2 使用util schema 600
7.12 spring 3.0提供的表達式語言(spel) 602
7.12.1 使用expression接口進行表達式求值 603
7.12.2 bean定義中的表達式語言支持 604
7.12.3 spel語法詳述 606
7.13 本章小結 611
第8章 深入使用spring 612
8.1 兩種後處理器 613
8.1.1 bean後處理器 613
8.1.2 bean後處理器的用處 617
8.1.3 容器後處理器 617
8.1.4 屬性占位符配置器 619
8.1.5 重寫占位符配置器 620
8.2 spring的“零配置”支持 621
8.2.1 搜尋bean類 621
8.2.2 指定bean的作用域 624
8.2.3 使用@resource配置依賴 625
8.2.4 使用@postconstruct和@predestroy定製生命周期行為 626
8.2.5 spring 3.0新增的annotation 626
8.2.6 自動裝配和精確裝配 627
8.3 資源訪問 629
8.3.1 resource實現類 630
8.3.2 resourceloader接口和resourceloaderaware接口 635
8.3.3 使用resource作為屬性 638
8.3.4 在applicationcontext中使用資源 639
8.4 spring的aop 643
8.4.1 為什麼需要aop 643
8.4.2 使用aspectj實現aop 644
8.4.3 aop的基本概念 649
8.4.4 spring的aop支持 650
8.4.5 基於annotation的“零配置”方式 651
8.4.6 基於xml配置檔案的管理方式 666
8.5 spring的事務 672
8.5.1 spring支持的事務策略 673
8.5.2 使用transactionproxyfactorybean創建事務代理 678
8.5.3 spring 2.x的事務配置策略 681
8.5.4 使用@transactional 685
8.6 spring整合struts 2 686
8.6.1 啟動spring容器 686
8.6.2 mvc框架與spring整合的思考 688
8.6.3 讓spring管理控制器 689
8.6.4 使用自動裝配 692
8.7 spring整合hibernate 695
8.7.1 spring提供的dao支持 695
8.7.2 管理hibernate的sessionfactory 696
8.7.3 使用hibernatetemplate 697
8.7.4 使用hibernatecallback 701
8.7.5 實現dao組件 703
8.7.6 使用ioc容器組裝各種組件 705
8.7.7 使用聲明式事務 707
8.8 spring整合jpa 708
8.8.1 管理entitymanager 709
8.8.2 使用jpatemplate 711
8.8.3 使用jpacallback 713
8.8.4 藉助jpadaosupport實現dao組件 714
8.8.5 使用聲明式事務 714
8.9 本章小結 715
第9章 企業套用開發的思考和策略 716
9.1 企業套用開發面臨的挑戰 717
9.1.1 可擴展性、可伸縮性 717
9.1.2 快捷、可控的開發 718
9.1.3 穩定性、高效性 719
9.1.4 花費最小化,利益最大化 719
9.2 如何面對挑戰 719
9.2.1 使用建模工具 719
9.2.2 利用優秀的框架 720
9.2.3 選擇性地擴展 722
9.2.4 使用代碼生成器 722
9.3 常見設計模式精講 722
9.3.1 單例模式 723
9.3.2 簡單工廠 724
9.3.3 工廠方法和抽象工廠 730
9.3.4 代理模式 733
9.3.5 命令模式 739
9.3.6 策略模式 741
9.3.7 門面模式 743
9.3.8 橋接模式 746
9.3.9 觀察者模式 750
9.4 常見的架構設計策略 753
9.4.1 貧血模型 753
9.4.2 領域對象模型 756
9.4.3 合併業務邏輯對象與dao對象 758
9.4.4 合併業務邏輯對象和domain object 759
9.4.5 拋棄業務邏輯層 761
9.5 本章小結 762
第10章 簡單工作流系統 763
10.1 項目背景及系統結構 764
10.1.1 套用背景 764
10.1.2 系統功能介紹 764
10.1.3 相關技術介紹 765
10.1.4 系統結構 766
10.1.5 系統的功能模組 766
10.2 hibernate持久層 767
10.2.1 設計持久化實體 767
10.2.2 創建持久化實體類 768
10.2.3 映射持久化實體 772
10.3 實現dao層 777
10.3.1 dao組件的定義 778
10.3.2 實現dao組件 783
10.3.3 部署dao層 787
10.4 實現service層 789
10.4.1 業務邏輯組件的設計 789
10.4.2 實現業務邏輯組件 789
10.4.3 事務管理 795
10.4.4 部署業務邏輯組件 795
10.5 實現任務的自動調度 797
10.5.1 使用quartz 797
10.5.2 在spring中使用quartz 802
10.6 實現系統web層 804
10.6.1 struts 2和spring的整合 804
10.6.2 控制器的處理順序 805
10.6.3 員工登錄 806
10.6.4 進入打卡 808
10.6.5 處理打卡 810
10.6.6 進入申請 811
10.6.7 提交申請 812
10.6.8 使用攔截器完成許可權管理 814
10.7 本章小結 816

前言

經過多年沉澱,Java EE平台已經成為電信、金融、電子商務、保險、證券等各行業的大型套用系統的首選開發平台。目前Java行業的軟體開發已經基本穩定,這兩三年內基本沒有出現什麼具有廣泛影響
力的新技術。Java EE開發大致可分為兩種方式:以Spring為核心輕量級Java EE企業開發平台;以EJB 3+JPA為核心的經典Java EE開發平台。無論使用哪種平台進行開發,套用的性能、穩定性都有很好的保證,開發人群也有很穩定的保證。
《輕量級Java EE企業套用實戰(第3版)—Struts 2+Spring 3+Hibernate整合開發》介紹的開發平台,就是以Struts 2.2+Spring 3.0+Hibernate 3.6(實際項目中可能以JPA來代替Hibernate )為核心的輕量級Java EE,這種組合在保留經典Java EE套用架構、高度可擴展性、高度可維護性的基礎上,降低了Java EE套用的開發、部署成本,對於大部分中小型企業套用是首選。在一些需要具有高度伸縮性、高度穩定性的企業套用(比如銀行系統、保險系統)里,以EJB 3+JPA為核心的經典Java EE套用則具有廣泛的占有率。本書的姊妹篇《經典Java EE企業套用實戰》主要介紹了後一種Java EE開發平台。
《輕量級Java EE企業套用實戰(第3版)—Struts 2+Spring 3+Hibernate整合開發》主要升級了《輕量級Java EE企業套用實戰》的知識,採用最新的Tomcat 7作為Web伺服器,全面而細緻地介紹了Servlet 3.0的新特性,並將Struts升級到Struts 2.2.1,Spring升級到3.0.5,Hibernate升級到3.6.0。書中詳細介紹了Spring和Hibernate的“零配置”特性,並充分介紹了Struts 2的Convention(約定)支持。本書不僅介紹了Spring 2.x的AOP支持,詳細介紹了Spring 2.x中Schema配置所支持的util、aop、tx等命名空間,還簡要講解了AspectJ的相關內容。本書也重點介紹了Spring 3.0的新功能:SpEL,SpEL不僅可以作為表達式語言單獨使用,也可與Spring容器結合來擴展Spring容器的功能。
《輕量級Java EE企業套用實戰(第3版)—Struts 2+Spring 3+Hibernate整合開發》創作感言
筆者首先要感謝廣大讀者對本書第2版的認同,在將近2年的時間內,本書第2版的銷量高達178萬碼洋,得到無數Java學習者的認同,成為Java EE開發者首選的經典圖書。考慮到目前技術的升級,筆者現將本書的全部技術升級到最新版、最前沿,以饗讀者。
還有一個值得介紹的訊息:本書姊妹篇《經典Java EE企業套用實戰》(由電子工業出版社出版,ISBN 978-7-121-11534-9)現已上市。學習本書時可以採用“輕經合參”的方式來學習:“輕”指的是以“SSH”整合的輕量級Java EE開發平台,“經”指的是以“EJB 3+JPA”整合的經典Java EE開發平台;這兩種平台本身具有很大的相似性,將兩種Java EE開發平台結構放在一起參考、對照著學習,能更好地理解Spring、Hibernate框架的設計思想,從而更深入地掌握它們。與此同時,也可以深入理解EJB 3與Spring容器中的Bean、EJB容器與Spring容器之間的聯繫和區別,從而融會貫通地掌握EJB 3+JPA整合的開發方式。
經常有讀者寫郵件來問筆者,為何你能快而且全面地掌握各種Java開發技術?筆者以前做過一些零散的回覆。這裡簡單地介紹筆者學習Java的一些歷史與方法,希望廣大讀者從中借鑑值得學習的地方,避開一些彎路。
筆者大約是1999年開始接觸Java,開始主要做點Applet玩(當時筆者對Applet做出來的動畫十分傾心)。後來開始流行ASP、JSP,筆者再次喜歡上ASP、JSP那種極其簡單的語法、短期內的快速上手,後來斷斷續續用ASP、JSP寫了多個小型企業網站、BBS、OA系統之類——不知道其他人是什麼經歷,筆者選擇編程一方面是因為個人愛好和“自豪感”(覺得能做出各種軟體,有點成就感),另一方面是因為編寫軟體可以輕易地賣點錢(是不是很俗?),但這個目的筆者無法迴避——由於出生在湖北一個貧窮的鄉下,所以在同濟念書時筆者常常為了開飯而寫代碼,或許有一些程式設計師和筆者會有相同的感觸。
在後來的開發過程中,筆者發現純粹的JSP開發雖然前期很方便,但由於開發時代碼重複得厲害,所以後期升級、維護很痛苦,於是開始大規模地修改自己寫的一堆“垃圾”代碼,不斷地思考怎樣對JSP腳本進行提取、封裝到Java Bean中,這個過程並不順利,經常遭遇各種性能問題、並發問題。原本可以運行良好的套用,反而被改得經常出現問題。
大約到了2000年,筆者接觸到EJB,對EJB許下的“承諾”無比欣羨,於是義無反顧地投入EJB的懷抱,不過EJB的學習並不順利,當時用的好像是WebLogic 5的伺服器,那時候覺得WebLogic 5所報的錯誤晦澀、難以閱讀,動輒幾屏的錯誤信息,讓人感覺很有壓力。
不過筆者是一個頑固的人,遇到錯誤總是不斷地修改、不斷地嘗試,在這樣的嘗試中,不知不覺中,天色已經發白。說來慚愧,第一個Hello World級的Entity EJB居然花了將近一個月的時間才弄完(絕不建議讀者從EJB 1.1或EJB 2開始學習,這只會給學習徒增難度,而且現在EJB 1.1、EJB 2都已被淘汰)。在那段時間內,筆者連最心愛的C幾乎完全沒碰過。
在接下來的2年多時間內,筆者一直沉浸在EJB中,不斷地搜尋各種關於EJB的資料、不斷地深入鑽研著關於EJB規範、EJB的運行、EJB容器的運行機制。隨著時間的流逝,EJB、EJB容器的運行原理逐漸明朗起來。
那是一段讓人懷念的、“神話”般的歲月,年輕的人,似乎擁有無窮的精力,那也是筆者Java技術增長最迅速的3年,筆者的Java EE功底也是在那3年內打下的,後來接觸的各種“新”技術只是在那個基礎上“修修補補”,或者“溫故而知新”。
2004年初,筆者開始接觸到Spring框架,從接觸Spring的第一天開始,直到今天,筆者一直覺得Spring和EJB之間有很大的相似性:
Spring本身也是一個容器,只是EJB容器管理的是EJB,Spring容器管理的是普通Java對象。
Spring對Bean類的要求很少,EJB容器對EJB的要求略多一些——所以初學者學習EJB上手較難,但學習Spring就簡單得多。
因為找到這種類比性,筆者學習Spring時,總是不斷地將EJB與Spring進行類比,然後再找出它們之間的不同之處。由於採用了這種“溫故而知新”的學習方式,所以筆者很容易就理解了Spring的設計,而且更加透徹。
很多Java學習者在學習過程中往往容易感覺Java開發內容紛繁蕪雜,造成這種感覺的原因就是因為沒有進行很好的歸納、總結、類比。為了避免“知識越學越多”的混亂感,讀者應該充分利用已掌握的知識,溫故而知新——一方面對已有的知識進行歸納、總結,另一方面將新的內容與已掌握的知識進行類比,這樣既能把已有的知識掌握得更有條理、更系統,也能更快、更透徹地掌握新的知識。
出於以上理由,筆者在介紹非常專業的編程知識之時,總會通過一些淺顯的類比來幫助讀者更好地理解。“簡單、易讀”成為筆者一貫堅持的創作風格,也是瘋狂Java體系叢書的特色。另一方面,瘋狂Java體系圖書的知識也很全面、實用。筆者希望讀者在看完瘋狂Java體系的圖書之後,可以較為輕鬆地理解書中所介紹的知識,並切實學會一種實用的開發技術,進而將之套用到實際開發中。如果讀者在學習過程中遇到無法理解的問題,可以登錄瘋狂Java聯盟(http://www.crazyit. org)與廣大Java學習者交流,筆者也會通過該平台與大家一起交流、學習。

相關詞條

熱門詞條

聯絡我們