JSP 程序開發模式包括 JSP 編程、JSP+JavaBean 編程、JSP+JavaBean+Servlet 編程、MVC 模式。
在 JSP 編程模式下,通過應用 JSP 中的腳本標志,可以直接在 JSP 頁面中實現各種功能。雖然這種模式很容易實現,但是,其缺點也非常明顯。因為將大部分的 Java 代碼與 HTML 代碼混淆在一起,會給程序的維護和調試帶來很多困難,而且難以理清完整的程序結構。
這就好比規劃管理一個大型企業,如果將負責不同任務的所有員工都安排在一起工作,勢必會造成公司秩序混亂、不易管理等許多隱患。所以說,單純的 JSP 頁面編程模式是無法應用到大型、中型甚至小型的 JSP Web 應用程序開發中的。
JSP+JavaBean 編程模式是 JSP 程序開發經典設計模式之一,適合小型或中型網站的開發。利用 JavaBean 技術,可以很容易地完成一些業務邏輯上的操作,例如數據庫的連接、用戶登錄與注銷等。
JavaBean 是一個遵循了一定規則的 Java 類,在程序的開發中,將要進行的業務邏輯封裝到這個類中,在 JSP 頁面中,通過動作標簽來調用這個類,從而執行這個業務邏輯。此時的 JSP 除了負責部分流程的控制外,主要用來進行頁面的顯示,而 JavaBean 則負責業務邏輯的處理。
可以看出,JSP+JavaBean 設計模式具有一個比較清晰的程序結構,在 JSP 技術的起步階段,該模式曾被廣泛應用。
圖 1 表示該模式對客戶端的請求進行處理的過程,相關的說明如下。
1.用戶通過客戶端瀏覽器請求服務器。
2.服務器接收用戶請求后調用 JSP 頁面。
3.在 JSP 頁面中調用 JavaBean。
4.在 JavaBean 中連接及操作數據庫,或實現其他業務邏輯。
5.JavaBean 將執行的結果返回 JSP+ 頁面。
6.服務器讀取 JSP 頁面中的內容(將頁面中的靜態內容與動態內容相結合)。
7.服務器將最終的結果返回給客戶端瀏覽器進行顯示。
圖1 JSP+JavaBean設計模式
JSP+JavaBean 設計模式雖然已經對網站的業務邏輯和顯示頁面進行了分離,但這種模式下的 JSP 不但要控制程序中的大部分流程,而且還要負責頁面的顯示,所以仍然不是一種理想的設計模式。
在 JSP+JavaBean 設計模式的基礎上加入 Servlet 來實現程序中的控制層,是一個很好的選擇。在這種模式中,由 Servlet 來執行業務邏輯并負責程序的流程控制,JavaBean 組件實現業務邏輯,充當模型的角色,JSP 用于頁面的顯示??梢钥闯?,這種模式使得程序中的層次關系更明顯,各組件的分工也非常明確。圖 2 表示該模式對客戶端的請求進行處理的過程。
圖2 JSP+JavaBean+Servlet 設計模式
圖 2 所示的模式中,各步驟的說明如下。
1.用戶通過客戶端瀏覽器請求服務器。
2.服務器接收用戶請求后調用 Servlet。
3.Servlet 根據用戶請求調用 JavaBean 處理業務。
4.在 JavaBean 中連接及操作數據庫,或實現其他業務邏輯。
5.JavaBean 將結果返回 Servlet,在 Servlet 中將結果保存到請求對象中。
6.由 Servlet 轉發請求到 JSP 頁面。
7.服務器讀取 JSP 頁面中的內容(將頁面中的靜態內容與動態內容結合)。
8.服務器將最終的結果返回給客戶端瀏覽器進行顯示。
但 JSP+JavaBean+Servlet 模式同樣也存在缺點。該模式遵循了 MVC 設計模式,MVC 只是一個抽象的設計概念,它將待開發的應用程序分解為三個獨立的部分:模型(Model)、視圖(View)和控制器(Controller)。
雖然用來實現 MVC 設計模式的技術可能都是相同的,但各公司都有自己的 MVC 架構。也就是說,這些公司用來實現自己的 MVC 架構所應用的技術可能都是 JSP、Servlet 與 JavaBean,但它們的流程及設計卻是不同的,所以工程師需要花更多的時間去了解。
從項目開發的觀點上來說,因為需要設計 MVC 各對象之間的數據交換格式與方法,所以在系統的設計上需要花費更多的時間。
使用 JSP+JavaBean+Servlet 模式進行項目開發時,可以選擇一個實現了 MVC 模式的現成的框架,在此框架的基礎上進行開發,能夠大大節省開發時間,會取得事半功倍的效果。目前,已有很多可以使用的現成的 MVC 框架,例如 Struts 框架。
MVC(Model-View-Controller,模型-視圖-控制器)是一種程序設計概念,它同時適用于簡單的和復雜的程序。使用該模式,可將待開發的應用程序分解為三個獨立的部分:模型、視圖和控制器。
提出這種設計模式主要是因為應用程序中用來完成任務的代碼(模型,也稱為“業務邏輯”)通常是程序中相對穩定的部分,并且會被重復使用,而程序與用戶進行交互的頁面(視圖),卻是經常改變的。
如果因需要更新頁面而不得不對業務邏輯代碼進行改動,或者要在不同的模塊中應用相同的功能時重復地編寫業務邏輯代碼,不僅會降低整體程序開發的進程,而且會使程序變得難以維護。因此,將業務邏輯代碼與外觀呈現分離,將會更容易地根據需求的改變來改進程序。MVC 模式的模型如圖 3 所示。
圖3 MVC模式的模型
Model(模型):MVC 模式中的 Model(模型)指的是業務邏輯的代碼,是應用程序中真正用來完成任務的部分。
View(視圖):視圖實際上就是程序與用戶進行交互的界面,用戶可以看到它的存在。視圖可以具備一定的功能,并應遵守對其所做的約束。在視圖中,不應包含對數據處理的代碼,即業務邏輯代碼。
Controller(控制器):控制器主要用于控制用戶請求并做出響應。它根據用戶的請求,選擇模型或修改模型,并決定返回什么樣的視圖。