編輯推薦
比Struts 2官方文檔還要正確的知識體系講解,本書最大的特點:深入 詳盡 解惑,秉承作者一貫的讓讀者知其然而知其所以然的寫作思路,循序漸進的講解、恰如其分的示例、完美的知識演繹。
內容簡介
2006年,WebWork與Struts這兩個優秀的Java Web框架的開發團隊,開始合作開發一個新的、結合了WebWork與Struts的優點,並且更加優雅、擴展性更強的框架,命名為“Struts 2”,並於2007年上半年推出了Struts 2的正式版本。本書講解的是Struts 2中號稱“最佳可用”的2.0.11版本。
本書最大的特點就是深入、詳盡、解惑。
深入 本書深入剖析了Struts 2內部的運行機制,在知識的講解上,結合了Web程式的運行機制與Struts 2框架的內部工作機制,以幫助讀者更深入地掌握基於Struts 2的Web開發。
詳盡 本書內容詳盡,幾乎涵蓋了Struts 2中所有的知識點。本書力求在每一個知識點的講解上都清晰明了,而不是簡單地一帶而過,讓讀者對所學的知識理解得更為透徹。
解惑 本書秉承作者一貫的讓讀者知其然而知其所以然的寫作風格,在知識的講解上,不光讓讀者知道怎么用這個知識,還讓讀者知道為什麼要這么用。在問題的分析解決上,從根源入手,幫助讀者了解問題發生的根本原因,培養讀者發現問題、分析問題、解決問題的能力。
本書語言生動、通俗易懂、講解細緻,手把手地教你學習完成示例程式。全書給出了大量的示例,相信通過這些示例的學習,讀者一定可以更好、更快地掌握Struts 2的套用開發。
作者簡介
孫鑫,著名IT培訓專家,具有多年的軟體開發和教育培訓經驗,曾主講過的課程包括C/C++、VC++、COM\DCOM\COM+、SQL Server、Oracle、Java、J2EE等。2004年曾推出《Java無難事》和《VC++深入編程》教學視頻,獲得了強烈的反響,在網路上掀起了一股視頻教學的風潮,無數熱愛編程的學員通過這兩套視頻走上了軟體開發的道路。 2006年5月和6月,相繼推出了《Java Web開發詳解》和《VC++深入詳解》兩本著作。近年來一直從事高端程式語言培訓和技術書籍的撰寫,於2004年7月創建了程式設計師之家網站
目錄
第1章 認識Struts 2
1.1 什麼是Web框架
1.1.1 模型1
1.1.2 模型2和MVC
1.1.3 Web框架的誕生
1.2 從Struts 1到Struts 2
1.2.1 其他Web框架
1.2.2 Struts 1的缺點
1.2.3 市場與技術的結合——Struts 2的誕生
1.3 準備開發環境
1.4 小結
第2章 Struts 2初體驗
2.1 下載和安裝Struts 2
2.2 使用Subversion來獲取
2.2 Struts 2的原始碼
2.3 Hello World程式
2.4 Struts 2項目開發總結
2.5 小結
第3章 由“登錄”開始
3.1 使用領域對象接收用戶輸入
3.2 使用ModelDriven action
3.3 使用action的屬性接收用戶輸入
3.4 訪問request、session和application對象
3.4.1 與Servlet API解耦的訪問方式
3.4.2 與Servlet API耦合的訪問方式
3.5 小結
第4章 Struts 2架構剖析
4.1XWork2——Struts 2的基礎
4.2 Struts 2的體系結構
4.3 Struts 2框架的調用流程
4.4 小結
第5章 Struts 2配置詳解
5.1 Struts 2的配置檔案
5.1.1 web.xml
5.1.2 struts.properties
5.1.3 struts-default.xml
5.1.4 struts.xml
5.1.5 struts-plugin.xml
5.1.6 靜態內容
5.2 struts.xml配置詳解
5.2.1 Bean配置
5.2.2 常量(Constant)的配置
5.2.3 包(Package)配置
5.2.4 名稱空間(Namespace)配置
5.2.5 包含(Include)配置
5.2.6 攔截器(interceptor)配置
5.2.7 Action配置
5.2.8 Result配置
5.2.9 異常(Exception)配置
5.3 配置Action
5.3.1 Action映射
5.3.2 使用method屬性
5.3.3 動態方法調用
5.3.4 模擬Struts 1的ForwardAction
5.3.5 默認的action
5.3.6 通配符映射
5.4 配置Result
5.4.1 結果映射
5.4.2 結果類型
5.4.3 常用結果類型
5.4.3.1 dispatcher結果類型
5.4.3.2redirect結果類型
5.4.3.3 redirectAction結果類型
5.4.3.4 plainText結果類型
5.4.4 全局結果
5.4.5 動態結果
5.4.6 在結果配置中使用參數
5.5 異常處理
5.6 使用註解配置Action
5.6.1 與Action配置相關的註解
5.6.2 使用註解配置Action的注意事項
5.6.3 使用註解配置Action的實例
5.7 小結
第6章 準備用戶註冊程式
6.1 創建資料庫表
6.2 編寫用戶註冊程式
6.3 解決中文亂碼問題
6.4 Struts 2對依賴注入的支持
6.4.1 Spring外掛程式
6.4.2 在用戶註冊程式中集成Spring
6.5 小結
第7章 Struts 2中的OGNL
7.1 為什麼使用OGNL
7.2 OGNL基礎
7.3 OGNL表達式
7.3.1 常量
7.3.2 操作符
7.3.3 訪問JavaBean的屬性
7.3.4 調用方法
7.3.5 調用靜態方法和靜態欄位
7.3.6 調用構造方法
7.3.7 索引訪問
7.3.7.1 數組和列表索引
7.3.7.2 JavaBean的索引屬性
7.3.7.3 OGNL對象索引屬性
7.3.8 對集合進行操作
7.3.8.1 創建集合
7.3.8.2 集合的偽屬性
7.3.8.3 投影(projection)
7.3.8.4 選擇(selection)
7.3.9 lambda表達式
7.4 OGNL的類型轉換
7.5 Struts 2在OGNL基礎上的增強
7.5.1 值棧(ValueStack)
7.5.2 [N]語法
7.5.3 top關鍵字
7.5.4 訪問靜態成員
7.5.5 值棧中的Action實例
7.5.6 Struts 2中的命名對象
7.6 與JSP 2.1的衝突
7.7 OGNL表達式的綜合套用
7.8 小結
第8章 Struts 2的標籤庫
8.1 引用Struts 2的標籤庫
8.2 標籤的語法
8.3 通用標籤
8.3.1 數據標籤
8.3.1.1 property標籤
8.3.1.2 set標籤
8.3.1.3 push標籤
8.3.1.4 param標籤
8.3.1.5 bean標籤
8.3.1.6 action標籤
8.3.1.7 include標籤
8.3.1.8 url標籤
8.3.1.9I18N和text標籤
8.3.1.10 date標籤
8.3.1.11 debug標籤
8.3.2 控制標籤
8.3.2.1 if/elseif/else標籤
8.3.2.2 iterator標籤
8.3.2.3 append標籤
8.3.2.4 merge標籤
8.3.2.5 generator標籤
8.3.2.6subset標籤
8.3.2.7 sort標籤
8.4 UI標籤
8.4.1 模板和主題
8.4.1.1 Struts 2支持的模板引擎
8.4.1.2 載入模板
8.4.1.3 選擇主題
8.4.1.4 創建定製的主題
8.4.1.5 Struts 2內置的4種主題
8.4.2 表單標籤
8.4.2.1 表單標籤的公共屬性
8.4.2.2 表單標籤的name和value屬性
8.4.2.3 ID名分配
8.4.2.4 form標籤
8.4.2.5 textfield標籤
8.4.2.6 password標籤
8.4.2.7 textarea標籤
8.4.2.8 select標籤
8.4.2.9optgroup標籤
8.4.2.10 radio標籤
8.4.2.11 checkbox標籤
8.4.2.12 checkboxlist標籤
8.4.2.13 doubleselect標籤
8.4.2.14 combobox標籤
8.4.2.15 optiontransferselect標籤
8.4.2.16 updownselect標籤
8.4.2.17 hidden標籤
8.4.2.18 submit標籤
8.4.2.19 reset標籤
8.4.2.20 label標籤
8.4.2.21 token標籤
8.4.2.22 file標籤
8.4.2.23head標籤
8.4.3 非表單標籤
8.4.3.1 component標籤
8.4.3.2 a標籤
8.4.3.3 actionerror、actionmessage和fielderror標籤
8.5 使用Struts 2的表單標籤改寫用戶註冊程式中的註冊頁面
8.6 小結
第9章 國際化
9.1 國際化與本地化
9.1.1 Locale
9.1.2 資源包
9.1.3 訊息格式化
9.2 Struts 2對國際化的支持
9.2.1 Struts 2資源包的組織和載入方式
9.2.2 在訊息文本中使用參數
9.2.3 訪問國際化訊息
9.3 將用戶註冊程式國際化
9.4 錯誤訊息的國際化
9.5 Struts 2設定訪問用戶的locale的流程
9.6 為用戶註冊程式添加英文版本
9.7 小結
第10章 攔截器
10.1 攔截器的工作方式
10.2 編寫攔截器類
10.3 Struts 2自帶的攔截器
10.4 配置攔截器
10.5 PreResultListener接口
10.6 開發執行安全驗證的攔截器
10.7 使用攔截器註解
10.8 小結
第11章 類型轉換
11.1 傳統的數據處理過程
11.2 Struts 2對類型轉換的支持
11.2.1 使用OGNL表達式命名參數
11.2.2 Struts 2內置的類型轉換器
11.2.3 null屬性的處理
11.2.4 對List、Map和Set的支持
11.2.4.1 使用List來保存圖書信息的實例
11.2.4.2 使用Map來保存圖書信息的實例
11.2.5 使用Set來保存圖書信息的實例
11.3 創建自定義的類型轉換器
11.4 類型轉換錯誤的處理
11.5 使用類型轉換註解
11.5.1 TypeConversion註解
11.5.2 Conversion註解
11.5.3 Element註解
11.5.4 Key註解
11.5.5 KeyProperty註解
11.5.6 CreateIfNull註解
11.6 小結
第12章 對輸入數據進行驗證
12.1 手動驗證
12.1.1 在Action的execute()方法中進行驗證
12.1.2 在validateXxx()方法中進行驗證
12.1.3 在validate()方法中進行驗證
12.2 使用驗證框架
12.2.1 什麼是驗證器
12.2.2 註冊驗證器
12.2.3 開啟驗證
12.2.4 定義驗證規則
12.2.5 驗證檔案的查找順序
12.2.6 Struts 2內置的驗證器
12.2.7 在用戶註冊程式中使用驗證框架
12.2.8 確認密碼的驗證
12.2.9 短路驗證
12.2.10 開發自己的驗證器
12.2.11 使用visitor欄位驗證器復用驗證
12.2.12 同時使用驗證框架和手動驗證
12.2.13 客戶端JavaScript驗證
12.3 使用驗證註解
12.3.1 與驗證相關的註解
12.3.2 在用戶註冊程式中使用驗證註解
12.4 小結
第13章 使用freemarker作為表現層
13.1 FreeMarker簡介
13.1.1 FreeMarker是什麼
13.1.2 為什麼要使用FreeMarker
13.2 FreeMarker的工作原理
13.2.1 模板+數據模型=輸出
13.2.2 數據模型
13.2.2.1scalar變數
13.2.2.2 hash和sequence變數
13.2.2.3 方法變數
13.2.2.4 宏變數
13.2.3 模板
13.3 FreeMarker的語法和操作
13.3.1 準備工作
13.3.2 表達式
13.3.2.1 直接指定值
13.3.2.2 訪問變數
13.3.2.3 字元串操作
13.3.2.4 序列操作
13.3.2.5 散列操作
13.3.2.6 算術運算
13.3.2.7 比較操作
13.3.2.8 邏輯操作
13.3.2.9 內置函式
13.3.2.10 方法調用
13.3.2.11 缺少值處理操作符
13.3.2.12 操作符優先權
13.3.3 插值(interpolation)
13.3.4 指令
13.3.4.1 if/elseif/else指令
13.3.4.2 switch/case/default/break指令
13.3.4.3 list/break指令
13.3.4.4 include指令
13.3.4.5 import指令和名稱空間
13.3.4.6 assign指令
13.3.4.7 global指令
13.3.4.8 local指令
13.3.4.9 setting指令
13.3.4.10 macro、nested和return指令
13.3.4.11 function和return指令
13.3.4.12 noparse指令
13.3.4.13 escape和noescape指令
13.3.5 內置函式
13.3.5.1 操作字元串
13.3.5.2 運算元字
13.3.5.3 操作日期
13.3.5.4 操作布爾值
13.3.5.5 操作序列
13.3.5.6 操作散列
13.3.6 在模板中定義變數
13.4 Struts 2對FreeMarker的支持
13.4.1 FreeMarker標籤
13.4.2 在FreeMarker標籤中
13.4.2 使用動態屬性
13.4.3 JSP標籤支持
13.4.4 變數解析與內置變數
13.4.5 訪問Servlet/JSP範圍對象
13.4.6 類型轉換與本地化
13.5 在用戶註冊程式中使用FreeMarker來實現表現層
13.6 小結
第14章 使用sitemesh控制頁面布局
14.1 SiteMesh簡介
14.2 下載並安裝SiteMesh
14.3 感受SiteMesh
14.4 SiteMesh的工作原理
14.5 SiteMesh的標籤庫
14.5.1decorator標籤庫
14.5.2 page標籤庫
14.6 在裝飾器中獲取原始頁面的內容
14.7 裝飾器的組合套用
14.8 裝飾器映射器
14.9 Struts 2對SiteMesh的支持
14.10 在用戶註冊程式中使用SiteMesh進行頁面布局
14.10.1 使用JSP作為表現層
14.10.2 使用FreeMarker作為表現層
14.11 小結
第15章 避免表單重複提交與等待頁面
15.1 避免表單重複提交
15.1.1 避免表單重複提交的實現原理
15.1.2 Struts 2的實現方式
15.1.3 使用TokenInterceptor
15.1.4 使用TokenSessionStoreInterceptor
15.2 自動顯示等待頁面
15.2.1 ExecuteAndWaitInterceptor 的工作機制
15.2.2 使用ExecuteAndWaitInterceptor
15.3 小結
第16章 檔案上傳和下載
16.1 檔案上傳
16.1.1 基於表單的檔案上傳
16.1.2 檔案上傳格式分析
16.1.3 Struts 2對檔案上傳的支持
16.1.4 在Struts 2中實現檔案上傳
16.1.5 對檔案上傳進行更多的控制
16.1.6 多檔案上傳
16.2 檔案下載
16.2.1 Struts 2對檔案下載的支持
16.2.2 在Struts 2中實現檔案下載
16.2.3 改進下載程式
16.3 小結
第17章 在Struts 2中實現crud
17.1 準備工作
17.2 文章分類的CRUD操作
17.3 小結
第18章 Struts 2對Ajax的支持
18.1 Ajax快速入門
18.1.1 Ajax簡介
18.1.2 DOM
18.1.3XMLHTTPRequest
18.2 Ajax套用開發
18.2.1 使用XML作為數據的載體
18.2.2 使用JSON串作為數據的載體
18.2.2.1 理解JSON
18.2.2.2 下載JSON的Java實現
18.2.2.3 下載JSON的JavaScript腳本
18.2.2.4 使用JSON作為圖書信息的數據
18.2.2.2 格式
18.2.3 使用Dojo簡化Ajax套用的開發
18.2.3.1 Dojo概述
18.2.3.2 下載Dojo工具包
18.2.3.3 在ch18 Web程式中使用Dojo
18.3 在Struts 2中使用JSON外掛程式
18.3.1 JSON外掛程式
18.3.1.1 JSON外掛程式概述
18.3.1.2 定製序列化和反序列化
18.3.1.3 下載JSON外掛程式
18.3.2 使用JSON外掛程式的實例
18.4 Struts 2的Ajax標籤
18.4.1 Ajax標籤的基礎知識
18.4.1.1 共同的屬性
18.4.1.2 等待指示符
18.4.1.3 事件發布/訂閱模型
18.4.1.4 URL
18.4.1.5 阻止請求
18.4.2 使用Ajax標籤前的準備工作
18.4.3DIV標籤
18.4.4 submit標籤
18.4.5 a標籤
18.4.6 tabbedPanel標籤
18.4.7 autocompleter標籤
18.4.7.1 autocompleter標籤簡介
18.4.7.2 準備工作
18.4.7.3 autocompleter標籤用法詳析
18.4.8 tree和treenode標籤
18.4.8.1 用tree和treenode標籤構建靜態樹
18.4.8.2 用tree標籤構建動態樹
18.5 Struts 2對DWR的支持
18.6 小結
第19章 集成Hibernate和Spring
19.1 Hibernate簡介
19.2 Hibernate的下載和安裝
19.3 Hibernate快速入門
19.3.1 配置檔案
19.3.2 主要接口和類
19.3.3 總結
19.4 在Struts 2中集成Hibernate
19.5 集成Spring
19.6 小結
第20章 在Struts 2中開發Struts 1的Web套用
20.1 Struts 1外掛程式
20.1.1 Struts 1外掛程式的工作原理
20.1.2 使用Struts 1外掛程式
20.2 用戶註冊實例
20.2.1 準備工作
20.2.2 階段1:簡單的Struts 1 Action
20.2.3 階段2:帶有ActionForm的Struts 1 Action
20.2.4 階段3:添加手動驗證
20.2.5 階段4:使用CommonsValidator驗證框架
20.3 小結
附錄A Struts 1與Struts 2的對比
附錄B WebWork 2與Struts 2的對比
附錄C 從WebWork 2移植到Struts 2
試讀章節
第1章 認識Struts 2
本章要點
掌握MVC架構模式
 理解Web框架是什麼
 弄清楚Struts 1、Struts 2和WebWork三者之間的關係
 搭建本書的開發環境
Struts 2已經推出了穩定的版本,其先進的架構和設計思想,隨著時間的推移,相信會有越來越多的人開始使用Struts 2。基於Struts原有的人氣,加上採用了WebWork的設計架構,Struts 2必將成為最為流行的Web開發框架之一。
1.1 什麼是Web框架
隨著Internet的發展,基於HTTP協定和HTML標準的Web套用呈幾何數量級增長,人們在不知不覺中已經被網路悄悄地改變了生活。在網路普及之前,我們購買圖書要去書店,給親人匯錢要去郵局或者銀行,而現在,一切都是這么便捷,你可以在網上購買圖書、匯款、繳納電話費,你甚者可以為遠在他鄉的女朋友訂購一束玫瑰。各種各樣的網上業務豐富了我們的生活,節省了我們的時間,提高了我們的工作效率,改善了我們的生活品質。
支撐這些網上業務的就是各種各樣的Web套用,而這些Web套用又是用各種Web技術開發的。早期的Web套用主要是靜態頁面的瀏覽(如新聞的瀏覽),這些靜態頁面使用HTML語言來編寫。隨著網路的發展,很多線下業務開始向網上發展,基於Internet的Web套用也變得越來越複雜,不但要和資料庫互動,而且還要和用戶進行互動,由此衍生出了各種伺服器端頁面編寫技術,目前套用得較多的三種伺服器端頁面編寫技術就是ASP、JSP和PHP。
JSP通過在HTML頁面檔案中嵌入Java腳本代碼,從而實現動態網頁功能。HTML標籤負責頁面的布局和顯示外觀,java代碼負責提取動態數據,實現業務邏輯。對於簡單的套用,採用這種方式可以簡化開發難度,加快開發進度;然而,對於一些較大的套用,大量的HTML和Java代碼的混雜導致了頁面的顯示邏輯和業務邏輯交錯在一起,使得代碼的可讀性變差,維護難度增加,不利於HTML編輯人員和Java開發人員的分工協作。
為了分離頁面的表現邏輯和業務邏輯,使程式各部分的職責更加清晰,增強代碼的可維護性,SUN公司在JSP的早期規範中制定了兩種JSP開發模型,分別為模型1(Model 1)和模型2(Model 2)。