• 沒有找到結果。

第四章 系統實作與展示

4.2. 相關技術

在 介 紹 系 統 實 作 之 前 , 先 介 紹 與 系 統 開 發 的 相 關 重 要 技 術 , 包 含 Model-View-Controller(MVC)、Front Controller、Connection Pool 以及 JNDI 等,使用這些技術開發系統,使得系統達到高內聚力(Cohesion)與低耦合度

(Coupling)的模組化系統,也能使系統開發上更加方便。

39

4.2.1. Model-View-Controller(MVC)

在 Web 開發技術中,MVC 是相當實用也最普遍的設計模式,如圖 16。MVC 的基本觀念是將 Web 應用程式的分成模型層(Model)、顯示層(View)、控 制層(Controller)等三個邏輯層次來設計:

1. Model:包含資料處理服務的商業元件。

2. View:呈現給使用者的網頁內容。

3. Controller:控制應用程式的執行流程。

在 MVC 架構中,Controller 負責接收應用程式的所有請求,負責協調應用 程式的執行流程,可利用 Servlet 來實現。對於所有請求,Controller 都根據請求 來決定是否需要處理或資料是否需要顯示。如果有資料需要顯示出來,Controller 便會委託或轉送要求給 View,由 View 來呈現處理結果,可以是 JSP、XML 或 是 HTML 檔案。如果有一些資料需要進一步處理(例如:要從資料庫中擷取資 料),那麼 Controller 就會呼叫適當的 JavaBean 類別來執行要求。

圖 16. MVC 架構圖[7]

在此種方式之下,MVC 架構擁有了個別的 JSP 處理資料呈現結果,並有一 個中央控器負責協調應用程式的完整流程。因此,這種架構最大的優點是資料呈 現方式與資料處理方式得以分離。針對相同的資料,網頁開發人員可以輕易設計

View JSP

Model JavaBean Controller JSP 或 Servlet

資料庫 HTML

40

各種資料呈現方式。如果資料處理與檢核規則需要更改,也不會影響整體資料呈 現方式。

4.2.2. Front Controller

Front Controller 設計模 式的 基本概 念 是設計 一個 應用程 式 元件 ( Front Component),做為 Web 應用程式的進入點,或是某種商業流程的起始點。在以 Java 為基礎的 Web 應用程式中,可以利用 JSP 或是 Servlet 來實作。Front Controller 設計方式可以負責下列工作:

1. 使用者身分驗證。

2. 將使用者的請求轉送給不同的網頁。

3. 集中管理網頁流程。

Front Controller 可以將使用者的請求轉送給適當的網頁或是服務,另外針對 每一個商業流程部分,可以在 Front Controller 內集中管理所有網頁的執行流程,

因此可以讓網頁流程易於修改與維護。Front Controller 架構如圖 17。

圖 17. Front Controller 架構[34]

4.2.3. 連結池(Connection Pooling)

大部分的網站應用程式,都會操作資料庫以取得資料,然後將結果顯示為網 頁。當每次使用者瀏覽網頁檢視資料時,網站應用程式便需要為瀏覽動作建立資 料庫連結。當使用者完成瀏覽,則將關閉連結。但是對於伺服器來說,建立與關

Client Front

Controller

jsp html Servlet requrst

41

閉資料庫資料連結是非常耗費電腦資源與時間的,因此,必頇運用連結池的觀念 減少建立與關閉資料庫連結的運作。連結池架構如圖 18 所示。

連結池的觀念主要是在伺服器上,預先完成許多資料資料庫連結的建立,然 後放在儲存序列內,等待連結,就好像連結儲存在一個池子裡。當使用者瀏覽網 頁時,網站應用程式便在連結池裡,取得已經完成建立,但尚未被使用的資料庫 連結。當完成資料取用,不需要連結資料庫時,便將此連結歸還給連結池,等待 提供給下一個連結需求使用。而連結池則必頇負責維護這些資料庫的建立及關閉 等動作。

使用者A

使用者B

使用者C

資料庫 連結資源

連結資源 資料庫連線 連結資源

取消連線

資料庫連線

連結池 連結資源

使 使

圖 18. 連結池架構[4]

4.2.4. JNDI

為了實作連結池的概念,還需要使用一個很重要的技術稱為 Java 命名和目 錄服務(Java Naming and Directory Interface, JNDI),目前 JSP 連結資料庫的方 式有以下二種:

1. Class.forName:使用此種方式要先載入取得資料庫連結的驅動程式,再透過 DriverManager 註冊驅動程式,取得資料庫連結。但是更換連結資料庫的驅 動程式,或者更換伺服器所使用的資料庫時,程式開發人員需要更新所有載

42

入 Class.forName 的檔案,因此相當麻煩。

2. JNDI:JNDI 是用於存取不同種類的命名和目錄服務的應用程式資源,而資 源種類包含資料庫、Mail、系統環境以及電腦各種資源都可以使用 JNDI 設 定,資料庫可以同時設定不同資料庫驅動程式相關資訊,包括 ODBC、SQL Server、MySql 及 Oracle 等。因此使用 JNDI 方式去連結資料庫,只需要程 式開發人員載入 JNDI 中所指定的資料庫資源。如果需要更改資料庫相關資 訊,只需在 JNDI 修改,而不用像 Class.forName 方式更動所有載入資料庫 的相關檔案。

4.2.5. Servlet

Servlet 是一種網頁元件,也是一種產生動態網頁內容的程式。Servlet 是使 用 Java Servlet API 寫成的,並且由伺服器或類似 Tomcat 的 container 來管理的。

可以寫出動態處理用戶端要求及回應的程式。Servlet 很適合拿來當做控制器元件 來使用,會根據用戶端的要求來採取動作,可協調其他 Servlet、共用物件、資源 檔案、資料庫及其他可使用的系統資源。

4.2.6. Singleton

很多時候,系統運作時候需要 Singleton 模式,例如印表機管理,您希望程 式中只能有一個列印多工緩衝處理器(Print Spooler),以避免兩個列印動作同 時輸入至印表機中;例如資料庫管理,因為建立連接(Connection)物件會耗用 資源,您希望程式中只能有一個連接物件,所有其它的程式都透過這個物件來連 接資料庫,以避免連接物件的重複開啟造成資源的耗用;例如系統程式屬性檔的 讀取,您使用單一個物件來讀取屬性內容,而程式的其它部份都向這個物件要求 屬性資料,而不是自行讀取屬性資料。

43

相關文件