本教材圍繞開源的技術示范項目PetStore的實現介紹Java Web應用系統開發技術:HTML/CSS,JDBC,JSP,標簽庫(JSTL),Servlet,JavaBean,Filter,以及J2EE輕量級框架技術Hibernate,Struts2和Spring,并且融入面向對象程序設計思想和MVC設計模式。本教材從完成*簡單的靜態版本(HTML/CSS)開始,逐步迭代,到*后使用框架技術(Hibernate,Struts2和Spring)完成項目,難度推進合理。本教材適合作為本科、高職軟件技術及相關專業學生學習Java Web應用開發技術的教材,也可作為面向就業的實習實訓教材。本書提供配套的PPT課件、課后習題答案和程序源代碼,可在電子工業華信教育資源網免費下載。
項目教學法起源于美國,盛行于德國,尤其適合于職業技術教育。項目教學法成功與否,項目的選擇和設計非常重要。項目通常有3種來源:從企業引入的真實項目;教師自己設計的虛擬項目;教材上別人設計的項目。從企業引入的項目直接作為教學項目具有重點不突出、工作量過大和由于工期造成的代碼的可讀性無法保證的問題;由于很多教師沒有相關項目經驗,使得教師自己設計的虛擬項目和一些教材上的項目的代碼質量、實現的技術和方法與企業真實情況可能有很大的差距。
成功的開源軟件由眾多優秀程序員共同完成,包含了他們的最佳實踐經驗,其代碼質量、實現的技術和方法要明顯優于前面提到的3類項目。Java開源社區產生了許多有價值的開源項目,并且培養了一大批優秀的大師級編程專家,普通的開發者通過這些社區受益多多,就是很好的證明。
PetStore(寵物商店)是Java廠商SUN公司推出的用于展示 Java EE技術的示范項目,后來開源社區又推出了它的不同版本以示范各開源技術。該系統的不同版本是世界各地優秀程序員智慧的結晶,其中JPetStore設計和架構更優良,各層定義清晰,而Hibernate JPetStore增加了Hibernate框架技術,所以是當前學習Java Web應用開發相關技術的絕好例子。
一線授課教師與企業一線技術人員合作,對Hibernate JPetStore進行教學適用化改造,并作為貫穿本教材的案例。教材引導學生在實現該系統的過程中掌握Java Web應用系統的開發技術,獲得軟件開發經驗,具備開發實際軟件項目的能力,為成為合格的Java軟件工程師打下基礎。
本教材具有以下特色:
(1)選擇技術示范項目作為案例,真正實現了“夠用為度”。Java Web開發技術一直在不斷發展,Java Web應用開發技術要講解到什么程度,無疑其技術示范項目最有發言權。
(2)采用基于原型迭代的軟件開發方法的教學法,符合學生和課程的特點。與PetStore項目相關的有10個任務,從最簡單的HTML+CSS實現寵物分類展現模塊的靜態版本開始,每一章中講解的新技術和方法,都是建立在前一章的基礎之上的,從而使學生能夠循序漸進地學習,到最后能夠編寫出Java 高手編寫的代碼。
(3)“陳述性知識”和“過程性知識”并重。本教材選擇開源項目作為貫穿本教材的案例項目,學生不光可以學到相關技術(陳述性知識),還可以學到優秀程序員的經驗(過程性知識):優秀的代碼及編碼規范、設計技巧和編程模式。
(4)本教材在出版前,已經作為省精品課程和骨干校建設網絡課程的配套教材以校本教材的方式使用了4次,適用性好。新的版本會跟蹤新技術進行內容調整,并且每次使用后,作者都會根據使用效果排除教材的錯誤,對各章的內容展開方式和描述方式等進行便于自學和教學的調整,使學生方便自學,教師便于組織教學。
本教材試用版為廣東省精品資源共享課程和國家骨干校建設網絡課程《輕量級J2EE應用開發》的配套教材,經過多輪試用并進行了新技術更新、教學適用性的調整后才正式出版,而且相關課程資源持續更新,學習和教學時可以共享。
為教師授課提供方便,本書提供了多媒體課件、教學案例代碼和習題答案,可在電子工業出版社的華信教育資源網免費下載。
本教材由覃國蓉、周德偉、章慧云主編,毛樹生(企業)、葉建峰、廖先鋒副主編。其他參編人員有:張璐、任亞洲、陳亞敏、王晨曦、楊海紅、楊永濱、徐雪瓊、羅賢平、劉紅秀、許依達、毛越。
特別感謝:
Pprun,他是Hibernate JPetStore的實現者,本教材的案例項目就是在對Hibernate JPetStore改造的基礎上完成的,他還在開源技術的使用方面給予了我們很多寶貴經驗,正是有了Pprun這些開源技術愛好者的無私奉獻,Java技術才得以快速發展和廣泛使用。
廣東省精品課程團隊何濤老師、劉志軍老師、楊海紅老師給予的寶貴建議。
深圳信息職業技術學院2011軟件技術3-1班,2012軟件技術3-1班,2013軟件技術3-1和3-2班以及2014軟件技術3-1班對教材的試用和反饋。
編 者
2015年8月
第1章 背景知識 1
1.1 Web應用程序基本概念 1
1.1.1 什么是Web應用程序 1
1.1.2 靜態資源和動態資源 2
1.1.3 Web服務器 2
1.2 理解HTTP協議 3
1.2.1 HTTP請求消息格式 3
1.2.2 HTTP響應消息格式 5
1.3 Java Web應用開發技術 5
1.3.1 靜態網頁開發技術 5
1.3.2 動態網頁開發技術 6
1.3.3 SSH框架――Java輕量級企業應用解決方案 6
1.4 Servlet 7
1.5 JSP 9
1.6 Petstore項目簡介 10
作業 11
任務1 開發1個簡單的個人網站 12
第2章 使用HTML與CSS 14
2.1 HTML 14
2.1.1 HTML文檔結構 14
2.1.2 HTML標記的公共屬性 15
2.1.3 HTML常用標記 15
2.1.4 HTML表單 17
2.2 CSS 18
2.2.1 CSS分類 18
2.2.2 CSS的語法 19
2.2.3 CSS的選擇器 20
2.2.4 CSS的偽類 20
2.2.5 CSS的盒子模式 21
2.2.6 CSS的常用屬性 21
2.3 寵物分類展現的頁面及Web
應用開發步驟 23
2.3.1 寵物分類展現的頁面 23
2.3.2 使用MyEclipse開發Web
應用的步驟 24
2.4 寵物商城術語表 26
2.5 實現主頁面Main.html 27
2.5.1 主頁面的左邊導航條
部分代碼 27
2.5.2 主頁面的圖片導航代碼 28
2.5.3 通過層DIV標記對主頁
面Main.html進行布局 30
2.5.4 通過CSS設置效果 30
2.6 實現品種列表頁面主體部
分Category.html 32
作業 35
任務2 用HTML+CSS實現寵物商城
catalog模塊的靜態網頁版本 35
第3章 使用JDBC 37
3.1 catalog模塊數據準備 37
3.1.1 在MySQL中創建一個
數據庫petstore及其表 38
3.1.2 插入測試數據 39
3.1.3 為寵物商城系統創建一個
訪問數據庫petstore的用戶 41
3.2 JDBC數據庫編程 41
3.2.1 安裝MySQL 的驅動程序 42
3.2.2 JDBC應用程序的模板代碼 42
3.2.3 編寫JDBC應用程序修改
數據庫 44
3.2.4 編寫封裝創建數據庫
連接的類 46
3.3 POJO+DAO訪問數據庫的
編程模式 47
3.3.1 編寫表結構對應的
POJO類 48
3.3.2 設計訪問各表的DAO類 49
3.3.3 編寫訪問各表的DAO類 51
3.3.4 DAO類的使用 53
作業 54
任務3 為catalog模塊準備數據并完
成各表對應的DAO類 55
第4章 使用JSP 58
4.1 JSP語法元素 58
4.1.1 指令標簽 59
4.1.2 聲明標簽 60
4.1.3 腳本標簽 60
4.1.4 表達式標簽 61
4.1.5 動作標簽 62
4.1.6 注釋標簽 63
4.2 JSP網頁是Servlet 64
4.2.1 JSP網頁是Servlet 64
4.2.2 理解轉化單元 64
4.3 理解page指令標簽屬性 65
4.4 JSP常用內部對象 65
4.4.1 request與請求參數 66
4.4.2 out 67
4.4.3 session 67
4.5 catalog模塊網頁動態版本
開發準備 67
4.5.1 實現思路 67
4.5.2 在web.xml中設置歡迎頁面 68
4.6 用JSP實現Category.jsp 69
4.6.1 網頁頂部文件
IncludeTop.jsp 69
4.6.2 IncludeBottom.jsp 72
4.6.3 用JSP實現Category.jsp 72
作業 74
任務4 用JSP+POJO+DAO+DB實現
catalog模塊的動態網頁版本 77
第5章 使用JavaBean/ EL/JSTL/
Servlet/統一業務接口 79
5.1 JavaBean 79
5.1.1 JavaBean 簡介 79
5.1.2 在JSP中使用JavaBean 80
5.1.3 使用JavaBean的優勢 81
5.2 EL表達式 83
5.2.1 EL表達式簡介 83
5.2.2 在EL表達式中使用隱式
對象 84
5.2.3 EL屬性和集合訪問操作符 85
5.2.4 EL算術運算操作符 85
5.2.5 EL關系和邏輯運算符 86
5.3 使用Java標準標簽庫(JSTL) 87
5.3.1 JSTL標簽簡介 87
5.3.2 獲得和安裝JSTL 87
5.3.3 常用JSTL標簽 88
5.4 優化寵物分類展現頁面 94
5.4.1 使用<jsp:useBean>去掉
寵物分類展現頁面中的new
語句 94
5.4.2 用EL表達式和JSTL標簽
簡化寵物分類展現頁面
代碼 94
5.4.3 通過迭代使用EL表達式
點符號簡化對象屬性的
輸出 96
5.5 JSP Model1、JSP Model2及
Servlet 98
5.5.1 JSP Model1 98
5.5.2 Servlet 99
5.5.3 使用Servlet去掉PetStore寵物
分類展現頁面中的Java
代碼 99
5.6 使用統一的業務接口 102
5.6.1 設計一個系統共享的業務
接口PetStore 102
5.6.2 設計接口PetStore的實現
類PetStoreImpl 103
5.6.3 用PetStoreImpl實現寵物分
類展現各頁面 104
作業 105
任務5 使用JSTL/Servlet/EL/JavaBean
優化catalog的頁面代碼 108
第6章 使用過濾器 110
6.1 什么是過濾器 110
6.1.1 過濾器工作原理 111
6.1.2 過濾器的使用 111
6.1.3 過濾器的例子 112
6.2 過濾器編程接口 113
6.2.1 javax.servlet.Filter接口 114
6.2.2 javax.servlet.FilterConfig
接口 114
6.2.3 javax.servlet. FilterChain
接口 115
6.2.4 請求和響應包裝類 115
6.3 在web.xml中配置過濾器鏈 116
6.4 高級特性 118
6.4.1 使用響應包裝類 118
6.4.2 關于過濾器的重要內容 122
6.4.3 過濾器充當Controller的
優勢 122
作業 123
任務6 使用過濾器解決寵物商城項目
中的中文亂碼問題 124
第7章 實現購物車模塊 125
7.1 購物車的界面及流程 125
7.2 購物車實現思路 126
7.3 “添加到購物車”功能的實現 127
7.3.1 定義CartItem類 127
7.3.2 定義Cart類 128
7.3.3 創建CartServlet 相關屬性
和方法實現“添加到購物車”
功能并配置 130
7.3.4 購物車頁面/cart/Cart.jsp的
實現 132
7.4 “從購物車刪除”與“更新購物車”
的實現 134
7.4.1 實現removeItemFromCart
方法 134
7.4.2 實現updateCartQuantities
方法 134
作業 135
任務7 完成寵物商城的購物車功能 136
第8章 使用Hibernate 137
8.1 Hibernate簡介 137
8.2 使用Hibernate的準備工作 138
8.2.1 用菜單命令安裝配置
Hibernate開發環境 138
8.2.2 用DB Browser創建POJO
類和映射文件 140
8.3 用Hibernate訪問數據庫 147
8.3.1 Hibernate的編程模式 147
8.3.2 使用Hibernate實現數據的
插入 148
8.3.3 使用Hibernate實現數據的
刪除和修改 149
8.3.4 使用Hibernate實現數據的
加載 150
8.3.5 使用Hibernate實現數據的
查詢 151
8.4 使用Hibernate重寫DAO類 152
8.4.1 使用Hibernate重寫
BaseDao類 152
8.4.2 BaseDao類的使用 155
8.4.3 基于BaseDao改寫
CategoryDao類 155
作業 156
任務8 用Hibernate優化的寵物分類
展現DAO類 157
第9章 使用Struts 2 158
9.1 Struts 2工作原理 158
9.1.1 Struts 1的局限性及
Struts 2 158
9.1.2 Struts 2的工作流程 159
9.2 用Struts 2開發Web應用程序 159
9.2.1 安裝配置Struts 2 159
9.2.2 編寫Action類 161
9.2.3 配置Action類 162
9.2.4 編寫用戶界面(JSP
頁面) 164
9.3 Struts 2的其他重要知識點 165
9.3.1 Struts 2的標簽庫 165
9.3.2 Struts 2的類型轉換 165
9.3.3 Struts 2的數據驗證 166
9.3.4 Struts 2的攔截器 166
9.3.5 文件的上傳和下載 167
9.3.6 動態方法調用 167
9.3.7 防止表單的重復提交 167
9.3.8 Struts 2中Action與
Servlet容器的耦合 168
作業 168
任務9 使用 Struts 2優化寵物分類
展現功能 169
第10章 使用Struts 2進階 170
10.1 用戶登錄頁面和MVC模塊劃分 170
10.1.1 用戶登錄的頁面及流程 170
10.1.2 用戶登錄的實現思路 171
10.2 用戶登錄Model層的實現 172
10.2.1 創建數據庫表account,
生成對應POJO類及
Hibernate映射文件 172
10.2.2 創建表account對應數據庫
訪問類AccountDao 177
10.2.3 在PetStore及其實現類中
增加相關方法或成員
變量 177
10.3 用戶登錄View層的實現 178
10.3.1 用戶登錄頁面 178
10.3.2 用戶登錄成功頁面 179
10.3.3 用戶登錄失敗頁面 180
10.4 用戶登錄Controller層的實現 181
10.4.1 處理用戶登錄和退出
AccountAction的實現 182
10.5 為用戶登錄頁面增加數據驗證 184
10.6 用戶登錄功能的相關配置 185
10.6.1 在web.xml中配置Struts 2
過濾器 185
10.6.2 創建struts-account.xml
完成登錄退出 186
10.6.3 修改struts-account.xml
完成數據校驗 187
10.6.4 修改struts-account.xml完成
防止表單重復提交 187
作業 188
任務10 使用 Struts 2實現登錄注冊
賬戶編輯功能 188
第11章 使用Spring 189
11.1 Spring簡介 189
11.1.1 Spring簡介 189
11.1.2 Spring開發環境的安裝
配置 189
11.1.3 Spring的控制反轉和依賴
注入 192
11.2 使用Spring的依賴注入
重寫catalog模塊 192
11.2.1 用Spring管理PetStoreImpl
和各DAO類對象之間的
依賴 192
11.2.2 生成BaseAction傳遞
petstore對象 195
11.2.3 重寫已經完成的Action 196
11.3 使用Spring簡化Hibernate編程 196
11.3.1 繼承HibernateDaoSupport
實現BaseDao類 197
11.3.2 在Spring配置文件中
注入sessionFactory 198
11.3.3 使用import簡化配置
文件 200
11.4 增加分頁顯示功能 202
11.4.1 分頁顯示的實現思路 202
11.4.2 使用Spring 的PagedListHolder
進行分頁 203
11.4.3 修改相關Action 204
11.4.4 修改相關JSP頁面 206
作業 207
任務11 用Spring改寫Catalog和用戶
登錄模塊 208
參考文獻 210