輕量級Java EE企業應用實戰(第4版):Struts 2+Spring 4+Hibernate整合開發(含CD光碟1張)

博文視點發表於2014-10-17

輕量級Java EE企業應用實戰(第4版):Struts 2+Spring4+Hibernate整合開發(含CD光碟1張)(國家級獎項獲獎作品升級版,四版累計印刷27次發行量超10萬冊的輕量級Java EE經典著作

李剛 編著  

ISBN 978-7-121-24253-3

2014年10月出版

定價:108.00元

824頁

16開

編輯推薦

國內知名IT圖書作家李剛老師基於曾榮獲中國書刊發行業協會“年度全行業優秀暢銷品種”大獎的《輕量級Java EE企業應用實戰(第3版)》全新升級;

本書內容升級到Struts 2.3、Spring 4.0、Hibernate 4.3;全書所有示例基於Java 8、Hibernate註解進行全面升級;

《輕量級Java EE企業應用實戰》新增Maven、SVN、Tomcat 8.0、Eclipse luna(4.4)等知識;

數百個小型案例及完整的工作流系統綜合案例幫讀者領略S2SH開發精髓;

《輕量級Java EE企業應用實戰》被多所“985”“211”院校選作教材;

最受程式設計師歡迎、影響力最大的國人原創S2SH應用開發必讀經典。

內容提要

《輕量級Java EE企業應用實戰(第4版):Struts 2+Spring 4+Hibernate整合開發》是《輕量級 Java EE 企業應用實戰》的第4 版,第4 版保持了前幾版內容全面、深入的特點,主要完成全部知識的升級。

《輕量級Java EE企業應用實戰(第4版):Struts 2+Spring 4+Hibernate整合開發》介紹了 Java EE 領域的三個開源框架:Struts2、Spring 和Hibernate。其中Struts 2 升級到2.3.16.3,Spring 升級到4.0.4,Hibernate 升級到4.3.5。《輕量級Java EE企業應用實戰(第4版):Struts 2+Spring4+Hibernate整合開發》還全面介紹了Servlet 3.1 的新特性,以及Tomcat 8.0 的配置和用法,《輕量級JavaEE企業應用實戰(第4版):Struts 2+Spring 4+Hibernate整合開發》的示例也應該在Tomcat 8.0 上執行。

《輕量級Java EE企業應用實戰(第4版):Struts 2+Spring 4+Hibernate整合開發》重點介紹如何整合 Struts 2.3+Spring 4.0+Hibernate 4.3 進行Java EE 開發,主要包括三部分。第一部分介紹了Java EE 開發的基礎知識,以及如何搭建開發環境。第二部分詳細講解了Struts 2.3、Spring 4.0 和Hibernate 4.3 三個框架的用法,介紹三個框架時,以Eclipse IDE 的使用來上手,一步步帶領讀者深入三個框架的核心。這部分內容是筆者講授“瘋狂Java 實訓”的培訓講義,因此是《輕量級Java EE企業應用實戰(第4版):Struts 2+Spring 4+Hibernate整合開發》的重點部分。這部分內容既包含了筆者多年開發經歷的領悟,也融入了豐富的授課經驗。第三部分示範開發了一個包含7 個表,表之間具有複雜的關聯對映、繼承對映等關係,且業務也相對複雜的工作流案例,希望讓讀者理論聯絡實際,將三個框架真正運用到實際開發中去。該案例採用目前最流行、最規範的Java EE架構,整個應用分為領域物件層、DAO層、業務邏輯層、MVC 層和檢視層,各層之間分層清晰,層與層之間以鬆耦合的方法組織在一起。該案例既提供了IDE 無關的、基於Ant 管理的專案原始碼,也提供了基於Eclipse IDE 的專案原始碼,最大限度地滿足讀者的需求。

《輕量級Java EE企業應用實戰(第4版):Struts 2+Spring 4+Hibernate整合開發》不再介紹 Struts 1.x 相關內容,如果讀者希望獲取《輕量級J2EE 企業應用實戰》第1 版中關於Struts 1.x 的知識,請登入http://www.crazyit.org下載。當讀者閱讀此書遇到技術難題時,也可登入http://www.crazyit.org 發帖,筆者將會及時予以解答。

閱讀《輕量級Java EE企業應用實戰(第4版):Struts 2+Spring 4+Hibernate整合開發》之前,建議先認真閱讀筆者所著的《瘋狂 Java 講義》一書。《輕量級Java EE企業應用實戰(第4版):Struts 2+Spring4+Hibernate整合開發》適合於有較好的Java 程式設計基礎,或有初步JSP、Servlet 基礎的讀者,尤其適合於對Struts 2、Spring、Hibernate 瞭解不夠深入,或對Struts2+Spring+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.x和JavaBean及替代技術         5

1.2.2  Struts 2.3及替代技術        5

1.2.3  Hibernate 4.3及替代技術 6

1.2.4  Spring 4.0及替代技術        6

1.3  Tomcat的下載和安裝  7

1.3.1  安裝Tomcat伺服器  7

1.3.2  配置Tomcat的服務埠  9

1.3.3  進入控制檯         9

1.3.4  部署Web應用   12

1.3.5  配置Tomcat的資料來源       12

1.4  Eclipse的安裝和使用   14

1.4.1  Eclipse的下載和安裝         14

1.4.2  線上安裝Eclipse外掛        14

1.4.3  從本地壓縮包安裝外掛    16

1.4.4  手動安裝Eclipse外掛        17

1.4.5  使用Eclipse開發Java EE應用 17

1.4.6  匯入Eclipse專案        20

1.4.7  匯入非Eclipse專案   21

1.5  Ant的安裝和使用          22

1.5.1  Ant的下載和安裝      22

1.5.2  使用Ant工具     23

1.5.3  定義生成檔案    24

1.5.4  Ant的任務(task)   29

1.6  Maven的安裝和使用   31

1.6.1  下載和安裝Maven    31

1.6.2  設定Maven         32

1.6.3  建立、構建簡單的專案    33

1.6.4  Maven的核心概念    36

1.6.5  依賴管理    41

1.6.6  POM檔案的元素        44

1.7  使用SVN進行協作開發        44

1.7.1  下載和安裝SVN伺服器    45

1.7.2  配置SVN資源庫         46

1.7.3  下載和安裝SVN客戶端    47

1.7.4  將專案釋出到伺服器         48

1.7.5  從伺服器下載專案    48

1.7.6  提交(Commit)修改        49

1.7.7  同步(Update)本地檔案         49

1.7.8  新增檔案和目錄         50

1.7.9  刪除檔案和目錄         50

1.7.10 檢視檔案或目錄的版本變革    51

1.7.11 從以前版本重新開始         51

1.7.12 建立分支    52

1.7.13 沿著分支開發    52

1.7.14 合併分支    53

1.7.15 使用Eclipse作為SVN客戶端   54

1.8  本章小結        57

第2章 JSP/Servlet及相關技術詳解  58

2.1  Web應用和web.xml檔案    59

2.1.1  構建Web應用   59

2.1.2  配置描述符web.xml 60

2.2  JSP的基本原理      61

2.3  JSP的4種基本語法      65

2.3.1  JSP註釋       65

2.3.2  JSP宣告       66

2.3.3  輸出JSP表示式 67

2.3.4  JSP指令碼       68

2.4  JSP的3個編譯指令      70

2.4.1  page指令   70

2.4.2  include指令         74

2.5  JSP的7個動作指令      75

2.5.1  forward指令       75

2.5.2  include指令         77

2.5.3  useBean、setProperty、getProperty指令       79

2.5.4  plugin指令 81

2.5.5  param指令          81

2.6  JSP指令碼中的9個內建物件 82

2.6.1  application物件 83

2.6.2  config物件 88

2.6.3  exception物件    90

2.6.4  out物件      92

2.6.5  pageContext物件       93

2.6.6  request物件       95

2.6.7  response物件     102

2.6.8  session物件        106

2.7  Servlet介紹   108

2.7.1  Servlet的開發    108

2.7.2  Servlet的配置    110

2.7.3  JSP/Servlet的生命週期      111

2.7.4  load-on-startup Servlet        112

2.7.5  訪問Servlet的配置引數   113

2.7.6  使用Servlet作為控制器   115

2.8  JSP 2的自定義標籤       119

2.8.1  開發自定義標籤類    120

2.8.2  建立TLD檔案    120

2.8.3  使用標籤庫         121

2.8.4  帶屬性的標籤    122

2.8.5  帶標籤體的標籤         125

2.8.6  以頁面片段作為屬性的標籤    128

2.8.7  動態屬性的標籤         129

2.9  Filter介紹       131

2.9.1  建立Filter類       132

2.9.2  配置Filter   133

2.9.3  使用URL Rewrite實現網站偽靜態  136

2.10  Listener介紹        137

2.10.1 實現Listener類 138

2.10.2 配置Listener       139

2.10.3 使用ServletContextAttributeListener        140

2.10.4 使用ServletRequestListener和ServletRequestAttributeListener   141

2.10.5 使用HttpSessionListener和HttpSessionAttributeListener      142

2.11  JSP 2特性     147

2.11.1 配置JSP屬性      147

2.11.2 表示式語言         149

2.11.3  Tag File支援      157

2.12  Servlet 3.0新特性        159

2.12.1  Servlet 3.0的註解    159

2.12.2  Servlet 3.0的Web模組支援   160

2.12.3  Servlet 3.0提供的非同步處理    162

2.12.4改進的Servlet API        165

2.13  Servlet 3.1新增的非阻塞式IO   167

2.14  Tomcat 8的WebSocket支援       170

2.15 本章小結        174

第3章 Struts 2的基本用法        175

3.1  MVC思想概述       176

3.1.1  傳統Model 1和Model 2   176

3.1.2  MVC思想及其優勢   177

3.2  Struts 2的下載和安裝  178

3.2.1  為Web應用增加Struts 2支援 178

3.2.2  在Eclipse中使用Struts 2  179

3.2.3  增加登入處理    180

3.3  Struts 2的流程      183

3.3.1  Struts 2應用的開發步驟   183

3.3.2  Struts 2的流程   184

3.4  Struts 2的常規配置      185

3.4.1  常量配置    185

3.4.2  包含其他配置檔案    191

3.5  實現Action    191

3.5.1  Action介面和ActionSupport基類     193

3.5.2  Action訪問Servlet API       195

3.5.3  Action直接訪問Servlet API       197

3.5.4  使用ServletActionContext訪問Servlet API      199

3.6  配置Action    200

3.6.1  包和名稱空間    200

3.6.2  Action的基本配置     203

3.6.3  使用Action的動態方法呼叫    204

3.6.4  指定method屬性及使用萬用字元      205

3.6.5  配置預設Action 211

3.6.6  配置Action的預設處理類         211

3.7  配置處理結果        212

3.7.1  理解處理結果    212

3.7.2  配置結果    213

3.7.3  Struts 2支援的結果型別   214

3.7.4  plainText結果型別     215

3.7.5  redirect結果型別       217

3.7.6  redirectAction結果型別    218

3.7.7  動態結果    219

3.7.8  Action屬性值決定物理檢視資源     219

3.7.9  全域性結果    221

3.7.10  使用PreResultListener     222

3.8  配置Struts 2的異常處理     223

3.8.1  Struts 2的異常處理機制   223

3.8.2  宣告式異常捕捉         225

3.8.3  輸出異常資訊    226

3.9  Convention外掛與“約定”支援         227

3.9.1  Action的搜尋和對映約定 228

3.9.2  按約定對映Result     230

3.9.3  Action鏈的約定 233

3.9.4  自動重載入對映         234

3.9.5  Convention外掛的相關常量     234

3.9.6  Convention外掛相關Annotation       235

3.10  使用Struts 2的國際化        235

3.10.1  檢視頁面的國際化  235

3.10.2  Action的國際化        236

3.10.3  使用包範圍的國際化資源       238

3.10.4  使用全域性國際化資源       239

3.10.5  輸出帶佔位符的國際化訊息  241

3.10.6  載入資原始檔的順序       243

3.11  使用Struts 2的標籤庫        243

3.11.1  Struts 2標籤庫概述          243

3.11.2  使用Struts 2標籤    244

3.11.3  Struts 2的OGNL表示式語言 245

3.11.4  OGNL中的集合操作         247

3.11.5  訪問靜態成員  248

3.11.6  Lambda()表示式      248

3.11.7  控制標籤  249

3.11.8  資料標籤  259

3.11.9  主題和模板       268

3.11.10  自定義主題    270

3.11.11  表單標籤         271

3.11.12  非表單標籤    284

3.12  本章小結      287

第4章 深入使用Struts 2   288

4.1  詳解Struts 2的型別轉換     289

4.1.1  Struts 2內建的型別轉換器       290

4.1.2  基於OGNL的型別轉換     290

4.1.3  指定集合元素的型別         292

4.1.4  自定義型別轉換器    294

4.1.5  註冊型別轉換器         297

4.1.6  基於Struts 2的自定義型別轉換器  298

4.1.7  處理Set集合      299

4.1.8  型別轉換中的錯誤處理    301

4.2  使用Struts 2的輸入校驗     307

4.2.1  編寫校驗規則檔案    307

4.2.2  國際化提示資訊         310

4.2.3  使用客戶端校驗         311

4.2.4  欄位校驗器配置風格         312

4.2.5  非欄位校驗器配置風格    313

4.2.6  短路校驗器         315

4.2.7  校驗檔案的搜尋規則         316

4.2.8  校驗順序和短路         318

4.2.9  內建校驗器         318

4.2.10  基於註解的輸入校驗       329

4.2.11  手動完成輸入校驗  330

4.3  使用Struts 2控制檔案上傳 334

4.3.1  Struts 2的檔案上傳   334

4.3.2  實現檔案上傳的Action     335

4.3.3  配置檔案上傳的Action     337

4.3.4  手動實現檔案過濾    338

4.3.5  攔截器實現檔案過濾         340

4.3.6  輸出錯誤提示    341

4.3.7  檔案上傳的常量配置         342

4.4  使用Struts 2控制檔案下載 343

4.4.1  實現檔案下載的Action     343

4.4.2  配置Action 343

4.4.3  下載前的授權控制    344

4.5  詳解Struts 2的攔截器機制 345

4.5.1  攔截器在Struts 2中的作用      346

4.5.2  Struts 2內建的攔截器       346

4.5.3  配置攔截器         348

4.5.4  使用攔截器的配置語法    349

4.5.5  配置預設攔截器         350

4.5.6  實現攔截器類    351

4.5.7  使用攔截器         353

4.5.8  攔截方法的攔截器    354

4.5.9  攔截器的執行順序    356

4.5.10 攔截結果的監聽器    358

4.5.11 覆蓋攔截器棧裡特定攔截器的引數         359

4.5.12 使用攔截器完成許可權控制         360

4.6  使用Struts 2的Ajax支援     362

4.6.1  使用stream型別的Result實現Ajax        363

4.6.2  JSON的基本知識        365

4.6.3  實現Action邏輯         367

4.6.4  JSON外掛與json型別的Result        368

4.6.5  實現JSP頁面      370

4.7  本章小結        371

第5章 Hibernate的基本用法    372

5.1  ORM和Hibernate 373

5.1.1  物件/關聯式資料庫對映(ORM)       373

5.1.2  基本對映方式    374

5.1.3  流行的ORM框架簡介       375

5.1.4  Hibernate概述   376

5.2  Hibernate入門       376

5.2.1  Hibernate下載和安裝        376

5.2.2  Hibernate的資料庫操作   377

5.2.3  在Eclipse中使用Hibernate       381

5.3  Hibernate的體系結構  386

5.4  深入Hibernate配置檔案      388

5.4.1  建立Configuration物件     388

5.4.2  hibernate.properties檔案與hibernate.cfg.xml檔案        390

5.4.3  JDBC連線屬性   390

5.4.4  資料庫方言         391

5.4.5  JNDI資料來源的連線屬性    393

5.4.6  Hibernate事務屬性   393

5.4.7  二級快取相關屬性    393

5.4.8  外連線抓取屬性         394

5.4.9  其他常用的配置屬性         394

5.5  深入理解持久化物件   394

5.5.1  持久化類的要求         395

5.5.2  持久化物件的狀態    396

5.5.3  改變持久化物件狀態的方法    397

5.6  深入Hibernate對映      399

5.6.1  對映屬性    402

5.6.2  對映主鍵    409

5.6.3  使用Hibernate的主鍵生成策略       411

5.6.4  對映集合屬性    412

5.6.5  集合屬性的效能分析         419

5.6.6  有序集合對映    420

5.6.7  對映資料庫物件         422

5.7 對映元件屬性        424

5.7.1 元件屬性為集合         426

5.7.2 集合屬性的元素為元件    427

5.7.3  元件作為Map的索引        429

5.7.4  元件作為複合主鍵    430

5.7.5  多列作為聯合主鍵    432

5.8  使用傳統的對映檔案   433

5.8.1  增加XML對映檔案   433

5.8.2  註解,還是XML對映檔案        436

5.9  本章小結        436

第6章 深入使用Hibernate        437

6.1  Hibernate的關聯對映  438

6.1.1  單向N-1關聯  438

6.1.2  單向1-1關聯  443

6.1.3  單向1-N關聯  444

6.1.4  單向N-N關聯 448

6.1.5  雙向1-N關聯  449

6.1.6  雙向N-N關聯 452

6.1.7  雙向1-1關聯  454

6.1.8  元件屬性包含的關聯實體         456

6.1.9  基於複合主鍵的關聯關係         458

6.1.10 複合主鍵的成員屬性為關聯實體    460

6.1.11 持久化的傳播性         463

6.2  繼承對映        464

6.2.1  整個類層次對應一個表的對映策略         466

6.2.2  連線子類的對映策略         468

6.2.3  每個具體類對應一個表的對映策略         471

6.3  Hibernate的批量處理  473

6.3.1  批量插入    473

6.3.2  批量更新    474

6.3.3  DML風格的批量更新/刪除       475

6.4  使用HQL查詢       476

6.4.1  HQL查詢     476

6.4.2  HQL查詢的from子句        478

6.4.3  關聯和連線         479

6.4.4  HQL查詢的select子句     482

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  命名查詢  487

6.5  條件查詢        489

6.5.1  關聯和動態關聯         491

6.5.2  投影、聚合和分組    493

6.5.3  離線查詢和子查詢    496

6.6  SQL查詢         497

6.6.1  標量查詢    497

6.6.2  實體查詢    499

6.6.3  處理關聯和繼承         501

6.6.4  命名SQL查詢     502

6.6.5  呼叫儲存過程    504

6.6.6  使用定製SQL      505

6.7  資料過濾        507

6.8  事務控制        510

6.8.1  事務的概念         510

6.8.2  Session與事務   511

6.8.3  上下文相關的Session        513

6.9  二級快取和查詢快取   514

6.9.1  開啟二級快取    514

6.9.2  管理快取和統計快取         517

6.9.3  使用查詢快取    518

6.10  事件機制      520

6.10.1  攔截器       521

6.10.2  事件系統  523

6.11  本章小結      525

第7章 Spring的基本用法  526

7.1  Spring簡介和Spring 4.0的變化   527

7.1.1  Spring簡介 527

7.1.2  Spring 4.0的變化        528

7.2  Spring入門     528

7.2.1  Spring下載和安裝      528

7.2.2  使用Spring管理Bean        529

7.2.3  在Eclipse中使用Spring     532

7.3  Spring的核心機制:依賴注入     535

7.3.1  理解依賴注入    536

7.3.2  設值注入    538

7.3.3  構造注入    541

7.3.4  兩種注入方式的對比         543

7.4  使用Spring容器    543

7.4.1  Spring容器 544

7.4.2  使用ApplicationContext     545

7.4.3  ApplicationContext的國際化支援     546

7.4.4  ApplicationContext的事件機制         548

7.4.5  讓Bean獲取Spring容器  551

7.5  Spring容器中的Bean   552

7.5.1  Bean的基本定義和Bean別名 553

7.5.2  容器中Bean的作用域       554

7.5.3  配置依賴    557

7.5.4  設定普通屬性值         559

7.5.5  配置合作者Bean        560

7.5.6  使用自動裝配注入合作者Bean        561

7.5.7  注入巢狀Bean   563

7.5.8  注入集合值         564

7.5.9  組合屬性    568

7.5.10  Spring的Bean和JavaBean     569

7.6  Spring 3.0提供的Java配置管理 571

7.7  建立Bean的3種方式 573

7.7.1  使用構造器建立Bean例項       574

7.7.2  使用靜態工廠方法建立Bean   574

7.7.3  呼叫例項工廠方法建立Bean   576

7.8  深入理解容器中的Bean       578

7.8.1  抽象Bean與子Bean 578

7.8.2  Bean繼承與Java繼承的區別  580

7.8.3  容器中的工廠Bean   580

7.8.4  獲得Bean本身的id  582

7.8.5  強制初始化Bean        583

7.9  容器中Bean的生命週期      584

7.9.1  依賴關係注入之後的行為         584

7.9.2  Bean銷燬之前的行為        586

7.9.3  協調作用域不同步的Bean        589

7.10  高階依賴關係配置      592

7.10.1 獲取其他Bean的屬性值  592

7.10.2 獲取Field值        595

7.10.3 獲取方法返回值         596

7.11  基於XML Schema的簡化配置方式   599

7.11.1 使用p:名稱空間簡化配置         599

7.11.2 使用c:名稱空間簡化配置         601

7.11.3 使用util:名稱空間簡化配置     602

7.12  Spring 3.0提供的表示式語言(SpEL)     604

7.12.1 使用Expression介面進行表示式求值     604

7.12.2  Bean定義中的表示式語言支援     606

7.12.3  SpEL語法詳述  607

7.13  本章小結      612

第8章 深入使用Spring      613

8.1  兩種後處理器        614

8.1.1  Bean後處理器   614

8.1.2  Bean後處理器的用處        617

8.1.3  容器後處理器    618

8.1.4  屬性佔位符配置器    619

8.1.5  重寫佔位符配置器    620

8.2  Spring的“零配置”支援     622

8.2.1  搜尋Bean類       622

8.2.2  指定Bean的作用域  625

8.2.3  使用@Resource配置依賴         625

8.2.4  使用@PostConstruct和@PreDestroy定製生命週期行為      626

8.2.5  Spring 3.0新增的註解        627

8.2.6  Spring 4.0增強的自動裝配和精確裝配   627

8.3  資源訪問        631

8.3.1  Resource實現類         632

8.3.2  ResourceLoader介面和ResourceLoaderAware介面       636

8.3.3  使用Resource作為屬性   639

8.3.4  在ApplicationContext中使用資源    640

8.4  Spring的AOP          643

8.4.1  為什麼需要AOP         643

8.4.2  使用AspectJ實現AOP       644

8.4.3  AOP的基本概念         651

8.4.4  Spring的AOP支援     652

8.4.5  基於註解的“零配置”方式    653

8.4.6  基於XML配置檔案的管理方式        667

8.5  Spring 3.1新增的快取機制  673

8.5.1  啟用Spring快取         674

8.5.2  使用@Cacheable執行快取       676

8.5.3  使用@CacheEvict清除快取      680

8.6  Spring的事務         681

8.6.1  Spring支援的事務策略      681

8.6.2  使用XML Schema配置事務策略      686

8.6.3  使用@Transactional   692

8.7  Spring整合Struts 2        693

8.7.1  啟動Spring容器         693

8.7.2  MVC框架與Spring整合的思考        694

8.7.3  讓Spring管理控制器         695

8.7.4  使用自動裝配    699

8.8  Spring整合Hibernate   701

8.8.1  Spring提供的DAO支援    701

8.8.2  管理Hibernate的SessionFactory      702

8.8.3  實現DAO元件的基類        703

8.8.4  傳統的HibernateTemplate和HibernateDaoSupport       706

8.8.5  實現DAO元件   709

8.8.6  使用IoC容器組裝各種元件     709

8.8.7  使用宣告式事務         712

8.9  Spring整合JPA       713

8.9.1  管理EntityManagerFactory        713

8.9.2  實現DAO元件基類   715

8.9.3  使用宣告式事務         718

8.10  本章小結      719

第9章 企業應用開發的思考和策略          720

9.1  企業應用開發面臨的挑戰   721

9.1.1  可擴充套件性、可伸縮性         721

9.1.2  快捷、可控的開發    722

9.1.3  穩定性、高效性         722

9.1.4  花費最小化,利益最大化         723

9.2  如何面對挑戰        723

9.2.1  使用建模工具    723

9.2.2  利用優秀的框架         723

9.2.3  選擇性地擴充套件    725

9.2.4  使用程式碼生成器         726

9.3  常見設計模式精講        726

9.3.1  單例模式    727

9.3.2  簡單工廠    728

9.3.3  工廠方法和抽象工廠         734

9.3.4  代理模式    737

9.3.5  命令模式    742

9.3.6  策略模式    745

9.3.7  門面模式    748

9.3.8  橋接模式    750

9.3.9  觀察者模式         754

9.4  常見的架構設計策略   757

9.4.1  貧血模型    757

9.4.2  領域物件模型    760

9.4.3  合併業務邏輯物件與DAO物件        762

9.4.4  合併業務邏輯物件和Domain Object        763

9.4.5  拋棄業務邏輯層         764

9.5  本章小結        765

第10章 簡單工作流系統   766

10.1  專案背景及系統結構 767

10.1.1  應用背景  767

10.1.2  系統功能介紹  767

10.1.3  相關技術介紹  768

10.1.4  系統結構  768

10.1.5  系統的功能模組       769

10.2  Hibernate持久層         770

10.2.1  設計持久化實體       770

10.2.2  建立持久化實體類  771

10.3  實現DAO層         777

10.3.1  DAO元件的定義      778

10.3.2  實現DAO元件 780

10.3.3  部署DAO層     783

10.4  實現Service層    784

10.4.1  業務邏輯元件的設計       785

10.4.2  實現業務邏輯元件  785

10.4.3  事務管理  790

10.4.4  部署業務邏輯元件  791

10.5  實現任務的自動排程 791

10.5.1  使用Quartz       791

10.5.2  在Spring中使用Quartz  795

10.6  實現系統Web層         798

10.6.1  Struts 2和Spring的整合 798

10.6.2  控制器的處理順序圖       799

10.6.3  員工登入  799

10.6.4  進入打卡  802

10.6.5  處理打卡  803

10.6.6  進入申請  805

10.6.7  提交申請  806

10.6.8  使用攔截器完成許可權管理       808

10.7  本章小結      809

作者簡介

李剛,十多年軟體行業開發從業經驗,瘋狂軟體教育中心教學總監。

瘋狂Java實訓營創始人,瘋狂Java體系原創圖書作者。

廣東技術師範學院電腦科學系兼職副教授,51CTO專家門診特邀嘉賓。

培訓的學生已在華為、IBM、阿里軟體、網易、電信盈科等名企就職。

國內著名高階IT技術作家,已出版《瘋狂Java講義》《瘋狂Android講義》《輕量級Java EE企業應用實戰》《瘋狂iOS講義》《瘋狂Ajax講義》《瘋狂XML講義》《經典Java EE企業應用實戰》《瘋狂HTML 5/CSS 3/JavaScript講義》《Struts 2.x權威指南》等著作。其中瘋狂Java體系圖書經多年沉澱,贏得極高的市場認同,多次重印成為超級暢銷書,並被多所“985”“211”院校選作教材。部分圖書已被翻譯成繁體中文版,授權到臺灣地區。

前言

經過多年沉澱,Java EE平臺已經成為電信、金融、電子商務、保險、證券等各行業的大型應用系統的首選開發平臺。目前Java行業的軟體開發已經基本穩定,這兩三年內基本沒有出現什麼具有廣泛影響力的新技術。Java EE開發大致可分為兩種方式:以Spring為核心的輕量級Java EE企業開發平臺;以EJB3+JPA為核心的經典Java EE開發平臺。無論使用哪種平臺進行開發,應用的效能、穩定性都有很好的保證,開發人群也有很穩定的保證。

本書介紹的開發平臺,就是以Struts 2.3+Spring 4.0+Hibernate 4.3(實際專案中可能以JPA來代替Hibernate)為核心的輕量級Java EE,這種組合在保留經典JavaEE應用架構、高度可擴充套件性、高度可維護性的基礎上,降低了Java EE應用的開發、部署成本,對於大部分中小型企業應用是第一首選。在一些需要具有高度伸縮性、高度穩定性的企業應用(比如銀行系統、保險系統)裡,以EJB 3+JPA為核心的經典Java EE應用則具有一定的佔有率。本書姊妹篇《經典Java EE企業應用實戰》主要介紹了後一種JavaEE開發平臺。

本書主要升級了《輕量級Java EE企業應用實戰》的知識,本書採用最新的Tomcat 8作為Web伺服器,全面而細緻地介紹了Servlet 3.1的新特性,並將Struts 2升級到Struts 2.3.16.3,Spring升級到4.0.4,Hibernate升級到4.3.5。詳細介紹了Spring和Hibernate的“零配置”特性,並充分介紹了Struts2的Convention(約定)支援。為了順應技術的改變,本書介紹Hibernate持久化對映已經全部升級為註解方式,不再採用傳統的XML對映方式;本書還詳細介紹了Spring 3.1新增的快取機制,包括使用@Cacheable執行快取、使用@CacheEvict清除快取等、也詳細介紹了Spring 4.0的改變,包括增強的自動裝配和精確裝配等。

本書創作感言

筆者首先要感謝廣大讀者對本書前幾版的認同,本書前幾版累計發行近十萬冊,並獲得中國書刊發行業協會頒發的“2011年度全行業優秀暢銷品種”大獎,且多次獲得電子工業出版社頒發的“最暢銷圖書獎”。是廣大讀者的選擇讓“瘋狂Java體系”圖書大放異彩;是廣大讀者的支援讓我在孤獨的技術創作道路上堅持求索;是廣大讀者的反饋讓“瘋狂Java體系”圖書日臻完美。

廣大讀者的熱情對我來說既是支援,又是責任——“瘋狂Java體系”圖書有責任必須完美!因此筆者在改進、升級“瘋狂Java體系”圖書時,有一種如履薄冰的感覺,希望以最大的努力來貢獻最好的作品。

另外,本書還有一本配套的姊妹篇:《經典Java EE企業應用實戰》。學習本書時可以採用“輕經合參”的方式來學習:“輕”指的是以“SSH”整合的輕量級Java EE開發平臺,“經”指的是以“EJB3+JPA”整合的經典Java EE開發平臺;這兩種平臺本身具有很大的相似性,將兩種Java EE開發平臺結構放在一起參考、對照著學習,能更好地理解Spring、Hibernate框架的設計思想,從而更深入地掌握它們。與此同時,也可以深入理解EJB 3與Spring容器中的Bean、EJB容器與Spring容器之間的聯絡和區別,從而融會貫通地掌握EJB3+JPA整合的開發方式。

在介紹非常專業的程式設計知識之時,筆者總會通過一些淺顯的類比來幫助讀者更好地理解。“簡單、易讀”成為筆者一貫堅持的創作風格,也是“瘋狂Java體系”圖書的特色。另一方面,“瘋狂Java體系”圖書的知識也很全面、實用。筆者希望讀者在看完“瘋狂Java體系”的圖書之後,可以較為輕鬆地理解書中所介紹的知識,並切實學會一種實用的開發技術,進而將之應用到實際開發中。萬一讀者在學習過程中遇到無法理解的問題,可以登入瘋狂Java聯盟(http://www.crazyit.org)與廣大Java學習者交流,筆者也會通過該平臺與大家一起交流、學習。

本書有什麼特點

本書保持了《輕量級Java EE企業應用實戰》前幾版簡單、實用的優勢,同樣堅持讓案例說話、以案例來介紹知識點的風格。本書最後同樣示範開發了企業工作流案例,希望讀者通過該案例真正步入實際企業開發的殿堂。

本書依然保留了《輕量級Java EE企業應用實戰》前幾版的三個特色。

1.經驗豐富,針對性強

筆者既擔任過軟體開發的技術經理,也擔任過軟體公司的培訓導師,還從事過職業培訓的專職講師。這些經驗影響了筆者寫書的目的,不是一本學院派的理論讀物,而是一本實際的開發指南。

2.內容實際,實用性強

本書所介紹的Java EE應用範例,採用了目前企業流行的開發架構,絕對嚴格遵守Java EE開發規範,而不是將各種技術雜亂地糅合在一起號稱Java EE。讀者參考本書的架構,完全可以身臨其境地感受企業實際開發。

3.高屋建瓴,啟發性強

本書介紹的幾種架構模式,幾乎是時下最全面的Java EE架構模式。這些架構模式可以直接提升讀者對系統架構設計的把握。

本書寫給誰看

如果你已經掌握Java SE內容,或已經學完了《瘋狂Java講義》一書,那你非常適合閱讀此書。除此之外,如果你已有初步的JSP、Servlet基礎,甚至對Struts 2、Spring 4.0、Hibernate 4.3有所瞭解,但希望掌握它們在實際開發中應用,本書也將非常適合你。如果你對Java的掌握還不熟練,則建議遵從學習規律,循序漸進,暫時不要購買、閱讀此書,而是按照《瘋狂Java學習路線圖》中的建議順序學習。

 

 

 

李剛

2014-8-19

相關文章