當前位置:首頁 » 網購平台 » webmvc購物車實現原理
擴展閱讀
寧波奧德賽優惠價格 2021-03-15 14:26:02
丹尼斯購物卡能掛失么 2021-03-15 14:25:58
淘寶購物指紋驗證失敗 2021-03-15 14:24:44

webmvc購物車實現原理

發布時間: 2021-01-27 22:20:42

A. Tomcat與JavaWeb開發技術詳解的目錄

第1篇 Java Web開發技術詳解
依據SUN的Java Servlet規范和JSP規范,深入介紹了開發Java Web應用的各種技術。
第1章 Web運作原理探析 3
利用Java套接字(Socket)實現了一個簡單的基於HTTP協議的客戶程序和伺服器程序。
1.1 Web的概念 3
1.2 HTML簡介 4
1.3 URL簡介 7
1.4 HTTP協議簡介 7
1.4.1 HTTP請求格式 9
1.4.2 HTTP響應格式 11
1.4.3 正文部分的MIME類型 13
1.5 用Java套接字創建HTTP客戶與伺服器程序 14
1.5.1 演示異構系統之間用HTTP協議通信 17
1.5.2 演示對網頁中的超級鏈接的處理過程 19
1.5.3 演示對網頁中的圖片的處理過程 20
1.6 Web發展歷程 21
1.6.1 發布靜態HTML文檔 21
1.6.2 發布靜態多媒體信息 22
1.6.3 提供瀏覽器端與用戶的動態交互功能 22
1.6.4 提供伺服器端與用戶的動態交互功能 24
1.6.5 發布Web應用 29
1.6.6 發布Web服務 30
1.6.7 Web 2.0:全民共建的Web 32
1.7 處理HTTP請求參數及HTML表單 33
1.8 客戶端向伺服器端上傳文件 36
1.9 小結 41
1.10 思考題 42
第2章 Tomcat簡介 45
Tomcat除了能夠充當運行Servlet的容器,還提供了作為Web伺服器的一些實用功能,如Tomcat管理和控制平台、安全域管理和Tomcat閥等。Tomcat已成為目前開發企業JavaWeb應用的最佳Servlet容器選擇之一。
2.1 Tomcat概述 46
2.2 Tomcat作為Servlet容器的基本功能 47
2.3 Tomcat的組成結構 48
2.4 Tomcat的工作模式 50
2.5 Tomcat的版本 52
2.6 安裝和配置Tomcat所需的資源 53
2.7 安裝Tomcat 55
2.8 啟動Tomcat並測試Tomcat的安裝 57
2.9 Tomcat的運行腳本 58
2.10 小結 59
2.11 思考題 60
第3章 第一個JavaWeb應用 63
以一個簡單的helloapp應用為例,讓初學者迅速獲得開發JavaWeb應用的實際經驗。
3.1 JavaWeb應用簡介 63
3.2 創建JavaWeb應用 64
3.2.1 JavaWeb應用的目錄結構 64
3.2.2 創建HTML文件 65
3.2.3 創建Servlet類 66
3.2.4 創建JSP文件 67
3.2.5 創建web.xml文件 68
3.3 在Tomcat中發布JavaWeb應用 70
3.3.1 Tomcat的目錄結構 70
3.3.2 按照默認方式發布JavaWeb應用 71
3.3.3 Web組件的URL 72
3.3.4 配置Tomcat的元素 75
3.3.5 配置Tomcat的虛擬主機 78
3.4 創建、配置和使用自定義JSP標簽 80
3.5 用批處理文件或ANT編譯範例 84
3.6 小結 85
3.7 思考題 86
第4章 Servlet技術(上) 89
要想精通Servlet編程,不僅要了解Servlet自身的用法,還要了解容器為它提供的十八般武器的用法。
4.1 Servlet API 90
4.1.1 Servlet介面 90
4.1.2 GenericServlet抽象類 91
4.1.3 HttpServlet抽象類 93
4.1.4 ServletRequest介面 96
4.1.5 HttpServletRequest介面 97
4.1.6 ServletResponse介面 100
4.1.7 HttpServletResponse介面 101
4.1.8 ServletConfig介面 104
4.1.9 ServletContext介面 105
4.2 JavaWeb應用的生命周期 108
4.2.1 啟動階段 108
4.2.2 運行時階段 109
4.2.3 終止階段 109
4.2.4 用Tomcat的管理平台管理Web應用的生命周期 109
4.3 Servlet的生命周期 111
4.3.1 初始化階段 111
4.3.2 運行時階段 112
4.3.3 銷毀階段 112
4.3.4 演示Servlet的生命周期的範例 113
4.4 ServletContext與Web應用范圍 115
4.4.1 在Web應用范圍內存放共享數據的範例 116
4.4.2 使用ServletContextListener監聽器 119
4.5 Servlet的服務方法拋出異常 121
4.6 防止頁面被客戶端緩存 122
4.7 小結 123
4.8 思考題 124
第5章 Servlet技術(下) 129
進一步介紹Servlet的一些高級用法。
5.1 下載文件 129
5.2 上傳文件 130
5.3 動態生成圖像 136
5.4 讀寫Cookie 139
5.5 訪問Web應用的工作目錄 145
5.6 轉發和包含 147
5.6.1 請求轉發 148
5.6.2 包含 152
5.6.3 請求范圍 154
5.7 重定向 155
5.8 訪問Servlet容器內的其他Web應用 158
5.9 避免並發問題 160
5.9.1 合理決定在Servlet中定義的變數的作用域類型 162
5.9.2 使用Java同步機制對多線程同步 164
5.9.3 被廢棄的SingleThreadModel介面 165
5.10 小結 166
5.11 思考題 169
第6章 JSP技術 171
包括JSP的運行機制和語法、JSP包含其他Web組件的方法、把請求轉發給其他Web組件的方法,以及JSP的異常處理。
6.1 比較HTML、Servlet和JSP 171
6.1.1 靜態HTML文件 171
6.1.2 用Servlet動態生成HTML頁面 171
6.1.3 用JSP動態生成HTML頁面 173
6.2 JSP語法 177
6.2.1 JSP指令(Directive) 178
6.2.2 JSP聲明 180
6.2.3 Java程序片段(Scriptlet) 181
6.2.4 Java表達式 182
6.2.5 隱含對象 184
6.3 JSP的生命周期 185
6.4 請求轉發 188
6.5 包含 190
6.5.1 靜態包含 190
6.5.2 動態包含 192
6.5.3 混合使用靜態包含和動態包含 194
6.6 JSP異常處理 200
6.7 再談發布JSP 202
6.8 預編譯JSP 203
6.9 PageContext抽象類 204
6.10 JSP技術的發展趨勢 206
6.11 小結 207
6.12 思考題 207
第7章 bookstore應用簡介 211
介紹bookstore應用的軟體結構、各個JSP網頁的功能,以及部分Web組件的實現。
7.1 bookstore應用的軟體結構 211
7.1.1 Web伺服器層 211
7.1.2 資料庫層 212
7.2 瀏覽bookstore應用的JSP網頁 212
7.3 JavaBean和實用類 217
7.3.1 實體類 218
7.3.2 購物車的實現 219
7.4 發布bookstore應用 222
7.5 小結 223
第8章 訪問資料庫 225
介紹通過JDBC API訪問資料庫、在Tomcat中配置數據源,以及在Web應用中通過數據源連接資料庫的方法。
8.1 安裝和配置MySQL資料庫 225
8.2 JDBC簡介 228
8.2.1 java.sql包中的介面和類 230
8.2.2 編寫訪問資料庫程序的步驟 234
8.2.3 事務處理 236
8.3 通過JDBC API訪問資料庫的JSP范常式序 237
8.4 bookstore應用通過JDBC API訪問資料庫 239
8.5 數據源(DataSource)簡介 243
8.6 配置數據源 244
8.6.1 在context.xml中加入元素 244
8.6.2 在web.xml中加入元素 245
8.7 程序中訪問數據源 246
8.7.1 通過數據源連接資料庫的JSP范常式序 246
8.7.2 bookstore應用通過數據源連接資料庫 248
8.8 處理中文編碼 251
8.9 分頁顯示批量數據 252
8.10 小結 256
8.11 思考題 257
第9章 HTTP會話的使用與管理 259
介紹如何通過會話來實現伺服器對客戶的狀態的跟蹤。
9.1 會話簡介 259
9.2 HttpSession的生命周期及會話范圍 263
9.3 使用會話的JSP范常式序 265
9.4 使用會話的Servlet范常式序 269
9.5 通過重寫URL來跟蹤會話 273
9.6 會話的持久化 277
9.6.1 標准會話管理器StandardManager 279
9.6.2 持久化會話管理器PersistentManager 280
9.7 會話的監聽 284
9.7.1 用HttpSessionListener統計在線用戶人數 289
9.7.2 用HttpSessionBindingListener統計在線用戶人數 291
9.8 小結 294
9.9 思考題 295
第10章 JSP訪問JavaBean 299
介紹JavaBean的概念和創建方法, JSP訪問JavaBean的語法,JavaBean在Web應用中的4種存在范圍,如何在bookstore應用中運用JavaBean。
10.1 JavaBean簡介 299
10.2 JSP訪問JavaBean的語法 300
10.3 JavaBean的范圍 302
10.3.1 JavaBean在頁面(page)范圍內 302
10.3.2 JavaBean在請求(request)范圍內 305
10.3.3 JavaBean在會話(session)范圍內 306
10.3.4 JavaBean在Web應用(application)范圍內 307
10.4 在bookstore應用中訪問JavaBean 308
10.4.1 訪問BookDB類 308
10.4.2 訪問ShoppingCart類 309
10.5 小結 313
10.6 思考題 314
第11章 開發JavaMail Web應用 317
介紹了一個JavaMail Web應用,通過它,客戶可以訪問郵件伺服器上的郵件賬號、收發郵件和管理郵件夾。
11.1 E-mail協議簡介 317
11.1.1 SMTP簡單郵件傳輸協議 317
11.1.2 POP3郵局協議 318
11.1.3 接收郵件的新協議IMAP 318
11.2 JavaMail API簡介 319
11.3 建立JavaMail應用程序的開發環境 321
11.3.1 獲得JavaMail API的類庫 321
11.3.2 安裝和配置郵件伺服器 321
11.4 創建JavaMail應用程序 324
11.5 JavaMail Web應用簡介 328
11.6 JavaMail Web應用的程序結構 328
11.6.1 重新封裝Message數據 329
11.6.2 用於保存郵件賬號信息的JavaBean 332
11.6.3 定義所有JSP文件的相同內容 334
11.6.4 登錄IMAP伺服器上的郵件賬號 336
11.6.5 管理郵件夾 339
11.6.6 查看郵件夾中的郵件信息 342
11.6.7 查看郵件內容 345
11.6.8 創建和發送郵件 346
11.6.9 退出郵件系統 348
11.7 在Tomcat中配置郵件會話(Mail Session) 349
11.7.1 在context.xml中配置Mail Session資源 349
11.7.2 在web.xml中加入對JNDI Mail Session資源的引用 350
11.7.3 在javamail應用中獲取JNDI Mail Session資源 350
11.8 發布和運行javamail應用 352
11.9 小結 352
11.10 思考題 353
第12章 EL表達式語言 355
EL(Expression Language)表達式語言是在JSP 2.0版本中引入的新特性,它用於JSP文件中的數據訪問。
12.1 基本語法 355
12.1.1 訪問對象的屬性及數組的元素 356
12.1.2 EL運算符 356
12.1.3 隱含對象 357
12.1.4 命名變數 359
12.2 使用EL表達式的JSP範例 360
12.2.1 關於基本語法的例子 360
12.2.2 讀取HTML表單數據的例子 362
12.2.3 訪問命名變數的例子 363
12.3 定義和使用EL函數 363
12.4 小結 366
12.5 思考題 367
第13章 自定義JSP標簽 369
結合具體的範例,進一步介紹自定義標簽的創建過程,以及它在JSP文件中的使用方法。
13.1 自定義JSP標簽簡介 369
13.2 JSP Tag API 370
13.2.1 JspTag介面 370
13.2.2 Tag介面 371
13.2.3 IterationTag介面 373
13.2.4 BodyTag介面 374
13.2.5 TagSupport類和BodyTagSupport類 376
13.3 創建和使用message標簽(訪問標簽屬性) 380
13.3.1 創建message標簽的處理類MessageTag 382
13.3.2 創建標簽庫描述文件 385
13.3.3 在Web應用中使用標簽 388
13.3.4 發布支持中、英文版本的helloapp應用 390
13.4 創建和使用iterate標簽(重復執行標簽主體) 391
13.5 創建和使用greet標簽(訪問標簽主體內容) 395
13.6 小結 399
13.7 思考題 400
第14章 採用模板設計網上書店應用 403
以bookstore應用為例,介紹如何通過自定義JSP標簽來為網站設計模板,從而使所有在客戶端展示的網頁都通過模板來生成。
14.1 如何設計網站的模板 403
14.2 創建負責流程式控制制的Servlet 404
14.3 創建模板標簽和模板JSP文件 406
14.3.1 標簽和其處理類 408
14.3.2 標簽和處理類 411
14.3.3 標簽和處理類 413
14.3.4 標簽和處理類 417
14.4 修改JSP文件 419
14.5 發布採用模板設計的bookstore應用 420
14.6 小結 423
第15章 JSTL Core標簽庫 425
本章對JSTL做了概要介紹,並且著重介紹了JSTL中的Core標簽庫的用法。
15.1 使用第三方提供的標簽庫的步驟 425
15.2 JSTL標簽庫簡介 426
15.3 一般用途的標簽 427
15.3.1 標簽 427
15.3.2 標簽 428
15.3.3 標簽 430
15.3.4 標簽 430
15.4 條件標簽 431
15.4.1 標簽 431
15.4.2 、和標簽 432
15.5 迭代標簽 433
15.5.1 標簽 433
15.5.2 標簽 437
15.6 URL相關的標簽 437
15.6.1 標簽 437
15.6.2 標簽 438
15.6.3 標簽 440
15.7 小結 440
15.8 思考題 441
第16章 JSTL I18N標簽庫 443
I18N標簽庫主要用於編寫國際化的Web應用,本章對I18N標簽庫進行了詳細介紹。
16.1 國際化的概念 443
16.2 Java對I18N的支持 444
16.2.1 Locale類 444
16.2.2 ResourceBundle類 448
16.2.3 MessageFormat類和復合消息 449
16.3 國際化標簽 452
16.3.1 標簽 452
16.3.2 標簽 453
16.3.3 標簽 453
16.3.4 標簽 454
16.3.5 標簽 455
16.3.6 標簽 455
16.4 創建國際化的Web應用 456
16.4.1 創建支持國際化的網頁 456
16.4.2 創建資源文件 459
16.5 格式化標簽 460
16.5.1 標簽 460
16.5.2 標簽 461
16.5.3 標簽 461
16.5.4 標簽 462
16.5.5 標簽 463
16.5.6 標簽 465
16.6 小結 465
16.7 思考題 466
第17章 JSTL SQL標簽庫 469
在JSP中直接通過Java程序代碼來訪問資料庫,會降低JSP頁面的可讀性和可維護性,為了解決這一問題,可以在JSP中通過JSTL SQL標簽庫中的標簽來訪問資料庫。
17.1 標簽 469
17.2 標簽 470
17.2.1 設置數據源 470
17.2.2 設置select查詢語句 470
17.2.3 控制實際取出的記錄 471
17.2.4 訪問查詢結果 471
17.2.5 使用標簽的範例 472
17.3 標簽 474
17.4 標簽 475
17.5 標簽 475
17.6 標簽 476
17.7 小結 478
17.8 思考題 478
第18章 JSTL Functions標簽庫 481
介紹Functions標簽庫中常用的16個函數的用法。
18.1 fn:contains函數 481
18.2 fn:containsIgnoreCase函數 481
18.3 fn:startsWith函數 482
18.4 fn:endsWith函數 482
18.5 fn:indexOf函數 482
18.6 fn:replace函數 483
18.7 fn:substring函數 483
18.8 fn:substringBefore函數 483
18.9 fn:substringAfter函數 484
18.10 fn:split函數 484
18.11 fn:join函數 485
18.12 fn:toLowerCase函數 485
18.13 fn:toUpperCase函數 485
18.14 fn:trim函數 486
18.15 fn:escapeXml函數 486
18.16 fn:length函數 487
18.17 小結 488
18.18 思考題 489
第19章 簡單標簽和標簽文件 491
為了簡化開發標簽的過程,JSP 2.0引入了一種新的標簽擴展機制,稱為「簡單標簽擴展」。
19.1 實現SimpleTag介面 491
19.1.1 創建和使用簡單標簽 493
19.1.2 創建和使用帶屬性和標簽主體的簡單標簽 494
19.1.3 創建和使用帶動態屬性的簡單標簽 495
19.2 使用標簽文件 497
19.2.1 標簽文件的隱含對象 500
19.2.2 標簽文件的指令 501
19.2.3 標簽文件的和動作元素 503
19.2.4 創建和使用帶屬性和標簽主體的display標簽文件 503
19.2.5 創建和使用帶屬性和標簽主體的welcome標簽文件 505
19.2.6 創建和使用帶變數的precode標簽文件 506
19.3 小結 507
19.4 思考題 507
第20章 過濾器 509
如果在多個Web組件中編寫完成同樣操作的程序代碼,顯然會導致重復編碼,從而降低開發效率和軟體的可維護性,為了解決上述問題,過濾器應運而生。
20.1 過濾器簡介 509
20.2 創建過濾器 510
20.3 發布過濾器 513
20.4 串聯過濾器 518
20.4.1 包裝設計模式簡介 519
20.4.2 ServletOutputStream的包裝類 521
20.4.3 HttpServletResponse的包裝類 524
20.4.4 創建對響應結果進行字元串替換的過濾器 525
20.4.5 ReplaceTextFilter過濾器工作的UML時序圖 527
20.4.6 發布和運行包含ReplaceTextFilter過濾器的Web應用 528
20.5 小結 531
20.6 思考題 532
第21章 在Web應用中訪問EJB組件 535
首先介紹JavaEE的體系結構;然後以bookstore應用為例,介紹開發EJB組件的過程;最後講解如何在JBoss伺服器上發布JavaEE應用。
21.1 JavaEE體系結構簡介 535
21.2 安裝和配置JBoss伺服器 537
21.3 創建EJB組件 538
21.3.1 編寫Remote介面 539
21.3.2 編寫Home介面 539
21.3.3 編寫Enterprise Java Bean
類 540
21.4 在Web應用中訪問EJB組件 543
21.5 發布JavaEE應用 544
21.5.1 在JBoss上發布EJB組件 545
21.5.2 在JBoss上發布Web應用 547
21.5.3 在JBoss上發布JavaEE應用 549
21.6 小結 550
21.7 思考題 551
第22章 在Web應用中訪問Web服務 553
介紹利用AXIS來創建SOAP服務和SOAP客戶程序的方法,還介紹了在bookstore應用中訪問SOAP服務的方法。
22.1 SOAP簡介 553
22.2 建立Apache AXIS環境 555
22.3 在Tomcat上發布
Apache-AXIS Web應用 556
22.4 創建SOAP服務 557
22.4.1 創建提供SOAP服務的Java類 557
22.4.2 創建SOAP服務的發布描述符文件 557
22.5 管理SOAP服務 558
22.5.1 發布SOAP服務 558
22.5.2 刪除SOAP服務 559
22.6 創建和運行SOAP客戶程序 560
22.7 發布JWS服務 563
22.8 在bookstore應用中訪問SOAP服務 563
22.8.1 創建BookDB服務類及
BookDBDelegate代理類 564
22.8.2 發布bookdbservice服務和bookstore應用 573
22.9 小結 574
22.10 思考題 575
第23章 Web應用的MVC設計模式 577
首先介紹了MVC設計模式的結構和優點;接著介紹了SUN公司提出的在Java Web開發領域的兩種設計模式:JSP Model1和JSP Molde2;然後介紹了Struts實現MVC的機制;最後以helloapp應用為例,簡要介紹了在Web應用中使用Struts 2.0的方法。
23.1 MVC設計模式簡介 577
23.2 JSP Model 1和
JSP Model 2 579
23.3 Struts概述 581
23.3.1 Struts實現MVC的機制 581
23.3.2 Struts的工作流程 582
23.4 創建採用Struts的Web應用 583
23.4.1 建立Struts的環境 583
23.4.2 創建視圖 584
23.4.3 創建模型 585
23.4.4 創建Action類 585
23.4.5 創建web.xml文件和struts.xml文件 586
23.5 運行helloapp應用 587
23.5.1 伺服器端裝載login.htm的流程 587
23.5.2 用戶驗證的流程 587
23.6 小結 589
23.7 思考題 589
第2篇 Tomcat配置及第三方實用軟體的用法
介紹Tomcat伺服器的基本配置和高級配置,從而為Java Web應用創建高效的運行環境;介紹在Java Web應用中運用第三方提供的實用軟體(如Velocity和Log4J)的方法。
第24章 Tomcat的控制平台和管理平台 593
Tomcat提供了基於Web方式的管理平台和控制平台,用戶通過瀏覽器,就可以很方便地配置Tomcat伺服器,還可以管理運行在Tomcat伺服器上的Web應用,如發布、啟動、停止或刪除Web應用,以及查看Web應用狀態。
24.1 訪問Tomcat的控制平台和管理平台 593
24.2 Tomcat的控制平台 595
24.2.1 Tomcat控制平台的功能 595
24.2.2 配置元素 597
24.3 Tomcat的管理平台 598
24.4 小結 600
第25章 安全域 601
主要介紹如何通過Tomcat提供的安全域來保護Web應用的資源。
25.1 安全域概述 601
25.2 為Web資源設置安全約束 602
25.2.1 在web.xml中加入元素 603
25.2.2 在web.xml中加入元素 605
25.2.3 在web.xml中加入元素 608
25.3 內存域 608
25.4 JDBC域 610
25.4.1 用戶資料庫的結構 610
25.4.2 在MySQL中創建和配置用戶資料庫 611
25.4.3 配置元素 611
25.5 DataSource域 612
25.6 在Web應用中訪問用戶信息 614
25.7 小結 614
25.8 思考題 615
第26章 Tomcat與其他HTTP 伺服器集成 617
首先討論Tomcat與HTTP伺服器集成的一般原理,然後介紹Tomcat與Apache伺服器及IIS集成的詳細步驟,最後介紹把由多個Tomcat伺服器構成的集群系統與Apache伺服器集成的方法。
26.1 Tomcat與HTTP伺服器集成的原理 617
26.1.1 JK插件 618
26.1.2 AJP協議 618
26.2 在Windows下Tomcat與
Apache伺服器集成 618
26.3 在Linux下Tomcat與Apache
伺服器集成 621
26.4 Tomcat與IIS伺服器集成 623
26.4.1 准備相關文件 624
26.4.2 編輯注冊表 624
26.4.3 在IIS中加入「jakarta」虛擬目錄 626
26.4.4 把JK插件作為ISAPI篩選器加入到IIS中 627
26.4.5 測試配置 628
26.5 Tomcat集群 628
26.5.1 配置集群系統的負載平衡器 629
26.5.2 配置集群管理器 631
26.6 小結 635
26.7 思考題 636
第27章 在Tomcat中配置SSI 637
首先介紹了SSI的概念及SSI指令的用法,然後介紹了在Tomcat中配置SSI的方法。
27.1 SSI簡介 637
27.1.1 #echo指令 638
27.1.2 #include指令 640
27.1.3 #flastmod指令 641
27.1.4 #fsize指令 641
27.1.5 #exec指令 641
27.1.6 #config指令 641
27.1.7 #if、#elif、#else和#endif指令 643
27.2 在Tomcat中配置對SSI的支持 643
27.3 小結 645
27.4 思考題 645
第28章 Tomcat閥 647
介紹Tomcat閥的種類,還將詳細介紹各種Tomcat閥的功能和使用方法。
28.1 Tomcat閥簡介 647
28.2 客戶訪問日誌閥 648
28.3 遠程地址過濾器 650
28.4 遠程主機過濾器 651
28.5 客戶請求記錄器 652
28.6 小結 653
28.7 思考題 653
第29章 在Tomcat中配置SSL 655
SSL(Server Socket Layer)協議,旨在達到在開放網路(Internet)上安全、保密地傳輸信息的目的,這種協議在Web上獲得了廣泛的應用。
29.1 SSL簡介 655
29.1.1 加密通信 656
29.1.2 安全證書 656
29.1.3 SSL握手 657
29.2 在Tomcat中使用SSL 658
29.2.1 准備安全證書 658
29.2.2 配置SSL連接器 659
29.2.3 訪問支持SSL的Web站點 660
29.3 小結 661
29.4 思考題 662
第30章 用ANT工具管理Web應用 663
介紹了ANT的安裝和配置,並以bookstore應用為例,介紹了ANT的使用方法。
30.1 安裝配置ANT 663
30.2 創建build.xml文件 663
30.3 運行ANT 668
30.4 小結 669
30.5 思考題 669
第31章 使用Log4J進行日誌操作 671
首先介紹Log4J的組成,接著介紹如何在程序中使用Log4J,最後介紹如何在Web應用中通過Log4J生成日誌。
31.1 Log4J簡介 671
31.1.1 Logger組件 672
31.1.2 Appender組件 673
31.1.3 Layout組件 673
31.1.4 Logger組件的繼承性 674
31.2 Log4J的基本使用方法 675
31.2.1 定義配置文件 675
31.2.2 在程序中使用Log4J 677
31.3 在helloapp應用中使用Log4J 680
31.3.1 創建用於配置Log4J環境的Servlet 680
31.3.2 在login.jsp中輸出日誌 681
31.3.3 發布和運行使用Log4J的helloapp應用 681
31.4 小結 683
31.5 思考題 683
第32章 Velocity模板語言 685
首先通過一個簡單的Velocity例子來講解創建基於Velocity的Web應用的步驟,然後詳細介紹Velocity模板語言的各個要素。
32.1 安裝Velocity 685
32.2 Velocity的簡單例子 685
32.2.1 創建Velocity模板 685
32.2.2 創建擴展VelocityServlet的Servlet類 686
32.2.3 發布和運行基於Velocity的Web應用 688
32.3 注釋 689
32.4 引用 689
32.4.1 變數引用 689
32.4.2 屬性引用 690
32.4.3 方法引用 692
32.4.4 正式引用符 693
32.4.5 安靜引用符 693
32.4.6 轉義符 694
32.4.7 大小寫替換 694
32.5 指令 695
32.5.1 #set指令 695
32.5.2 字面字元串 696
32.5.3 #if指令 697
32.5.4 比較運算 697
32.5.5 #foreach循環指令 698
32.5.6 #include指令 700
32.5.7 #parse指令 700
32.5.8 #macro指令 701
32.5.9 轉義VTL指令 702
32.5.10 VTL的格式 702
32.6 其他特徵 703
32.6.1 數學運算 703
32.6.2 范圍操作符 703
32.6.3 字元串的連接 704
32.7 小結 705
32.8 思考題 705
第33章 創建嵌入式Tomcat伺服器 707
介紹如何把Tomcat嵌入到Java應用程序中,以及在程序中配置Tomcat的組件,並控制Tomcat伺服器的啟動和關閉。
33.1 將Tomcat嵌入到Java應用中 707
33.2 創建嵌入了Tomcat的
Java示範程序 708
33.3 運行嵌入式Tomcat
伺服器 711
33.4 小結 713
附錄A server.xml文件 715
對server.xml文件的一些常用的元素進行了介紹。
A.1 配置Server元素 716
A.2 配置Service元素 717
A.3 配置Engine元素 717
A.4 配置Host元素 718
A.5 配置Context元素 718
A.6 配置Connector元素 719
附錄B web.xml文件 721
介紹了Web應用的配置文件web.xml文件。
B.1 配置過濾器 723
B.2 配置Servlet 724
B.3 配置Servlet映射 725
B.4 配置Session 725
B.5 配置Welcome文件清單 725
B.6 配置Tag Library 726
B.7 配置資源引用 726
B.8 配置安全約束 727
B.9 配置安全驗證登錄界面 727
B.10 配置對安全驗證角色的引用 728
附錄C XML簡介 729
XML,即可擴展標記語言(Extensible Markup Language),是一種可以用來創建自定義標記的標記語言。
C.1 SGML、HTML 與XML的比較 729
C.2 DTD文檔類型定義 730
C.3 有效XML文檔以及簡化格式的XML文檔 731
C.4 XML中的常用術語 732
C.4.1 URL、URN和URI 733
C.4.2 XML命名空間 733
附錄D 書中涉及軟體獲取途徑 735
為了便於讀者在本地機器上搭建運行範例的環境,列出了書中涉及的軟體的獲取途徑。
……

B. 求一個購物車項目設計源代碼

using System;using System.Data;using System.Configuration;using System.Collections;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Web.UI.HtmlControls;using System.Collections;public partial class AddCar : System.Web.UI.Page{ DataAccess db = new DataAccess(); protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { string id = Request.QueryString["id"].ToString(); if (Session["car"] != null) { Hashtable hash = Session["car"] as Hashtable; if (!hash.ContainsKey(id)) { hash.Add(id, 1); } else { hash[id] = int.Parse(hash[id].ToString()) + 1; } Session["car"] = hash; } else { Hashtable hash = new Hashtable(); hash.Add(id, 1); Session["car"] = hash; } Hashtable k = Session["car"] as Hashtable; DataColumn dc0 = new DataColumn("id", typeof(string)); DataColumn dc1 = new DataColumn("商品名", typeof(string)); DataColumn dc2 = new DataColumn("價格", typeof(float)); DataColumn dc3 = new DataColumn("數量", typeof(int)); DataColumn dc4 = new DataColumn("總價格", typeof(float)); DataTable dt = new DataTable(); dt.Columns.Add(dc0); dt.Columns.Add(dc1); dt.Columns.Add(dc2); dt.Columns.Add(dc3); dt.Columns.Add(dc4); foreach (DictionaryEntry i in k) { //Response.Write(i.Key+" "+i.Value+"<br>"); DataRow dr = dt.NewRow(); DataSet ds = db.QueryDataSet("select * from proct where p_id=" + i.Key); dr["id"] = ds.Tables[0].Rows[0]["p_id"].ToString(); dr["商品名"] = ds.Tables[0].Rows[0]["p_name"].ToString(); dr["價格"] = ds.Tables[0].Rows[0]["p_price"].ToString(); dr["數量"] = int.Parse(k[i.Key].ToString()); dr["總價格"] = int.Parse(k[i.Key].ToString()) * double.Parse(ds.Tables[0].Rows[0]["p_price"].ToString()); dt.Rows.Add(dr); } GridView1.DataSource = dt; GridView1.DataBind(); } } protected void Button1_Click(object sender, EventArgs e) { Response.Redirect("default2.aspx"); } protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e) { string id = GridView1.DataKeys[e.RowIndex].Value.ToString(); Hashtable k = Session["car"] as Hashtable; Session["car"] = k; k.Remove(id); DataColumn dc0 = new DataColumn("id", typeof(string)); DataColumn dc1 = new DataColumn("商品名", typeof(string)); DataColumn dc2 = new DataColumn("價格", typeof(float)); DataColumn dc3 = new DataColumn("數量", typeof(int)); DataColumn dc4 = new DataColumn("總價格", typeof(float)); DataTable dt = new DataTable(); dt.Columns.Add(dc0); dt.Columns.Add(dc1); dt.Columns.Add(dc2); dt.Columns.Add(dc3); dt.Columns.Add(dc4); foreach (DictionaryEntry i in k) { //Response.Write(i.Key+" "+i.Value+"<br>"); DataRow dr = dt.NewRow(); DataSet ds = db.QueryDataSet("select * from proct where p_id=" + i.Key); dr["id"] = ds.Tables[0].Rows[0]["p_id"].ToString(); dr["商品名"] = ds.Tables[0].Rows[0]["p_name"].ToString(); dr["價格"] = ds.Tables[0].Rows[0]["p_price"].ToString(); dr["數量"] = int.Parse(k[i.Key].ToString()); dr["總價格"] = int.Parse(k[i.Key].ToString()) * double.Parse(ds.Tables[0].Rows[0]["p_price"].ToString()); dt.Rows.Add(dr); } GridView1.DataSource = dt; GridView1.DataBind(); } protected void Button2_Click(object sender, EventArgs e) { Hashtable k = Session["car"] as Hashtable; string code = DateTime.Now.Ticks.ToString() + new Random().Next(); db.ExecuteNonQuery("insert into OrderList values('"+code+"')"); foreach(DictionaryEntry i in k) { db.ExecuteNonQuery("insert into DetailsList values('"+code+"',"+Session["u_id"].ToString()+","+i.Key+","+i.Value+")"); } }}自己慢慢領悟把%D%A

C. 怎樣理解MVC三層架構

『一個良好的JSP頁面不能出現「<%……%>」』
並不是這樣的,只是能不過多的出現而已。這是不同專的。
JSP中,「<%…屬…%>」裡面的java代碼是可以有一些業務邏輯的,而三層架構正是要將業務邏輯從頁面中分離出來,因些不要過多的使用「<%……%>」,但根據實際情況,適量的添加一些是可以的。
而MVC呢,實際上其實是一種架構模式,而不應該歸入設計模式了,設計模式是在代碼層面上說的:你的類都是什麼樣子的。
MVC,是架構層面是的:你的項目框架是怎麼設計的。

D. 模型-視圖-控制器模式就是把業務邏輯從什麼中抽取出來,放在模型中.

m代表model模型v代表view視圖c代表controller控制器m包含寫業務邏輯取數據模型v代表顯示視圖c控制mv間關系mvc運行原理基本沒同mvc框架實現技術吧接我給考段網別看;
模型-視圖-控制器(MVC)Xerox PARC八十代編程語言Smalltalk-80發明種軟體設計模式至今已廣泛使用近幾推薦Sun公司J2EE平台設計模式並且受越越使用 ColdFusion PHP 發者歡迎模型-視圖-控制器模式用工具箱處些缺點

MVC何工作

MVC設計模式強制性使應用程序輸入、處理輸使用MVC應用程序三核部件:模型、視圖、控制器各自處理自任務

視圖
視圖用戶看並與交互界面式Web應用程序說視圖由HTML元素組界面新式Web應用程序HTML依舊視圖扮演著重要角色些新技術已層窮包括Macromedia Flash象XHTMLXML/XSLWML等些標識語言Web services.
何處理應用程序界面變越越挑戰性MVC處能應用程序處理同視圖視圖其實沒真處理發管些數據聯機存儲雇員列表作視圖講作種輸數據並允許用戶操縱式

模型
模型表示企業數據業務規則MVC三部件模型擁處理任務例能用象EJBsColdFusion Components構件象處理資料庫模型返數據立說模型與數據格式關模型能視圖提供數據由於應用於模型代碼需寫視圖重用所減少代碼重復性

控制器
控制器接受用戶輸入並調用模型視圖完用戶需求所單擊Web頁面超鏈接發送HTML表單控制器本身輸任何東西做任何處理接收請求並決定調用哪模型構件處理請求用確定用哪視圖顯示模型處理返數據
現我總結MVC處理程首先控制器接收用戶請求並決定應該調用哪模型進行處理模型用業務邏輯處理用戶請求並返數據控制器用相應視圖格式化模型返數據並通表示層呈現給用戶

要使用 MVC
部Web應用程序都用像ASPPHP或者CFML程化語言創建像資料庫查詢語句數據層代碼像HTML表示層代碼混起經驗比較豐富發者數據表示層離通容易做需要精計劃斷嘗試MVC根本強制性盡管構造MVC應用程序需要些額外工作給我帶處庸質疑
首先重要點視圖能共享模型我所提及現需要用越越式訪問應用程序其解決道使用MVC論用戶想要Flash界面或 WAP 界面;用模型能處理由於已經數據業務規則表示層所化重用代碼
由於模型返數據沒進行格式化所同構件能同界面使用例數據能用HTML表示能要用Macromedia FlashWAP表示模型狀態管理數據持久性處理功能例基於購物車電商務程能Flash網站或者線聯網應用程序所重用
模型自包含並且與控制器視圖相離所容易改變應用程序數據層業務規則想資料庫MySQL移植Oracle或者改變基於RDBMS數據源LDAP需改變模型即旦確實現模型管數據自資料庫或LDAP伺服器視圖確顯示由於運用MVC應用程序三部件相互立改變其影響其兩所依據種設計思想能構造良松偶合構件
我說控制器提供處使用控制器聯接同模型視圖完用戶需求控制器構造應用程序提供強力手段給定些重用模型視圖控制器根據用戶需求選擇模型進行處理選擇視圖處理結顯示給用戶

MVC缺點
MVC缺點由於沒明確定義所完全理解MVC並容易使用MVC需要精計劃由於內部原理比較復雜所需要花費些間思考
花費相觀間考慮何MVC運用應用程序同由於模型視圖要嚴格離給調試應用程序定困難每構件使用前都需要經徹底測試旦構件經測試毫顧忌重用

根據我經驗由於我應用程序三部件所使用MVC同意味著要管理比前更文件點顯易見像我工作量增加請記住比起所能帶給我處值提
MVC並適合型甚至等規模應用程序花費量間MVC應用規模並應用程序通償失
MVC條創建軟體途徑
MVC設計模式創建軟體途徑所提倡些原則像內容顯示互相離能比較理解要隔離模型、視圖控制器構件能需要重新思考應用程序尤其應用程序構架面肯接受MVC並且能力應付所帶額外工作復雜性MVC使軟體健壯性代碼重用結構面新台階

Java發Web Application幾種符合MVC設計模式發式
1:Jsp+Servlet+JavaBean(EJB)
2:Jsp+JavaBean(Controller)+JavaBean(EJB)(Model)
3:TDK(TurbineVelocity...)
4:Xsp
5:Jsp+Struts+JavaBean(EJB)

附:
三層架構即表現層業務層持久化層表現層實現代表作品Struts框架業務層實現代表作品Spring持久層實現代表作品Hibernate
舉例
持久層持久庫取-10
業務層按照定邏輯(我舉例取溫度邏輯)翻譯-10攝氏度
表示層顯現給用戶哎呀今冷
層相於黑盒我用知道內部實現需要知道何調用行每層與相鄰兩層打交道層內部由於技術變遷發變化要介面變其層用做任何改變層靈性提高便於團隊工發
呵呵寫詳細吧希望幫助

E. 寫出MVC的工作原理

1.當用戶在瀏覽器中點擊一個鏈接或者提交一個表單時,那麼就會產生一個請求(request)。當請求離開瀏覽器時,它會攜帶用戶請求的信息。


2.請求的第一站到達的是Spring的DispatcherServlet,它是一個前端控制器,工作是將用戶的請求委託給其他的組件(這里是交給Spring MVC的控制器)去處理。

這里DispatcherServlet要決定將請求傳給哪一個控制器(Controller)去處理,那麼這時就需要處理器映射(Handler Mapping)了。

處理器映射會看請求的URL信息,然後決定將請求交給哪一個控制器去處理。比如說有兩個控制器ControllerA和ControllerB,分別處理後綴名為.html和.jsp送來的請求,那麼當請求者的後綴名為.html時,那麼DispatcherServlet就將請求交給ControllerA進行處理。

C代表Controller,負責用戶界面和業務邏輯層的通信控制,一方面解釋來自用戶界面的輸入,識別用戶動作(如點擊按鈕等),調用相應Model中的方法,另一方面處理來自Model的事件和返回的執行結果,調用適當的View顯示給用戶,Controller主要由Servlet完成。

M代表Model,負責整個解決方案的業務邏輯實現,底層的資料庫也由Model訪問和操作;

V代表View,負責系統向用戶的展示,主要由HTML及JSP等完成;

拓展資料:

MVC組件說明:

以下組件通常使用框架提供實現:

DispatcherServlet:作為前端控制器,整個流程式控制制的中心,控制其它組件執行,統一調度,降低組件之間的耦合性,提高每個組件的擴展性。

HandlerMapping:通過擴展處理器映射器實現不同的映射方式,例如:配置文件方式,實現介面方式,註解方式等。

HandlAdapter:通過擴展處理器適配器,支持更多類型的處理器。

ViewResolver:通過擴展視圖解析器,支持更多類型的視圖解析,例如:jsp、freemarker、pdf、excel等。

組件:
1、前端控制器DispatcherServlet(不需要工程師開發),由框架提供
作用:接收請求,響應結果,相當於轉發器,中央處理器。有了dispatcherServlet減少了其它組件之間的耦合度。


用戶請求到達前端控制器,它就相當於mvc模式中的c,dispatcherServlet是整個流程式控制制的中心,由它調用其它組件處理用戶的請求,dispatcherServlet的存在降低了組件之間的耦合性。

2、處理器映射器HandlerMapping(不需要工程師開發),由框架提供
作用:根據請求的url查找Handler


HandlerMapping負責根據用戶請求找到Handler即處理器,springmvc提供了不同的映射器實現不同的映射方式,例如:配置文件方式,實現介面方式,註解方式等。

3、處理器適配器HandlerAdapter
作用:按照特定規則(HandlerAdapter要求的規則)去執行Handler


通過HandlerAdapter對處理器進行執行,這是適配器模式的應用,通過擴展適配器可以對更多類型的處理器進行執行。

4、處理器Handler(需要工程師開發)


注意:編寫Handler時按照HandlerAdapter的要求去做,這樣適配器才可以去正確執行Handler
Handler 是繼DispatcherServlet前端控制器的後端控制器,在DispatcherServlet的控制下Handler對具體的用戶請求進行處理。


由於Handler涉及到具體的用戶業務請求,所以一般情況需要工程師根據業務需求開發Handler。

5、視圖解析器View resolver(不需要工程師開發),由框架提供
作用:進行視圖解析,根據邏輯視圖名解析成真正的視圖(view)


View Resolver負責將處理結果生成View視圖,View Resolver首先根據邏輯視圖名解析成物理視圖名即具體的頁面地址,再生成View視圖對象,最後對View進行渲染將處理結果通過頁面展示給用戶。

springmvc框架提供了很多的View視圖類型,包括:jstlView、freemarkerView、pdfView等。

一般情況下需要通過頁面標簽或頁面模版技術將模型數據通過頁面展示給用戶,需要由工程師根據業務需求開發具體的頁面。

6、視圖View(需要工程師開發jsp...)
View是一個介面,實現類支持不同的View類型(jsp、freemarker、pdf...)

參考資料:網路-MVC

F. 什麼是MVC(三層架構)

MVC和三層架構有什麼區別就是MVC是最流行的三層架構中的一種框架,就是模型-視圖專-控制器三者分離。

MVC模式(Model–view–controller)是軟屬件工程中的一種軟體架構模式,把軟體系統分為三個基本部分:模型(Model)、視圖(View)和控制器(Controller)。

MVC模式最早由Trygve Reenskaug在1978年提出[1],是施樂帕羅奧多研究中心(Xerox PARC)在20世紀80年代為程序語言Smalltalk發明的一種軟體架構。MVC模式的目的是實現一種動態的程式設計,使後續對程序的修改和擴展簡化,並且使程序某一部分的重復利用成為可能。除此之外,此模式通過對復雜度的簡化,使程序結構更加直觀。軟體系統通過對自身基本部分分離的同時也賦予了各個基本部分應有的功能。專業人員可以通過自身的專長分組:

控制器(Controller)- 負責轉發請求,對請求進行處理。

視圖(View) - 界面設計人員進行圖形界面設計。

模型(Model) - 程序員編寫程序應有的功能(實現演算法等等)、資料庫專家進行數據管理和資料庫設計(可以實現具體的功能)。

G. MVC模式中的Model的理解

MVC(Model/View/Controller)模式是國外用得比較多的一種設計模式,好象最早是在Smaltalk中出現。MVC包括三類對象。Model是應用對象,View是它在屏幕上的表示,Controller定義用戶界面對用戶輸入的響應方式。
模型-視圖-控制器(MVC)是80年代Smalltalk-80出現的一種軟體設計模式,現在已經被廣泛的使用。
1、模型(Model)

模型是應用程序的主體部分。模型表示業務數據,或者業務邏輯.

2、視圖(View)

視圖是應用程序中用戶界面相關的部分,是用戶看到並與之交互的界面。

3、控制器(controller)

控制器工作就是根據用戶的輸入,控制用戶界面數據顯示和更新model對象狀態。

MVC 式的出現不僅實現了功能模塊和顯示模塊的分離,同時它還提高了應用系統的可維護性、可擴展性、可移植性和組件的可復用性

早期的程序中,如果不注意對數功能和顯示的解耦合,常常會導致程序的復雜及難以維護。很多VB,Delphi等RAD程序都有這種問題。甚至現在的C#,Java有時候也會出現把業務邏輯寫在顯示模塊中的現象

管MVC設計模式很早就提出,但在Web項目的開發中引入MVC卻是步履維艱。主要原因:一是在早期的Web項目的開發中,程序語言和HTML的分離一直難以實現。CGI程序以字元串輸出的形式動態地生成HTML內容。後來隨著腳本語言的出現,前面的方式又被倒了過來,改成將腳本語言書寫的程序嵌入在HTML內容中。這兩種方式有一個相同的不足之處即它們總是無法將程序語言和HTML分離。二是腳本語言的功能相對較弱,缺乏支持MVC設計模式的一些必要的技術基礎。直到基於J2EE的JSP Model 2問世時才得以改觀。它用JSP技術實現視圖的功能,用Servlet技術實現控制器的功能,用JavaBean技術實現模型的功能

JSP Model 1 與 JSP Model 2

SUN在JSP出現早期制定了兩種規范,稱為Model1和Model2。雖然Model2在一定程度上實現了MVC,但是它的應用用並不盡如人意

JSP Model 1

JSP Model 2

model2 容易使系統出現多個Controller,並且對頁面導航的處理比較復雜

有些人覺得model2仍不夠好,於是Craig R. McClanahan 2000年5月提交了一個WEB framework給Java Community.這就是後來的Struts.

2001年7月,Struts1.0,正式發布。該項目也成為了Apache Jakarta的子項目之一

Struts 質上就是在Model2的基礎上實現的一個MVC架構。它只有一個中心控制器,他採用XML定製轉向的URL。採用Action來處理邏輯

H. web前端學習分哪些階段

您好,web前端學習分為8個階段:

階段1.前端核心基礎

HTML +_CSS核心、JavaScript基礎語法、JavaScript面向對象、版JavaScript DOM和

BOM編程、jQuery框架權

階段2.HTML5 + CSS3 + 移動端核心

HTML5新特性、Canvas專列、CSS3新特性、CSS3進階、CSS3實例演練

階段3.移動端

移動端核心、移動端適配、移動端特效

階段4.伺服器端

伺服器端開發、資料庫操作、前後端交互核心、微信公眾號開發

階段5.JavaScript高級

JavaScript基礎深入剖析、JavaScript面向對象深入講解、JavaScript非同步編程、

JavaScript函數式編程JavaScript設計模式

階段6.前端必備

性能優化、版本控制工具、模塊化、項目構建工具

階段7.高級框架

React框架基本使用、React框架進階、Vue框架基本使用、Vue框架進階、Vue源碼分析

階段8.小程序

原生小程序入門、原生小程序API使用、小程序框架Mpvue

web前端學習有哪些階段

這個學習路線圖不管是自學還是參加培訓班都是可以的,希望可以幫助到你。

I. 袁可可的JSP技術中使用mvc模式實現web購物車是碩士論文嘛

你是要找這類參考文獻嗎?你可以看看(計算機科學與應用)刊物上的文獻吧,都是免費查閱的

J. JavaWeb學習路線

JavaWeb核心框架

  1. 持久層框架:Hibernate、iBATIS

  2. 表現層框架:Struts1、Struts2

  3. 業務層框架:Spring

  4. java學習路線圖:

    1、Hibernate:ORM

    Hibernate是一個Java ORM開發框架

    ORM是Object Relation Mapping的縮寫,顧名思義,即對象關系映射。

    ORM是一種以面向對象的方式來進行資料庫操作的技術。Web開發中常用的語言,都會有對應的ORM框架。而Hibernate就是Java開發中一種常用ORM框架,另一個現在流行的ORM框架是Mybatis。

    為什麼需要ORM框架?

    簡單地理解,通過Java進行資料庫訪問的正常流程可以分為以下幾步:

    准備好SQL語句

    調用JDBC的API傳入SQL語句,設置參數

    解析JDBC返回的結果

    這個過程實際上非常麻煩,比如:

    在Java代碼中拼接SQL非常麻煩,而且易於出錯

    JDBC的代碼調用有很多重復性的代碼

    從JDBC返回的結果轉換成領域模型的Java對象很繁瑣

    而使用ORM框架,則可以讓我們用面向對象的方式來操作資料庫,比如通過一個簡單的函數調用就完成上面整個流程,直接返回映射為Java對象的結果。這個流程中很大一部分工作其實可以交給ORM自動化地幫我們執行。對,類似MVC框架,ORM框架會幫你處理好相關的繁瑣事情!

    2. Struts:MVC

    Struts是一個Java Web MVC開發框架。MVC早在1978年就作為Smalltalk的一種設計模式被提出來了,引用到Web應用中來時:

    模型Model用於封裝與業務邏輯相關的數據和數據處理方法

    視圖View是數據的HTML展現

    控制器Controller負責響應請求,協調Model和View

    Model,View和Controller的分開,是一種典型的關注點分離的思想,不僅使得代碼復用性和組織性更好,使得Web應用的配置性和靈活性更好。

    MVC開發模式下,Java Web開發會遇到URL路由、模板渲染、表單綁定/提交/驗證、Session封裝、許可權驗證、國際化等一系列通用的問題,而MVC框架會將這些通用問題都封裝進框架中,你在應用中根據自己的場景進行簡單的配置和編碼即可,MVC框架就能幫你處理好一切,可以極大地簡化代碼。

    3.Spring:DI/AOP

    Spring對應的關鍵詞是DI(依賴注入)與AOP(面向切面編程),可以認為是一個以DI和AOP為核心Java Web一站式的集成(粘合)框架。

    其中DI也稱為IoC(控制發轉)用於管理Java對象之間的依賴關系(一定要說DI是IoC實現方式的童鞋們見評論區),AOP用於解耦業務代碼和公共服務代碼(如日誌,安全,事務等)。DI和AOP能夠讓代碼更加簡單,具有良好的松耦合特性和可測試性,極大地簡化開發。理解這兩者是使用Spring框架的基礎。

    Spring框架對Java企業應用開發中的各類通用問題都進行了良好的抽象,因此也能夠把應用各個層次所涉及的特定的功能和開發框架(如接下來要說的MVC框架、ORM框架)方便得組合到一起(這也得益於依賴注入和面向切面編程帶來的強大功能)。Spring是一個極其優秀的一站式的Full-Stack集成框架,因此基於Spring核心,對Java應用開發中的各類通用問題幾乎都提供了針對性的開發框架,比如你耳熟能詳(如果你對這個問題感興趣的話)的Spring MVC,Spring Data。

    Java曾經有另外一個類似的一站式框架粘合框架Seam,這是Hibernate的作者、脾氣火爆的大神Gavin King的作品,核心是基於依賴注入來黏合JSF和EJB,不過推出時Spring已經大殺四方,Seam基本已經退出歷史舞台了。記得Seam提過一個我認為很不錯的概念:「雙向注入」,類似現在前端框架中的雙向綁定,當時來說還是很超前的。