【定價】¥65.00
【作者】羅會波
【出 版 社】 清華大學出版社
【書 號】 9787302159735
【出版日期】 2007 年10月
【開 本】 16開
【頁 碼】 552
【版 次】1-1
【所屬分類】 計算機 > 軟體與程式設計 > JAVA > 綜合
內容簡介
JSF是表示層框架的標準,Hibernate是一個比較完善的對象關係映射工具,Spring則提供了一個Web套用的輕量級的解決方案。在開發一個多層的Java EE應用程式時,這些框架可謂是相輔相成、相得益彰,可以稱得上是開發輕量級Java EE套用的三劍客。另外,AJAX是一種非常流行的改善用戶體驗的技術,但目前國內外還沒有一本完整地介紹組合這三種框架及AJAX來開發應用程式的書籍,本書是在這方面的一個嘗試。本書詳盡地介紹了JSF的基本結構和工作原理、標籤、驗證與轉換、事件處理、國際化編程及IoC;對象關係映射的概念、Hibernate的結構及與JSF的集成;Spring的結構、AOP、Spring與JSF和Hibernate的集成;常用IDE(Eclipse和MyEclipse)的使用方法等內容。
本書的特點主要是從編程實踐的角度來介紹這些框架的基本原理,以及用示例演示如何具體套用這些框架來開發一個Web應用程式。在介紹各種框架時,對涉及到的Web開發中容易遇到的疑難問題儘可能給出淺顯易懂的解釋,其目的是幫助想利用這些框架進行開發的人員儘快進入實戰狀態。
目錄介紹
目 錄
第1章 為什麼要學習框架及學習什麼樣的
框架1
1.1 Java的發展與變化1
1.1.1 版本與稱謂的變化1
1.1.2 應用程式開發方式的變遷1
1.2 兩種形式的多層結構的J2EE應用程式2
1.2.1 胖客戶端J2EE應用程式2
1.2.2 Web應用程式3
1.3 Web套用的兩種實現方式4
1.3.1 傳統的重量級實現方式5
1.3.1.1 運行環境5
1.3.1.2 EJB5
1.3.1.3 其他特點6
1.3.1.4 適應的場合6
1.3.2 方興未艾的輕量級實現方式6
1.3.2.1 運行環境7
1.3.2.2 POJO7
1.3.2.3 其他特點7
1.3.2.4 適應場合7
1.4 風雲際會的框架世界7
1.4.1 框架的出現與流行8
1.4.2 大器晚成展新顏——JSF8
1.4.3 層林深處好冬眠——Hibernate9
1.4.4 七音合奏春光曲——Spring9
1.5 為什麼是JSF而不是Struts9
1.5.1 比Struts更高的抽象9
1.5.2 早先暴露的缺陷不斷被彌補11
1.5.2.1 解決了與JSP集成中
的一些突出問題11
1.5.2.2 統一表達式語言與JSTL
疊代標籤的支持11
1.5.2.3 其他新的特徵12
1.5.3 與客戶端技術的完美結合12
1.5.3.1 可以藉助JavaScript改善用
戶體驗12
1.5.3.2 可與AJAX無縫集成12
第2章 JSF與Web應用程式13
2.1 JSF的設計目標及與Web套用的關係13
2.2 Web應用程式概覽13
2.2.1 基本的Web組件13
2.2.2 Web部署描述器檔案13
2.2.3 Web應用程式的物理結構14
2.3 Web應用程式的開發環境配置14
2.3.1 Java 2 SDK的下載與安裝14
2.3.2 Web容器的下載與安裝15
2.3.3 環境變數的設定16
2.3.4 其他準備工作16
2.4 Servlet18
2.4.1 Servlet的基本概念18
2.4.2 Servlet的體系結構18
2.4.3 你的第一個Servlet應用程式——
Hello World19
2.4.3.1 建立示例套用目錄結構19
2.4.3.2 編寫Servlet類檔案19
2.4.3.3 編譯Servlet類檔案20
2.4.3.4 編寫部署描述器檔案
web.xml20
2.4.3.5 部署與運行示例套用21
2.4.3.6 原理分析22
2.4.4 Servlet的生命周期22
2.4.4.1 初始化23
2.4.4.2 處理請求23
2.4.4.3 銷毀24
2.4.5 Servlet的作用域對象24
2.4.6 過濾請求與回響24
2.5 JSP24
2.5.1 JSP如何表示靜態內容25
2.5.2 JSP如何表示動態內容25
2.5.3 JSP的注釋25
2.5.3.1 HTML注釋26
2.5.3.2 JSP注釋26
2.5.4 JSP示例26
2.5.4.1 建立應用程式目錄26
2.5.4.2 編寫JSP示例代碼26
2.5.4.3 部署和運行JSP26
2.5.5 JSP與Servlet的關係27
2.5.5.1 JSP轉換為Servlet後執行27
2.5.5.2 JSP轉化後的Servlet的
簡要分析27
2.5.5.3 JSP為Servlet提供了模板
機制29
2.5.6 JSP的元素29
2.5.6.1 指令29
2.5.6.2 動作30
2.5.6.3 腳本元素30
2.5.7 JSP的標籤庫32
2.5.7.1 標籤庫的組成32
2.5.7.2 自定義標籤庫33
2.5.7.3 JSP標準標籤庫35
2.5.8 JSP的內建對象35
2.5.8.1 out36
2.5.8.2 request37
2.5.8.3 session39
2.5.8.4 application41
2.5.8.5 config41
2.5.8.6 pageContext41
2.5.8.7 page41
2.5.8.8 response41
2.5.8.9 exception41
2.5.9 JSP中的異常處理42
2.5.10 Web組件間的關聯關係42
2.5.10.1 包含42
2.5.10.2 請求轉發43
2.5.10.3 重定向45
2.5.11 JavaBean45
2.5.11.1 JavaBean的概念45
2.5.11.2 為什麼要引入JavaBean46
2.5.11.3 JavaBean的編碼約定46
2.5.11.4 一個簡單的JavaBean48
2.5.11.5 在JSP中使用JavaBean50
2.5.12 JavaBean在JSP中的有效範圍50
2.5.12.1 演示Page範圍的Bean50
2.5.12.2 演示Request範圍的Bean52
2.5.12.3 演示Session範圍的Bean53
2.5.12.4 演示Application範圍的
Bean54
2.6 早期框架Struts55
2.6.1 應用程式的分層55
2.6.2 表單的處理與驗證55
2.6.3 類型轉換56
2.6.4 導航56
2.6.5 資源管理56
2.6.6 國際化編程56
2.6.7 異常處理的加強56
2.6.8 模板的重用管理與布局57
2.7 JSF57
2.7.1 具有早期框架的一些特性57
2.7.2 有狀態的用戶界面組件模型57
2.7.3 用戶界面事件的伺服器端的處理58
2.7.4 自動生成各種標誌語言58
2.7.5 與業務對象的聲明式集成58
第3章 JSF應用程式開發入門59
3.1 JSF開發環境的配置59
3.1.1 JSF參考實現的下載與安裝59
3.1.2 ANT的下載與安裝60
3.1.3 環境變數的設定60
3.2 開發您的第一個JSF應用程式60
3.2.1 Hello World應用程式的需求分析61
3.2.2 應用程式的目錄結構61
3.2.3 應用程式的頁面檔案61
3.2.3.1 index.jsp61
3.2.3.2 hello.jsp62
3.2.3.3 howDoYouDo.jsp65
3.2.3.4 howAreYou.jsp66
3.2.4 應用程式的Backing Bean66
3.2.4.1 Backing Bean及其作用66
3.2.4.2 示例中的Backing Bean
類檔案67
3.2.4.3 Backing Bean的特點69
3.2.5 JSF的配置檔案faces-config.xml69
3.2.5.1 示例套用的導航規則70
3.5.5.2 示例套用的託管JavaBean
配置71
3.2.6 應用程式的配置檔案web.xml71
3.2.7 手工編譯應用程式72
3.2.8 應用程式上下文73
3.2.9 建立應用程式上下文及部署套用
程式73
3.2.9.1 直接修改Tomcat的配置
檔案server.xml73
3.2.9.2 使用Tomcat頁面形式的
管理工具73
3.2.10 運行應用程式74
3.3 用ANT工具構建應用程式75
3.3.1 ANT工具簡介75
3.3.2 創建build.xml檔案76
3.3.2.1 設定屬性76
3.3.2.2 設定classpath77
3.3.2.3 定義clean目標77
3.3.2.4 定義prepare目標77
3.3.2.5 定義deploy.copyJars目標77
3.2.2.6 定義build目標78
3.3.2.7 定義build.war目標79
3.3.2.8 定義deploy目標79
3.3.3 用ANT工具自動構建和部署套用
程式79
第4章 JSF中的請求處理80
4.1 JSF處理請求的基本過程80
4.1.1 將請求映射到FacesServlet80
4.1.2 FacesServlet類80
4.1.3 獲得配置Servlet的配置信息81
4.1.4 初始化時獲得Faces上下文工廠和
生命周期實例81
4.1.5 FacesServlet對請求的處理過程81
4.1.5.1 獲得Faces上下文並用它
處理當前請求82
4.1.5.2 調用請求處理生命周期的
execute()方法82
4.1.5.3 調用請求處理生命周期的
render()方法82
4.1.5.4 釋放Faces上下文對象83
4.1.5.5 與普通Servlet對請求處理
的比較83
4.1.6 處理完成後的資源釋放83
4.2 Faces上下文83
4.2.1 Faces上下文簡介83
4.2.2 Faces上下文的主要方法84
4.2.2.1 獲取應用程式實例84
4.2.2.2 獲取外部上下文84
4.2.2.3 獲取與設定視圖根85
4.2.2.4 處理訊息佇列85
4.2.2.5 獲取呈現器工具包86
4.2.2.6 流程控制方法86
4.2.2.7 獲取表達式語言上下文87
4.2.2.8 回響88
4.2.2.9 獲取Faces上下文的當前
實例88
4.3 請求處理的生命周期88
4.3.1 獲得生命周期對象88
4.3.2 生命周期的場景89
4.3.2.1 非Faces請求生成Faces
回響89
4.3.2.2 Faces請求生成非Faces
回響90
4.3.2.3 Faces請求生成Faces回響90
4.3.3 標準的JSF請求處理生命周期90
4.3.3.1 重建視圖92
4.3.3.2 套用請求值93
4.3.3.3 處理驗證94
4.3.3.4 更新模型值95
4.3.3.5 調用應用程式95
4.3.3.6 呈現回響95
4.4 Application及相關的類96
4.4.1 Application簡介96
4.4.2 Application的主要屬性97
4.4.2.1 動作監聽器97
4.4.2.2 導航處理器98
4.4.2.3 視圖處理器98
4.4.2.4 預設呈現包標識98
4.4.2.5 狀態管理器98
4.4.2.6 表達式語言解析器98
4.4.3 Application動作98
4.4.4 Application作為組件工廠99
4.4.5 Application支持國際化編程的方法99
第5章 JSF的體系結構101
5.1 MVC架構模式101
5.1.1 耦合與解耦101
5.1.2 MVC架構模式102
5.1.3 Web套用中的MVC--Model2104
5.2 MVC架構模式的實現策略105
5.2.1 Struts的實現策略105
5.2.2 JSF的實現策略105
5.2.2.1 JSF的控制器部分106
5.2.2.2 JSF的視圖部分107
5.2.2.3 JSF的模型部分107
5.3 JSF的主要組成部分108
5.3.1 JSF主要組成部分及其關係108
5.3.1.1 組成部分概覽108
5.3.1.2 各部分之間的關係109
5.3.2 用戶界面組件109
5.3.2.1 對組件的直觀認識109
5.3.2.2 JSF的組件模型109
5.3.2.3 組件模型中的接口110
5.3.2.4 組件模型中的類111
5.3.2.5 組件的作用112
5.3.2.6 組件的屬性112
5.3.2.7 組件在伺服器和客戶端的
表現形式113
5.3.2.8 組件的標識114
5.3.2.9 通過標識引用組件115
5.3.2.10 組件是有狀態的116
5.3.2.11 標準組件與自定義組件116
5.3.3 呈現器116
5.3.4 Backing Bean117
5.3.5 事件與事件監聽器118
5.3.6 導航系統119
5.3.7 類型轉換器120
5.3.8 驗證器120
5.3.9 訊息120
第6章 標準用戶界面組件122
6.1 標準組件概述122
6.1.1 組件的類型122
6.1.2 組件的家族122
6.1.3 組件的呈現器類型123
6.2 JSF的呈現模型123
6.2.1 直接實現方式123
6.2.2 委託實現方式123
6.2.3 呈現包工廠124
6.2.4 呈現包124
6.2.5 呈現器125
6.3 JSF實現的預設呈現器類型與標準組件
HTML具體類的關係126
6.4 組件在JSP頁面上的表示127
6.4.1 在JSP頁面中使用用戶界面組件的
定製動作128
6.4.2 核心標籤庫128
6.4.3 HTML標籤庫128
6.4.4 組件的HTML屬性130
6.5 標準組件數據模型130
6.5.1 標準組件與呈現無關的屬性130
6.5.2 標準組件模型Bean131
6.5.2.1 SelectItem131
6.5.2.2 SelectItemGroup131
6.5.2.3 DataModel131
6.6 標準組件及使用方法132
6.6.1 用UIViewRoot控制頁面132
6.6.1.1 UIViewRoot簡介132
6.6.1.2 <f:view>在JSP頁面上
的套用133
6.6.1.3 <f:subview>的使用134
6.6.2 用UIForm處理表單136
6.6.3 用UIParameter傳遞參數137
6.6.4 用facet製作表頭、表腳及列頭137
6.6.5 用UIInput處理輸入138
6.6.5.1 用HtmlInputText輸入單行
文本139
6.6.5.2 用HtmlInputSecret輸入
密碼139
6.6.5.3 用HtmlInputTextarea輸入
多行文本139
6.6.5.4 用HtmlInputHidden
作為隱含欄位140
6.6.6 用UIOutput處理輸出140
6.6.6.1 用HtmlOutputText
輸出簡單文本140
6.6.6.2 用HtmlOutputFormat
輸出格式化文本141
6.6.6.3 用HtmlOutputLabel作為
組件的標註142
6.6.6.4 用HtmlOutputLink作為
超連結142
6.6.7 用UISelectItem提供單個選項142
6.6.8 用UISelectItems提供多個選項143
6.6.9 用UISelectBoolean表示邏輯選項143
6.6.10 用UISelectOne作為單選組件144
6.6.10.1 單選列表框
HtmlSelectOneListbox144
6.6.10.2 單選下拉選單
HtmlSelectOneMenu144
6.6.10.3 單選鈕HtmlSelect-
OneRadio144
6.6.11 用UISelectMany作為複選組件145
6.6.11.1 複選列表框
HtmlSelectManyListbox145
6.6.11.2 複選下拉選單
HtmlSelectManyMenu145
6.6.11.3 複選鈕
HtmlSelectManyCheckbox145
6.6.12 用UICommand調用應用程式146
6.6.12.1 命令按鈕HtmlCommand
Button146
6.6.12.2 命令超連結
HtmlCommandLink146
6.6.13 用UIMessage顯示特定組件的
訊息147
6.6.14 用UIMessages顯示多條訊息147
6.6.15 用UIGraphic顯示圖片148
6.6.16 用UIPanel分組與布局組件148
6.6.16.1 用HtmlPanelGroup分組
組件148
6.6.16.2 用HtmlPanelGrid布局
組件148
6.6.17 用UIColumn表示數據列149
6.6.18 用UIData顯示數據集中的數據149
6.6.19 到哪裡獲得組件更詳細的信息150
第7章 表達式語言與託管Bean151
7.1 表達式語言的出現151
7.1.1 統一表達式語言出現的背景151
7.1.1.1 JSP的表達式語言151
7.1.1.2 JSF自己的表達式語言152
7.1.1.3 JSP與JSF表達式語言的
衝突153
7.1.2 統一表達式語言153
7.1.2.1 值表達式153
7.1.2.2 方法表達式154
7.1.2.3 解決原來的JSP與JSF
表達式的衝突問題154
7.2 託管Bean155
7.2.1 託管Bean創建工具與託管Bean155
7.2.2 託管Bean的配置155
7.2.2.1 基本的配置元素156
7.2.2.2 配置託管Bean的屬性156
7.2.2.3 託管Bean屬性的初始化與
JSF的IoC157
7.2.3 List配置為託管Bean158
7.2.4 Map配置為託管Bean158
7.3 託管 Bean的有效範圍159
7.3.1 請求範圍159
7.3.2 會話範圍160
7.3.3 應用程式範圍160
7.3.4 NONE範圍160
7.3.5 不同範圍間的託管Bean的引用161
第8章 JSF中的導航163
8.1 JSF導航概述163
8.1.1 應用程式動作與導航163
8.1.2 導航處理器的行為是可以配置的163
8.2 JSF支持的導航形式164
8.2.1 動態導航164
8.2.1.1 何為動態導航164
8.2.1.2 簡單動態導航示例回顧164
8.2.2 靜態導航165
8.2.2.1 何為靜態導航165
8.2.2.2 靜態導航示例165
8.3 導航規則167
8.3.1 導航規則需要配置的元素167
8.3.2 導航規則的匹配算法167
8.3.3 複雜導航規則的配置示例168
8.4 動作事件監聽器方法對導航的影響169
8.4.1 動作事件監聽器方法間接影響
導航169
8.4.2 動作事件監聽器方法對導航
影響的示例169
8.4.2.1 導航出發頁面169
8.4.2.2 包含動作事件監聽器方法和
動作方法的Backing Bean170
8.4.2.3 導航目的地頁面171
8.4.2.4 配置導航規則172
8.4.2.5 部署和運行示例應用程式172
第9章 JSF與應用程式模型層的集成174
9.1 JSF作為表現層框架174
9.1.1 JSF結構回顧174
9.1.2 Backing Bean扮演的角色174
9.1.3 編寫Backing Bean代碼時的
不良實踐174
9.2 登錄示例應用程式175
9.2.1 示例登錄套用的需求分析175
9.2.2 登錄示例套用的界面175
9.2.3 目錄結構176
9.2.4 業務服務接口176
9.2.5 業務服務實現176
9.2.6 示例套用的Backing Bean178
9.2.7 示例中的頁面檔案179
9.2.8 在Faces配置檔案中配置導航
規則180
9.2.9 在Faces配置檔案中配置託管
Bean180
9.2.10 部署和運行示例套用181
9.3 JSF中的控制反轉(IoC)182
9.3.1 登錄示例套用的不足182
9.3.2 控制反轉(IoC)及依賴注入
(DI)182
9.3.2.1 控制反轉及依賴注入簡介182
9.3.2.2 依賴注入的形式183
9.4 在JSF應用程式中使用依賴注入185
9.4.1 在Backing Bean使用type2型
依賴注入185
9.4.2 在Faces配置檔案中配置依賴關係186
9.4.3 部署和運行示例套用187
第10章 JSF的事件處理188
10.1 JSF事件及事件監聽器模型188
10.1.1 事件類188
10.1.2 監聽器類189
10.1.3 事件廣播及處理189
10.2 JSF中的事件分類190
10.2.1 值改變事件190
10.2.2 動作事件190
10.2.3 階段事件190
10.3 事件處理示例190
10.3.1 值改變事件的處理示例190
10.3.1.1 示例套用的頁面檔案191
10.3.1.2 在Backing Bean中編寫處理
值改變事件方法192
10.3.1.3 在Faces配置檔案中配置
Backing Bean192
10.3.1.4 部署和運行192
10.3.1.5 用專門的監聽器來處理值改
變事件193
10.3.2 動作事件的處理示例194
10.3.2.1 在頁面中使用命令超連結194
10.3.2.2 在Backing Bean中編寫事
件處理方法195
10.3.2.3 部署和運行示例套用196
10.3.3 Immediate組件使用示例197
10.3.3.1 在頁面上使用Immediate
組件197
10.3.3.2 在Backing Bean中編寫
事件監聽器方法199
10.3.3.3 觀察示例套用的運行效果199
第11章 JSF中的轉換201
11.1 JSF的轉換模型201
11.1.1 什麼是JSF中的轉換201
11.1.2 JSF中為什麼需要轉換201
11.1.3 JSF中何時發生轉換202
11.1.4 JSF的轉換器接口202
11.2 使用JSF的標準轉換器203
11.2.1 JSF的標準轉換器203
11.2.2 使用標準轉換器的一般方式203
11.3 自動轉換方式示例204
11.3.1 在註冊頁面增加一個表示年齡
的文本輸入框204
11.3.2 在註冊成功的頁面上顯示年齡204
11.3.3 Backing Bean年齡屬性的數據
類型為int204
11.3.4 示例套用的業務數據對象205
11.3.5 示例套用中的自定義異常206
11.3.6 示例套用的業務服務206
11.3.7 示例套用的Faces配置206
11.3.8 自動轉換的效果207
11.3.8.1 自動轉換失敗的效果207
11.3.8.2 自動轉換成功的效果207
11.4 使用組件標籤的屬性208
11.5 使用轉換器標籤208
11.6 Java中的日期與時間209
11.6.1 Java中的Date類209
11.6.2 Calendar類210
11.6.3 GregorianCalendar類210
11.6.4 日期、時間的格式化211
11.6.5 訪問資料庫時使用的日期類211
11.7 日期時間轉換器示例212
11.7.1 建立示例套用的目錄結構212
11.7.2 新建一個可以輸入日期的頁面213
11.7.3 在頁面上使用顯示日期的組件213
11.7.4 Backing Bean中的日期型屬性213
11.7.5 業務對象中的日期屬性214
11.7.6 業務服務接口中的日期型參數215
11.7.7 在業務服務實現中處理日期型
數據215
11.7.8 更改示例套用的Faces配置216
11.7.9 日期轉換的效果217
11.8 數字轉換器218
11.9 使用自定義轉換器218
11.9.1 創建自定義轉換器218
11.9.2 註冊自定義轉換器220
11.10 自定義的轉換器示例220
11.10.1 建立示例套用的目錄結構220
11.10.2 示例套用的Backing Bean220
11.10.3 新建自定義格式的業務對象222
11.10.4 修改原業務對象223
11.10.5 在業務服務接口的方法中
加入新參數223
11.10.6 更改業務服務實現類224
11.10.7 在Faces中配置自定義轉換器225
11.10.8 在用戶註冊頁面上使用自定義
轉換器225
11.10.9 在註冊成功頁面上使用自定義
轉換器226
11.10.10 檢驗自定義轉換器的使用
效果226
第12章 JSF中的驗證227
12.1 JSF的驗證模型227
12.1.1 驗證器類227
12.1.2 驗證器的註冊227
12.1.3 驗證處理過程228
12.1.4 標準驗證器實現228
12.2 使用標準驗證器示例229
12.2.1 建立示例套用目錄結構229
12.2.2 在頁面中使用標準驗證器229
12.2.3 部署和運行應用程式230
12.3 正則表達式簡介231
12.4 使用自定義驗證器示例233
12.4.1 建立示例套用目錄233
12.4.2 創建自定義驗證器類234
12.4.3 在Faces配置檔案中註冊驗證器235
12.4.4 在頁面中使用自定義驗證器235
12.4.5 自定義驗證器的使用效果235
12.5 使用Backing Bean的驗證方法237
12.5.1 建立示例套用目錄結構237
12.5.2 在Backing Bean中編寫驗證
方法237
12.5.3 在Faces配置中刪除自定義驗
證器238
12.5.4 在頁面中引用驗證方法238
12.5.5 運行應用程式查看驗證效果239
第13章 JSF的國際化編程240
13.1 問題的由來240
13.2 字元集的基礎知識240
13.2.1 計算機表示字元的方式與字
符集240
13.2.2 字元集的發展241
13.2.3 UTF-8字元集242
13.3 Java及Web中的編碼243
13.3.1 Java中的編碼243
13.3.2 Web中的編碼243
13.4 中文亂碼的幾種表現形式及成因淺析244
13.4.1 字元變問號244
13.4.2 部分漢字是亂碼247
13.4.3 顯示亂碼(有些是漢字但並
不是你預期的)248
13.4.4 讀寫資料庫時出現亂碼250
13.5 JSF國際化編程的思路250
13.6 JSF國際化編程的實現251
13.6.1 支持國際化編程的套用的基本
特徵251
13.6.2 Java平台的本地化類251
13.6.3 資源束252
13.6.4 日期與數字的格式化253
13.7 登錄示例程式的國際化與本地化254
13.7.1 收集區域敏感數據255
13.7.2 製作預設資源檔案255
13.7.3 改編頁面檔案256
13.7.4 編寫和配置Servlet過濾器258
13.7.5 構建和運行應用程式259
13.7.6 編寫中文資源檔案259
13.7.7 檢驗應用程式的運行效果260
13.8 圖片的國際化261
13.8.1 在項目中建立存放圖片的目錄262
13.8.2 製作對應各種不同語言的圖片262
13.8.3 在頁面檔案上添加圖片262
13.8.4 在資源束檔案中加上對應圖片
鍵-值對263
13.8.5 在build.xml中添加拷貝圖片的
內容263
13.8.6 觀察應用程式的運行結果264
13.9 異常訊息的國際化264
13.9.1 異常訊息的種類265
13.9.2 標準異常訊息265
13.9.3 自定義異常訊息的處理過程266
13.10 異常訊息國際化示例266
13.10.1 在資源檔案中加上訊息的
鍵-值對266
13.10.2 創建訊息工廠267
13.10.3 業務模型中的訊息處理方式267
13.10.4 Backing Bean中的訊息處理
方式267
13.10.5 示例套用的運行效果269
13.11 日期的國際化示例269
13.11.1 示例套用要實現的效果269
13.11.2 建立示例套用的目錄結構269
13.11.3 修改頁面檔案270
13.11.4 準備資源檔案270
13.11.5 修改業務對象271
13.11.6 修改業務模型中的類檔案271
13.11.7 修改Backing Bean272
13.11.8 國際化編程後的效果檢驗274
第14章 JSF與Tiles框架的集成275
14.1 頁面布局的幾種可選方案275
14.1.1 使用JSP指令的方法275
14.1.2 使用JSP標籤279
14.1.3 使用Tiles框架279
14.2 Tiles框架簡介280
14.3 用Tiles布局頁面的示例280
14.3.1 建立示例套用的目錄結構280
14.3.2 下載和安裝與Tiles有關的庫
檔案280
14.3.3 編寫tiles的配置檔案281
14.3.4 在web.xml檔案中配置tiles281
14.3.5 編寫布局模板檔案282
14.3.6 編寫布局的各組成部分的頁面
檔案283
14.3.7 編寫套用模板的頁面檔案284
14.3.8 示例套用的運行效果284
14.4 用Tiles布局Frame頁面285
14.4.1 Frame頁面的基礎知識285
14.4.2 一個簡單的Frame頁面例子286
14.4.3 讓Frame頁面居中顯示288
14.5 用Tiles布局Frame頁面的示例289
14.5.1 建立示例套用的目錄結構289
14.5.2 新建圖片檔案289
14.5.3 更改tiles配置289
14.5.4 新建frame布局模板頁面289
14.5.5 新建用於導航的選單頁面290
14.5.6 新建帶frame的頁面291
14.5.7 應用程式的運行效果291
第15章 JSF訪問資料庫293
15.1 MS SQL Server資料庫的安裝293
15.1.1 SQL Server資料庫的安裝過程293
15.1.2 資料庫補丁包的安裝296
15.2 JDBC簡介297
15.2.1 JDBC的發展歷程297
15.2.2 JDBC的結構和工作原理298
15.2.3 JDBC驅動器300
15.2.4 JDBC的使用場景300
15.2.5 兩層模式300
15.2.6 三層模式301
15.2.6.1 客戶層301
15.2.6.2 中間層301
15.2.6.3 數據源層302
15.3 數據訪問對象模式簡介302
15.4 讓登錄程式訪問資料庫中用戶信息302
15.4.1 建立資料庫302
15.4.2 建立資料庫表303
15.4.3 在表中輸入實驗用的數據304
15.4.4 下載和安裝JDBC驅動程式304
15.4.5 建立應用程式的目錄結構305
15.4.6 增加應用程式訪問資料庫的
部分305
15.4.7 修改應用程式的業務邏輯部分307
15.4.8 修改backing bean使其使用
新的service308
15.4.9 創建與數據訪問相關的自定義
異常類309
15.4.10 修改資源檔案,添加新的
鍵-值對311
15.4.11 配置應用程式311
15.4.12 運行應用程式313
第16章 應用程式中的異常處理315
16.1 Java異常的分類315
16.2 Java處理異常的一般方法317
16.3 創建自己的異常子類320
16.4 成鏈異常321
16.5 JSF應用程式的異常處理322
第17章 應用程式的日誌324
17.1 為什麼要記日誌324
17.2 用什麼記日誌324
17.3 怎么記日誌324
17.4 在登錄示例程式中記日誌326
17.4.1 建立示例套用目錄結構326
17.4.2 下載通用日誌包326
17.4.3 下載日誌器實現Log4J327
17.4.4 寫日誌有關的配置檔案327
17.4.5 創建一個空的日誌檔案329
17.4.6 編寫訪問日誌接口的應用程式
代碼329
17.4.7 部署和運行應用程式331
第18章 JSF與AJAX集成334
18.1 AJAX概述334
18.1.1 什麼是AJAX334
18.1.2 AJAX的原則334
18.1.3 AJAX包含那些技術334
18.1.4 AJAX的工作原理335
18.2 Ajax4jsf336
18.2.1 Ajax4jsf概述336
18.2.2 Ajax4jsf工作原理336
18.2.3 下載和安裝Ajax4jsf337
18.3 示例應用程式338
18.3.1 建立應用程式的目錄結構339
18.3.2 需要的庫檔案339
18.3.3 在web.xml檔案中添加Ajax4jsf
的過濾器339
18.3.4 在註冊頁面中使用Ajax4jsf
標籤339
18.3.5 在Backing Bean中添加動作
監聽器方法340
18.3.6 部署和運行套用340
第19章 ORM及其Hibernate實現341
19.1 ORM簡介341
19.1.1 對象模型與關係範例的失配341
19.1.1.1 粒度問題341
19.1.1.2 子類型問題341
19.1.1.3 標識符問題342
19.1.1.4 關聯問題342
19.1.1.5 對象圖導航問題343
19.1.2 集成層的可選方案343
19.1.2.1 使用JDBC343
19.1.2.2 使用EJB343
19.1.2.3 使用面向對象的資料庫
系統344
19.1.2.4 使用對象/關係映射
(ORM)344
19.1.3 ORM面臨的問題344
19.2 Hibernate的結構簡介344
19.2.1 核心應用程式編程接口345
19.2.2 回調接口347
19.2.3 擴展接口348
19.3 映射對象348
19.3.1 基本映射348
19.3.2 標識的屬性349
19.3.3 標識生成器350
19.3.4 多對一映射/一對多映射350
19.3.5 多對一中的類示例350
19.3.6 多對一/一對多的表間關係353
19.3.7 多對一/一對多的映射檔案353
19.3.8 多對一元素的主要屬性354
19.3.9 集合映射355
19.3.10 外鍵元素355
19.3.11 一對多元素的主要屬性355
19.3.12 多對多映射355
19.4 檢索對象357
19.4.1 Hibernate查詢語言357
19.4.2 條件查詢358
19.4.3 SQL查詢358
19.5 報表查詢358
第20章 JSF與Hibernate的集成360
20.1 Hibernate的配置360
20.1.1 Hibernate的下載360
20.1.2 需要的庫檔案361
20.1.3 持久化類的映射檔案361
20.1.4 Hibernate配置檔案362
20.2 用Hibernate重寫登錄程式的資料庫
訪問部分362
20.2.1 輔助工具類362
20.2.2 項目使用的資料庫363
20.3 具體的實現363
20.3.1 創建應用程式項目目錄363
20.3.2 修改build.xml檔案及調整部分
配置檔案的目錄363
20.3.3 準備必要的Java庫檔案363
20.3.4 創建輔助工具類363
20.3.5 創建持久類及映射檔案364
20.3.6 創建Hibernate配置檔案364
20.3.7 創建DAO接口365
20.3.8 創建DAO的Hibernate實現類366
20.3.9 創建套用服務的Hibernate
實現類367
20.3.10 修改Backing Bean368
20.3.11 用ANT構建和部署應用程式368
20.3.12 運行應用程式369
20.4 對應用程式的回顧369
20.4.1 關於Hibernate Session的關閉
問題369
20.4.2 關於示例程式中的修改問題369
20.4.3 關於DAO代碼簡化的問題370
20.5 進一步簡化DAO代碼370
20.5.1 DAO中的樣板代碼370
20.5.2 去除樣板代碼的方法371
20.5.3 部署和運行新項目373
第21章 JSF與Spring和Hibernate
的集成374
21.1 Spring的組成374
21.2 Spring中的IoC以及用Spring管理JSF
託管bean375
21.2.1 JSF與Spring集成的原理375
21.2.2 集成所需要做的配置工作375
21.2.3 早期版本的JSF參考實現在
實際集成中會遇到的問題377
21.2.4 項目使用的資料庫378
21.3 用JSF、Spring和Hibernate編寫註冊
登錄示例378
21.3.1 建立應用程式項目的目錄結構378
21.3.2 準備Spring庫檔案378
21.3.3 準備JSF與Spring的膠代碼庫
檔案380
21.3.4 創建數據訪問接口381
21.3.5 創建數據訪問實現類381
21.3.6 創建業務服務接口382
21.3.7 創建業務服務實現類382
21.3.8 創建持久化類及映射檔案384
21.3.9 創建Backing Bean385
21.3.10 創建註冊頁面及註冊成功頁面385
21.3.11 在Spring上下文中配置服務及
數據訪問對象386
21.3.12 配置Faces上下文388
21.3.13 配置web.xml388
21.3.14 構建、部署及運行示例套用
程式389
第22章 使用Eclipse和MyEclipse工具390
22.1 下載與配置Eclipse和MyEclipse390
22.1.1 下載IDE軟體390
22.1.2 配置開發環境391
22.2 用IDE開發示例394
22.2.1 建立新項目394
22.2.2 加入JSf Capabilities396
22.2.3 加入Spring Capabilities397
22.2.4 加入Hibernate Capabilities398
22.2.5 業務層與集成層對象的編寫與
配置402
22.2.5.1 引入訪問資料庫所需要的
包檔案402
22.2.5.2 配置數據源403
22.2.5.3 創建持久化對象及其映射
檔案404
22.2.5.4 修改Hibernate SessionFactory的配置405
22.2.5.5 創建數據訪問對象的接口及
實現類408
22.2.5.6 創建套用服務接口及實現類
和自定義異常類408
22.2.5.7 配置其他對象408
22.2.6 應用程式表示層對象的編寫與
配置409
22.2.6.1 配置Application410
22.2.6.2 配置和生成Backing Bean410
22.2.6.3 在Backing Bean中注入
依賴411
22.2.6.4 在Backing Bean中編寫動作
方法412
22.2.6.5 可視化方式製作頁面檔案412
22.2.6.6 配置導航規則412
22.2.7 配置應用程式的部署描述器
檔案web.xml413
22.2.8 部署和運行項目415
22.3 用IDE打開示例套用的方法417
22.4 在IDE中使用Hibernate的反向工程417
22.4.1 創建一個新項目417
22.4.2 創建資料庫417
22.4.3 創建資料庫瀏覽器視窗418
22.4.4 建立必要的包420
22.4.5 加入JSF和Spring的
Capabilities420
22.4.6 加入Hibernate的Capabilities420
22.4.7 套用反向工程生成類和配置
檔案423
22.4.8 反向工程生成的檔案樣例425
第23章 AOP及事務管理427
23.1 AOP簡介427
23.1.1 什麼是AOP427
23.1.1.1 對AOP的一些常見的
誤解427
23.1.1.2 AOP的一些常用術語428
23.1.2 Spring實現的AOP428
23.1.2.1 Spring實現的AOP的
特點428
23.1.2.2 Spring中AOP的套用429
23.2 事務簡介429
23.2.1 事務的基本屬性429
23.2.2 Spring的事務策略429
23.2.3 Spring支持的事務隔離度430
23.2.4 Spring支持的事務傳播類型430
23.3 事務管理示例431
23.3.1 示例套用要演示的情形431
23.3.2 資料庫表的建立431
23.4 沒有事務管理的例子432
23.4.1 編寫持久化對象的類檔案432
23.4.2 編寫映射檔案433
24.4.3 編寫DAO接口434
23.4.4 編寫DAO實現類435
23.4.5 編寫業務服務接口436
23.4.6 編寫沒有事務處理的業務服務436
23.4.7 編寫沒有事務管理的Spring
配置438
23.4.8 示例套用的Backing Bean439
23.4.9 配置web.xml441
23.4.10 應用程式的頁面檔案441
23.4.11 示例套用的運行效果441
23.5 編程式事務管理的例子442
23.5.1 編程式事務管理的一般方法442
23.5.2 編寫編程式事務的業務服務442
23.5.3 編寫編程式事務管理的Spring
配置444
23.5.4 修改web.xml445
23.5.5 套用的運行效果445
23.6 聲明式事務管理的例子445
23.6.1 聲明式事務管理的方法445
23.6.2 在Spring的配置檔案中聲明
事務446
22.6.3 修改web.xml447
23.6.4 套用的運行效果447
第24章 許可權系統示例應用程式448
24.1 基於角色的訪問控制448
24.2 應用程式的界面448
24.2.1 登錄界面449
24.2.2 管理員用戶界面449
24.2.3 普通用戶界面450
24.3 資料庫設計451
24.3.1 表的結構451
24.3.2 表之間的關係454
24.4 持久化對象455
24.4.1 持久化對象的類檔案455
24.4.2 持久化對象的映射檔案461
24.5 數據訪問對象463
24.5.1 數據訪問對象接口464
24.5.2 數據訪問對象實現465
24.6 業務服務469
24.6.1 業務服務接口469
24.6.2 業務服務實現470
24.6.3 編程式事務在示例中的套用473
24.7 Backing Bean474
24.7.1 使用Backing Bean的策略474
24.7.2 示例Backing Bean的編碼475
24.7.3 安全退出系統的動作478
24.7.4 在Backing Bean中驗證Email
地址478
24.7.5 在Backing Bean中引用其他
Backing Bean480
24.8 配置檔案482
24.8.1 應用程式部署描述器檔案482
24.8.2 JSF配置檔案483
24.8.3 Spring配置檔案486
24.8.4 Hibernate的配置檔案489
24.9 頁面檔案489
24.9.1 index.jsp489
24.9.2 登錄頁面檔案489
24.9.3 Frameset檔案490
24.9.4 樹型選單檔案491
24.9.5 添加新用戶的頁面檔案492
24.9.6 指派用戶角色的頁面檔案492
24.9.7 安全登出系統的頁面檔案495
24.9.8 顯示操作結果的頁面檔案495
24.9.9 頁面間的導航關係496
24.10 輔助檔案496
24.10.1 字元集過濾器類檔案496
24.10.2 資源檔案497
24.10.3 訊息工廠類檔案497
24.11 怎樣讓示例程式運行起來497
24.11.1 創建示例資料庫497
24.11.2 更改配置檔案中的資料庫密碼498
24.11.3 用IDE部署示例套用498
24.12 為已有的JSF項目增加AJAX支持498
24.12.1 導入庫檔案498
24.12.2 更改頁面檔案498
24.12.3 更改Backing Bean500
24.12.4 更改業務服務接口及實現501
24.12.5 更改應用程式部署描述器檔案502
第25章 辦公用品管理系統示例程式503
25.1 示例程式的需求分析503
25.1.1 需求分析簡述503
25.1.2 用例(Use Case)圖503
25.1.3 用例文檔的書寫504
25.1.4 系統需要用到的頁面505
25.1.5 業務規則的說明506
25.1.6 其他要求506
25.2 示例程式的架構設計506
25.2.1 多層架構506
25.2.2 選擇合適的技術506
25.2.3 表示層設計507
25.2.4 業務邏輯層設計507
25.2.5 數據映射層設計507
25.2.6 資料庫設計507
25.3 示例程式的實現508
25.3.1 表示層實現508
25.3.2 業務層實現510
25.3.3 數據映射層實現512
25.4 其他實用功能的實現512
25.4.1 檔案上傳512
25.4.1.1 Java中的輸入輸出與流512
25.4.1.2 檔案的路徑與目錄512
25.4.1.3 myfaces的檔案上傳標籤513
25.4.2 檔案上傳的實現513
25.4.3 處理分頁518
25.4.4 傳送電子郵件521
25.4.4.1 Spring對電子郵件的抽象521
25.4.4.2 編寫Backing Bean521
25.4.4.3 配置郵件傳送器和郵件
訊息523
25.4.4.4 編寫傳送郵件的方法524
25.4.4.5 傳送郵件時需要加入的
庫檔案525
25.5 示例應用程式的測試525
25.5.1 測試簡介525
25.5.2 測試的分類526
25.5.3 模擬測試與集成測試526
25.5.4 常用的測試框架JUnit526
25.5.5 測試用例的運行方式527
25.5.6 數據訪問層測試示例528
25.5.6.1 創建測試基類528
25.5.6.2 創建測試具體類529
25.5.6.3 修改嚮導生成的測
試類檔案531
25.5.6.4 測試過程532
25.5.6.5 在IDE中測試易出現
的問題533
25.6 部署和運行應用程式533
25.6.1 資料庫的建立533
25.6.2 配置檔案中的參數更改534
第26章 應用程式的安全性535
26.1 應用程式的安全性簡介535
26.2 許可權管理示例程式的安全性考慮535
26.2.1 控制對資源的訪問535
26.2.2 保護敏感數據536
26.3 防止用戶繞過登錄的方法537
26.3.1 登錄時保存信息到
HttpSession中537
26.3.2 製作驗證HttpSession中內容的
頁面539
26.3.3 在需要保護的頁面前部包含驗證
頁面539
26.4 Java密碼架構和加密服務提供者540
26.4.1 Java密碼架構540
26.4.2 加密服務提供者541
26.4.3 Java密碼架構的使用方式541
26.5 訊息摘要與口令認證541
26.5.1 什麼是訊息摘要541
26.5.2 口令的加密存儲542
26.5.3 加密後的口令的驗證543
26.6 許可權管理套用的口令加密示例544
26.6.1 新建示例項目544
26.6.2 更改人員表中口令欄位的數據
類型544
26.6.3 改變持久化類中口令欄位的數據
類型544
26.6.4 更改映射檔案中口令欄位的
數據類型545
26.6.5 在業務服務實現中增加口令
加密方法546
26.6.6 在業務服務實現中增加口令
驗證方法547
26.6.7 更改業務服務實現的註冊新
用戶方法548
26.6.8 更改業務服務實現的登錄方法549
26.6.9 更改業務服務實現的用戶
改變口令方法551
26.6.10 在資料庫表中查看口令數據552
VI
JSF第一步——JSF+Spring+Hibernate+AJAX編程實踐
VII
目 錄