本書采用“任務驅動”的編寫模式,由淺入深、循序漸進、全面系統(tǒng)地介紹了Java Web開發(fā)的相關知識。全書通過實際應用案例,幫助讀者鞏固所學的知識,以便更好地進行Java Web開發(fā)實踐。
本書共15章,內容涵蓋了Java Web開發(fā)基礎知識、Servlet接收GET請求數(shù)據(jù)、Servlet接收POST請求數(shù)據(jù)、Servlet生成HTTP響應數(shù)據(jù)、異步請求和異步響應、會話控制技術(Cookie與Session)、過濾器和監(jiān)聽器、MVC和JSTL、個人筆記系統(tǒng)的數(shù)據(jù)庫設計與實現(xiàn)、MySQL事務機制和JDBC的使用、layui和CKEditor的使用,以及個人筆記系統(tǒng)首頁模塊的設計與實現(xiàn)、用戶管理模塊的設計與實現(xiàn)、筆記管理模塊的設計與實現(xiàn)、其他功能模塊的設計與實現(xiàn)等項目實訓。
本書內容豐富、講解深入,適合初、中級Java Web開發(fā)人員閱讀,可以作為各類院校計算機相關專業(yè)的教材,也可作為廣大Java Web開發(fā)愛好者的實用參考書。
【對于學生】
1.入門容易、講解細致、便于自學
為了方便讀者理解晦澀難懂的知識點,編者親手繪制了大量圖片對相關知識點進行形象化表達。
2.循序漸進、由淺入深、知識詳盡
全書內容編排循序漸進、由淺入深、知識詳盡。學完本書的內容后,讀者可以掌握與Java Web相關的大部分知識,例如可以掌握Java Web三大組件知識、HTTP知識、異步請求與響應知識、JSP+JSTL知識、數(shù)據(jù)庫設計知識、事務管理知識、UI前端框架layui知識、CKEditor知識及MVC知識等。
3.理論知識和實踐操作充分融合,助力讀者理論落地
本書力求將Java Web理論知識融入實踐任務中,讀者完成實踐任務后,在獲得階段性學習成果的同時,也掌握了Java Web理論知識。
4.實踐任務目的明確、環(huán)境清晰、步驟詳細
本書將實踐任務分解成若干個子任務,將各子任務又分解成若干場景,將場景又分解成若干步驟,讀者按照步驟執(zhí)行即可自行完成實踐任務;換言之,本書可以很大程度助力讀者動手實踐,提升實戰(zhàn)技能。
5.項目案例精心定制,激發(fā)讀者學習興趣
本書將Java Web理論知識充分融入精心定制的項目案例,讀者按照步驟執(zhí)行即可快速完成項目案例的實際開發(fā),這可以使讀者獲得充足的學習成就感,激發(fā)讀者的學習興趣。
【對于教師】
1.幫助教師從簡單、機械、重復率高的體力勞動中解脫出來
對于學習過程、上機過程中簡單、機械、重復率高的問題,教師可以建議學生在書中尋找答案,從而在提升學生自學能力的同時,幫助教師從簡單、機械、重復率高的勞動中解脫出來。
2.便于教師考核學生
教師可將第11~15章的內容用于課程設計或者期末考試,無須講解、無須指導,學生只須按照步驟執(zhí)行,即可自行完成項目案例。這樣的內容安排既可以提升學生的自學能力,又可以節(jié)省教師的教學時間。教師可以根據(jù)學生完成項目案例的情況,考查學生的學習效果。學生的成績核定基本原則如下(僅供參考)。
(1)堅持“底線思維”
面向所有學生設置“底線任務”,即制作出項目案例。只有制作出項目案例,才能算考核合格。簡而言之,參與考核的學生可以“過”,但不可“不及”。
(2)拓展項目案例的功能,發(fā)掘優(yōu)秀學生
學有余力的學生可以對項目案例自行增加“拓展性功能”;教師可以根據(jù)學生完成的“拓展性功能”的難易程度和UI設計效果,對其進行成績核定,從而發(fā)掘優(yōu)秀學生。
3.充分考慮軟件的兼容性問題
學生的個人計算機可能使用64位操作系統(tǒng),但教師教學環(huán)境的計算機可能使用32位操作系統(tǒng)。
孔祥盛:
副教授,精通Java、JavaScript、PHP、Python等編程語言,熟悉Web開發(fā)、爬蟲、自動化測試、數(shù)據(jù)分析與數(shù)據(jù)挖掘、數(shù)據(jù)可視化、數(shù)據(jù)庫等技術,擅長將抽象的理論知識具體化、生活化,善于將綜合知識融會貫通于項目案例,主編多部教材,其中,教材《PHP基礎與實例教程》 重印20余次,并獲河南省普通高等教育“十四五”規(guī)劃教材立項、河南省優(yōu)秀教材二等獎;教材《MySQL數(shù)據(jù)庫基礎與實例教程》重印近20次。
【章名目錄】
第 1章 Java Web開發(fā)基礎知識 1
第 2章 Servlet接收GET請求數(shù)據(jù) 18
第3章 Servlet接收POST請求數(shù)據(jù) 48
第4章 Servlet生成HTTP響應數(shù)據(jù) 74
第5章 異步請求和異步響應 94
第6章 會話控制技術:Cookie與Session 114
第7章 過濾器和監(jiān)聽器 140
第8章 MVC和JSTL 154
第9章 個人筆記系統(tǒng)的數(shù)據(jù)庫設計與實現(xiàn) 179
第 10章 MySQL事務機制和JDBC的使用 206
第 11章 layui和CKEditor的使用 233
第 12章 項目實訓:個人筆記系統(tǒng)首頁模塊的設計與實現(xiàn) 256
第 13章 項目實訓:個人筆記系統(tǒng)用戶管理模塊的設計與實現(xiàn) 270
第 14章 項目實訓:個人筆記系統(tǒng)筆記管理模塊的設計與實現(xiàn) 289
第 15章 項目實訓:個人筆記系統(tǒng)其他功能模塊的設計與實現(xiàn) 311
【詳細目錄】
第 1章 Java Web開發(fā)基礎知識 1
1.1 B/S概述 1
1.1.1 瀏覽器 1
1.1.2 服務器 1
1.2 靜態(tài)代碼和動態(tài)代碼 1
1.2.1 HTML和靜態(tài)代碼 2
1.2.2 服務器端腳本語言和動態(tài)代碼 2
1.2.3 Servlet容器和動態(tài)代碼之間的關系 3
1.2.4 Web服務器上資源文件的分類 3
1.3 HTTP概述 4
1.3.1 瀏覽器與Web服務器之間的交互 4
1.3.2 HTTP的本質 5
1.3.3 HTTP請求/HTTP響應的詳細過程 5
1.4 Java Web開發(fā)環(huán)境的部署 6
1.4.1 JDK的版本選擇和安裝 6
1.4.2 Tomcat的版本選擇和安裝 6
1.4.3 啟動和停止運行Tomcat 6
1.4.4 本機的“左右互搏之術” 8
1.4.5 Tomcat端口占用問題 9
1.4.6 有趣的實驗 9
實踐任務 Java Web開發(fā)基礎知識 11
第 2章 Servlet接收GET請求數(shù)據(jù) 18
2.1 使用Eclipse開發(fā)Java Web程序 18
2.1.1 Eclipse的安裝和啟動 18
2.1.2 啟動Eclipse的注意事項 18
2.1.3 認識Eclipse工作空間 19
2.1.4 小露身手:使用Eclipse創(chuàng)建動態(tài)Web項目 19
2.1.5 Eclipse的View和Perspective 21
2.1.6 小露身手:使用Eclipse創(chuàng)建第 一個Servlet程序 21
2.1.7 Eclipse中Servlet的URL Mappings和Servlet的urlPatterns 25
2.1.8 Servlet程序的生命周期 25
2.1.9 小露身手:使用Eclipse創(chuàng)建JSP程序 26
2.2 字符編碼 28
2.2.1 JSP文件的字符編碼與pageEncoding 28
2.2.2 MIME和字符編碼 29
2.2.3 JSP文件、pageEncoding和charset的字符編碼之間的關系 31
2.3 URL路徑 32
2.4 過程分析:瀏覽器發(fā)送GET請求數(shù)據(jù)和Web服務器接收GET請求數(shù)據(jù) 33
2.4.1 過程分析:瀏覽器向Web服務器發(fā)送GET請求數(shù)據(jù) 33
2.4.2 GET請求數(shù)據(jù)的構成 33
2.4.3 過程分析:Web服務器接收GET請求數(shù)據(jù) 35
2.5 request請求對象獲取GET請求數(shù)據(jù) 37
2.5.1 獲取路徑信息 37
2.5.2 獲取GET請求參數(shù)信息 37
2.5.3 獲取GET請求行信息 38
2.5.4 獲取GET請求頭信息 38
2.5.5 獲取Web服務器主機和瀏覽器主機信息 38
2.5.6 獲取URL Mappings信息的方法 38
2.6 request請求對象的請求派發(fā)功能 39
2.6.1 RequestDispatcher 39
2.6.2 請求派發(fā)的請求轉發(fā) 39
2.6.3 請求轉發(fā)的實現(xiàn) 40
2.6.4 請求轉發(fā)之間Servlet程序的數(shù)據(jù)共享 40
2.6.5 request請求對象的屬性和參數(shù)區(qū)別 41
實踐任務 Servlet接收GET請求數(shù)據(jù) 42
第3章 Servlet接收POST請求數(shù)據(jù) 48
3.1 FORM表單 48
3.1.1 表單標簽 48
3.1.2 表單控件 48
3.1.3 表單按鈕 51
3.1.4 小露身手:利用FORM表單模擬發(fā)送GET請求數(shù)據(jù) 52
3.2 URL路徑定位方法 53
3.2.1 URL絕對路徑 54
3.2.2 URL相對路徑 54
3.2.3 page-relative路徑的技巧 56
3.2.4 小露身手:URL路徑定位方法 57
3.3 過程分析:瀏覽器發(fā)送POST請求數(shù)據(jù)和Web服務器接收POST請求數(shù)據(jù) 59
3.3.1 準備工作 59
3.3.2 過程分析:瀏覽器向Web服務器發(fā)送POST請求數(shù)據(jù) 60
3.3.3 POST請求數(shù)據(jù)的構成 60
3.3.4 POST與GET請求數(shù)據(jù)對比 61
3.3.5 過程分析:Web服務器接收POST請求數(shù)據(jù) 62
3.4 小露身手:request請求對象接收application/x-www-form-urlencoded格式的POST請求數(shù)據(jù) 62
3.5 小露身手:向Servlet程序添加multipart/form-data支持 66
3.5.1 application/x-www-form-urlencoded與multipart/form-data的比較 68
3.5.2 理解multipart/form-data內容格式中的片段 69
3.5.3 request請求對象獲取multipart/form-data請求體中的片段 70
實踐任務 Servlet接收POST請求數(shù)據(jù) 72
第4章 Servlet生成HTTP響應數(shù)據(jù) 74
4.1 HTTP響應數(shù)據(jù)與HttpServletResponse之間的關系 74
4.2 HTTP響應行 75
4.2.1 響應狀態(tài)碼 75
4.2.2 使用response響應對象設置響應狀態(tài)碼 75
4.3 HTTP響應頭列表 76
4.3.1 常見的響應頭 76
4.3.2 使用response響應對象設置、添加響應頭 78
4.3.3 重定向、定時刷新和請求轉發(fā)的比較 79
4.4 使用response響應對象生成HTTP響應體 81
4.4.1 response響應對象的緩存 81
4.4.2 向response緩存添加文本型數(shù)據(jù) 82
4.4.3 向response緩存添加字節(jié)數(shù)據(jù) 82
4.4.4 response響應對象“一石三鳥”的代碼 83
實踐任務 Servlet生成HTTP響應數(shù)據(jù) 84
第5章 異步請求和異步響應 94
5.1 Web前端技術 94
5.1.1 HTML簡介 94
5.1.2 HTML元素的屬性 94
5.1.3 CSS簡介 95
5.1.4 小露身手:理解CSS中層疊的含義 96
5.1.5 JavaScript簡介 97
5.2 JavaScript入門 97
5.2.1 JavaScript基礎知識 97
5.2.2 小露身手:演示HTML元素和JavaScript呈現(xiàn)的順序 99
5.2.3 通過JavaScript的document對象操作HTML元素 99
5.2.4 小露身手:通過JavaScript的document對象操作HTML元素內容 101
5.3 異步請求和異步響應 102
5.3.1 異步請求和同步請求概述 102
5.3.2 XMLHttpRequest異步請求對象 103
5.3.3 小露身手:了解GET異步請求和異步響應的執(zhí)行流程 106
5.3.4 小露身手:使用XMLHttpRequest發(fā)送異步的POST請求 109
5.3.5 小露身手:使用XMLHttpRequest和FormData異步上傳、顯示圖片 110
實踐任務 異步請求和異步響應 113
第6章 會話控制技術:Cookie與Session 114
6.1 會話控制技術概述 114
6.2 Cookie會話控制技術 114
6.2.1 Cookie的工作原理 114
6.2.2 Cookie的本質與核心 116
6.2.3 創(chuàng)建Cookie 116
6.2.4 將cookie對象添加到HTTP響應頭列表中 118
6.2.5 讀取Cookie 118
6.2.6 使Cookie手動失效 119
6.2.7 小露身手:Cookie的綜合運用 119
6.2.8 重定向和請求轉發(fā)關于Cookie使用的區(qū)別 123
6.3 Session會話控制技術 124
6.3.1 Session的工作原理 124
6.3.2 Session的本質與核心 126
6.3.3 開啟Session和獲取已有的session對象 126
6.3.4 Servlet開啟Session和JSP開啟Session的區(qū)別 127
6.3.5 session對象的使用 127
6.3.6 刪除Session或者使Session失效 127
6.3.7 小露身手:Session的綜合使用 128
實踐任務 會話控制技術:Cookie與Session 139
第7章 過濾器和監(jiān)聽器 140
7.1 過濾器 140
7.1.1 小露身手:創(chuàng)建最簡單的過濾器ABCFilter 141
7.1.2 過濾器總結 143
7.1.3 小露身手:過濾器鏈的使用 144
7.1.4 過濾器的綜合應用1:URL級別的權限訪問控制 145
7.1.5 小露身手:使用過濾器實現(xiàn)URL級別的權限訪問控制 145
7.1.6 過濾器的綜合應用2:使用過濾器實現(xiàn)表單驗證 147
7.1.7 小露身手:使用過濾器實現(xiàn)表單驗證 148
7.2 監(jiān)聽器 148
7.2.1 小露身手:演示Java Web 狀態(tài)監(jiān)聽器和屬性監(jiān)聽器 149
7.2.2 小露身手:利用HttpSessionListener統(tǒng)計在線人數(shù) 152
實踐任務 過濾器和監(jiān)聽器 153
第8章 MVC和JSTL 154
8.1 MVC 154
8.1.1 MVC的歷史與簡介 154
8.1.2 MVC與Web開發(fā)的關系 155
8.1.3 MVC與Java Web的關系 155
8.1.4 理解Service和DAO的關系 157
8.2 JavaBean 158
8.2.1 JavaBean簡介 158
8.2.2 JavaBean代碼編寫規(guī)范 158
8.2.3 JavaBean命名屬性的特殊情況 159
8.2.4 小露身手:在Eclipse中創(chuàng)建數(shù)據(jù)模型JavaBean和業(yè)務邏輯Service 160
8.2.5 JavaBean的分類 162
8.3 JSP的內置對象 163
8.3.1 內置對象out 163
8.3.2 內置對象application和Servlet中的ServletContext 164
8.3.3 內置對象pageContext 165
8.4 EL 165
8.4.1 EL簡介 166
8.4.2 EL的功能和優(yōu)點 166
8.4.3 EL的內置對象 167
8.4.4 小露身手:EL的使用 167
8.5 JSTL 173
8.5.1 JSTL核心標簽庫的準備工作 173
8.5.2 JSTL核心標簽庫的使用 174
8.5.3 小露身手:JSTL核心標簽庫的使用 174
實踐任務 MVC和JSTL 178
第9章 個人筆記系統(tǒng)的數(shù)據(jù)庫設計與實現(xiàn) 179
9.1 數(shù)據(jù)庫概述 179
9.1.1 數(shù)據(jù)庫管理系統(tǒng)和數(shù)據(jù)庫 179
9.1.2 表結構和表記錄 180
9.1.3 SQL 180
9.2 個人筆記系統(tǒng)數(shù)據(jù)庫的設計 180
9.2.1 構建個人筆記系統(tǒng)的必要性 181
9.2.2 個人筆記系統(tǒng)的功能需求分析 181
9.2.3 E-R圖簡介 182
9.2.4 個人筆記系統(tǒng)E-R圖的設計 185
9.2.5 個人筆記系統(tǒng)表結構的設計 186
9.3 MySQL安裝和配置 188
9.3.1 小露身手:在Windows中安裝MySQL ZIP壓縮文件 188
9.3.2 小露身手:將MySQL服務注冊為Windows服務 190
9.4 數(shù)據(jù)庫的管理 191
9.5 表結構的管理 192
9.5.1 創(chuàng)建表結構的準備工作 192
9.5.2 創(chuàng)建表結構 194
9.5.3 查看表和查看表結構 195
9.5.4 刪除表結構 195
9.5.5 小露身手:創(chuàng)建個人筆記系統(tǒng)的數(shù)據(jù)庫和數(shù)據(jù)庫表 196
9.6 表記錄的更新 197
9.6.1 添加表記錄 197
9.6.2 修改表記錄 198
9.6.3 刪除表記錄 198
9.6.4 檢索表的所有記錄 198
9.6.5 小露身手:向個人筆記系統(tǒng)的數(shù)據(jù)庫添加測試數(shù)據(jù) 198
9.6.6 小露身手:更新表記錄時,不能違反表之間的外鍵約束條件 200
9.7 表記錄的檢索 200
9.7.1 使用select子句指定字段列表 201
9.7.2 distinct和limit 201
9.7.3 表和表之間的連接 202
9.7.4 使用where子句過濾結果集 202
9.7.5 使用order by子句對結果集排序 203
9.7.6 使用聚合函數(shù)匯總結果集 204
9.7.7 使用group by子句對記錄分組統(tǒng)計 204
9.7.8 小露身手:個人筆記系統(tǒng)的綜合查詢 204
實踐任務 個人筆記系統(tǒng)的數(shù)據(jù)庫設計與實現(xiàn) 205
第 10章 MySQL事務機制和JDBC的使用 206
10.1 MySQL事務機制 206
10.1.1 個人筆記系統(tǒng)中事務機制的必要性 206
10.1.2 事務機制中同一個數(shù)據(jù)庫連接的必要性 207
10.1.3 事務機制中關閉數(shù)據(jù)庫連接自動提交模式的必要性 207
10.1.4 個人筆記系統(tǒng)的事務實現(xiàn) 208
10.2 JDBC概述 209
10.2.1 Java程序通過JDBC訪問數(shù)據(jù)庫 的步驟 209
10.2.2 部署數(shù)據(jù)庫驅動程序 210
10.2.3 加載數(shù)據(jù)庫驅動程序 210
10.2.4 創(chuàng)建數(shù)據(jù)庫連接對象con 211
10.2.5 關閉con對象的自動提交模式 212
10.2.6 使用con對象準備預處理SQL 語句 212
10.2.7 初始化預處理SQL語句的 參數(shù) 212
10.2.8 執(zhí)行預處理SQL語句 213
10.2.9 遍歷結果集 213
10.2.10 結束事務 215
10.2.11 關閉資源 215
10.2.12 獲取insert語句的自增型字段的值 215
10.2.13 異常總結和其他建議 216
10.2.14 小露身手:使用JDBC訪問MySQL數(shù)據(jù)庫 216
10.2.15 小露身手:設計工具類DBUtil 217
10.2.16 小露身手:個人筆記系統(tǒng)中事務的必要性 221
10.3 基于MVC的Java Web開發(fā)中的事務管理 222
10.3.1 多個DAO共用一個數(shù)據(jù)庫連接對象的解決方案 222
10.3.2 使用過濾器管理數(shù)據(jù)庫連接對象和事務 225
10.3.3 借助ThreadLocal工具類共享參數(shù) 225
10.3.4 小露身手:借助ThreadLocal工具類共享參數(shù) 226
10.3.5 小露身手:使用過濾器和ThreadLocal管理事務 227
實踐任務 MySQL事務機制和JDBC的使用 232
第 11章 layui和CKEditor的使用 233
11.1 layui的使用 233
11.1.1 小露身手:快速上手layui 233
11.1.2 小露身手:layui中的頁面元素 237
11.1.3 layui的柵格布局 241
11.1.4 小露身手:layui中常用的容器 242
11.1.5 小露身手:layui中常用的內置JavaScript模塊 245
11.1.6 layui知識補充 247
11.1.7 小露身手:layui擴展知識 247
11.2 CKEditor 5的使用 252
11.2.1 經(jīng)典模式編輯器的下載和安裝 252
11.2.2 小露身手:CKEditor的基本使用 252
實踐任務 layui和CKEditor的使用 255
第 12章 項目實訓:個人筆記系統(tǒng)首頁模塊的設計與實現(xiàn) 256
12.1 個人筆記系統(tǒng)首頁模塊的設計與分析 256
12.1.1 個人筆記系統(tǒng)首頁模塊的視圖層設計 256
12.1.2 個人筆記系統(tǒng)首頁模塊的邏輯分析 257
12.1.3 個人筆記系統(tǒng)首頁模塊的數(shù)據(jù)分析 258
12.2 個人筆記系統(tǒng)URL級別的權限訪問控制的設計 259
12.3 個人筆記系統(tǒng)Java類的目錄設置 260
12.4 個人筆記系統(tǒng)類名和方法名的命名規(guī)則 260
12.5 個人筆記系統(tǒng)靜態(tài)資源文件的目錄設置 260
實踐任務 個人筆記系統(tǒng)首頁模塊的設計與實現(xiàn) 261
第 13章 項目實訓:個人筆記系統(tǒng)用戶管理模塊的設計與實現(xiàn) 270
13.1 用戶注冊功能的實現(xiàn) 270
13.2 用戶登錄和注銷功能的實現(xiàn) 271
實踐任務1 用戶注冊功能的實現(xiàn) 272
實踐任務2 用戶登錄和注銷功能的實現(xiàn) 280
實踐任務3 個人簡介的維護 283
實踐任務4 使用過濾器實現(xiàn)個人筆記系統(tǒng)URL級別的權限訪問控制 287
第 14章 項目實訓:個人筆記系統(tǒng)筆記管理模塊的設計與實現(xiàn) 289
實踐任務1 查詢所有筆記功能的開發(fā) 289
實踐任務2 后臺管理面板author.jsp程序的開發(fā) 291
實踐任務3 添加筆記頁面和保存筆記功能的開發(fā) 291
實踐任務4 查看筆記全文功能的開發(fā) 298
實踐任務5 編輯筆記和更新筆記功能的開發(fā) 304
實踐任務6 刪除筆記功能的開發(fā) 308
實踐任務7 對筆記的標題和內容進行模糊查詢功能的開發(fā) 309
第 15章 項目實訓:個人筆記系統(tǒng)其他功能模塊的設計與實現(xiàn) 311
實踐任務1 對筆記發(fā)表評論功能的開發(fā) 311
實踐任務2 查看某個用戶發(fā)表的評論功能的開發(fā) 313
實踐任務3 筆記類別名稱管理模塊的開發(fā) 315
實踐任務4 筆記標簽名稱管理模塊的開發(fā) 318
實踐任務5 向首頁添加layui固定塊 321
附錄 322