我正在學習如何編寫網站在Java和我的問題是什麼是連接到數據庫的正確方法?JSP - 連接到數據庫
從JSP級別連接到數據庫(如網絡上的許多教程建議)在我看來是一個非常糟糕的主意,因爲JSP應該僅用於一個視圖,而不是邏輯。
我應該創建一個從數據庫中獲取數據的類嗎?並用「useBean」標籤以某種方式初始化它?數據庫連接失敗時應該如何處理異常?我很瞭解Java SE,但在Java EE中,我是一個完整的初學者,所以任何建議和示例代碼都會非常有幫助。
我正在學習如何編寫網站在Java和我的問題是什麼是連接到數據庫的正確方法?JSP - 連接到數據庫
從JSP級別連接到數據庫(如網絡上的許多教程建議)在我看來是一個非常糟糕的主意,因爲JSP應該僅用於一個視圖,而不是邏輯。
我應該創建一個從數據庫中獲取數據的類嗎?並用「useBean」標籤以某種方式初始化它?數據庫連接失敗時應該如何處理異常?我很瞭解Java SE,但在Java EE中,我是一個完整的初學者,所以任何建議和示例代碼都會非常有幫助。
你的直覺是對的。如果可能的話,您不應該直接從JSP連接到數據庫。大多數程序由幾個層組成。例如:
你必須擁有一個責任DAO(數據訪問對象):從數據庫中獲取數據。它不關心那些數據會發生什麼,但它會檢索它。
然後你有做業務邏輯,計算等它不關心其中的數據來自於業務層,它只是假定數據是存在(但它是從DAO)
然後你具有用於準備要在JSP中使用的信息的用戶界面層,執行JSP不能做的轉換,過濾掉不需要的信息等等。並且再一次,它不知道數據來自何處,它只是從服務層獲取它。
我建議你像這樣構建你的應用程序。它使測試更容易,因爲您只需測試數據庫而不關心用戶界面,或者只測試用戶界面而不關心數據庫。大多數嚴重的應用程序都是這樣構建的,儘管通常涉及更多的圖層。
注意,實際構建DAO層不要求,系統,如JPA或者Hibernate或者Spring數據可以生成大部分。
如果你打算寫一個servlet/JSP基於Web應用程序,你應該知道關於使用兩種模式:
模型1(頁中心)架構基於頁面。客戶端瀏覽器將通過一系列頁面,每個頁面都可以使用JavaBean來執行業務邏輯。這種架構的本質是每個頁面都在處理自己的輸入。這種架構適用於小型項目。
Model 2體系結構(MVC,Servlet的中心)分開的內容的內容創建和顯示。它在客戶端瀏覽器和JSP(或表示內容的servlet)之間有一個servlet控制器。 Servlet控制器將請求發送到適當的JSP頁面。在這個模型中,部分演示文稿(JSP)彼此隔離。它是更靈活,更可擴展的架構。
要使用模板Singleton使用數據庫,可以創建在一個單獨的JavaBean連接池(在第一種情況下),或在servlet-控制器init()
方法(在第二種情況)。
您還可以閱讀關於實現模式MVC並使用它們的框架 - Apache Struts,Spring MVC。
你有任何MVC模型使用代碼的好例子嗎?任何用戶的不滿或任何事情? –
在這裏看看,例如 - [The Java EE 5 Tutorial](http://docs.oracle.com/javaee/5/tutorial/doc/bnahb.html) –
還有[Java Pet Store](http:// www.oracle.com/technetwork/java/petstore1-3-1-02-139690.html) –
無論thesaurier_rex說的是對的。
但我只是給一些多層
UI(你的JSP/HTML)
你可以得到更多信息here
非常感謝您的評論。它解釋了我很多。我要像這樣建立我的網站。我只有兩個問題:首先關於數據庫連接異常處理。 DAO方法應該拋出異常(所以可以從業務層面處理)或者捕獲它們?第二個問題:在servlet中執行業務邏輯並重定向到正確的JSP頁面是否是一個好習慣? –
那麼,我刪除了我的帖子,反正,對於初學者來說,開始學習Spring/DAO/Hibernate是一個很好的挑戰。這種技術適用於高數據交換的「大」站點。祝你好運 –
你不應該擔心DAO異常。如果你的數據庫關閉了,或者不可用,那麼你的應用程序可能根本就不會做任何事情,而且這種異常的類型並不真正相關。您可以捕獲異常,以便能夠向用戶顯示「網站已關閉」消息,但除此之外,您可以做的事情很少。 –