javaWeb 三層架構

一、設計模式 Model 1 和Model 2

    Model 1

      前面學習了Servlet和Jsp,對這兩個有個大概的認識,Servlet就是爲了解決靜態頁面的問題,能夠實現動態的頁面,使維護,開發更加的方便,但是也有缺點,在Servlet嵌入HTML代碼實在是太麻煩了,每次都要out.println();輸出。所以就有了Jsp,JSP中的內容就是html,爲的就是方便寫html,寫頁面,本質上JSP也是一個servlet,所以在它中也會不可避免的要寫一些java代碼,也就是腳本,爲了不讓其那麼混亂,就增加了標籤,EL表達式來儘量代替腳本。但是在寫一些項目時,還是會很麻煩,原因是業務邏輯代碼,與數據庫交互的代碼,HTML代碼這些類別,風格,作用完全不同的都混雜在了一起,造成的結果是代碼的維護性,可讀性以及擴張性都非常差,比如要改一個需求,那麼必須要把全部代碼都看完,理解到,不然你可能會因爲修改了一處代碼,導致別的地方多處錯誤,這種設計模式也叫做 模式一(Model 1),應該是以前技術還沒那麼好時才這樣寫的。

    Model 2(MVC)

      爲了改進上面所說的缺點,也就是將業務邏輯代碼放一起,顯示頁面的HTML代碼放一起,與數據庫交互的代碼放一起,這樣開發思路更加清晰,維護起來也更加方便,這種就叫做MVC模式,M:Model 模型,代表着業務邏輯代碼與數據庫代碼,V:View 對數據的展示代碼,比如JSP頁面,就是專門用來展示數據,美化頁面的  C:Controller  控制,Servlet來充當這一角色,連接着View和Model,從View中獲得指令,在從model中通過業務邏輯代碼獲取需要的數據,然後在通過Servlet去交給View層去顯示。也就是MVC三層結構的意義

      本來想自己畫個圖,但是奈何越畫越複雜,就從網上找了一個個人覺得比較不錯的圖來進行講解

                  

        就這個圖來分析一波,畫的確實挺不錯的,首先,我們打開瀏覽器,輸入網址,就是到服務器中請求頁面(JSP也可能是別的),然後顯示到瀏覽器上,然後通過點擊JSP頁面上的內容,提交請求,到服務器中,也就到了Control(Servlet)這一塊,Servlet通過分析請求,知道用戶需要什麼,需要數據,那麼就通過Model,從數據庫拿到數據,在將數據顯示在JSP中,在將JSP發送回瀏覽器,顯示在用戶看,所以我們經常說,JSP就是View層,給用戶看的,Servlet作爲控制流程,而編寫操作數據庫代碼,業務邏輯代碼就屬於Model。這就是MVC的應用。

 

二、經典三層架構

      表示層(web層)、業務邏輯層(service層)、數據訪問層(dao層),用一張圖來描述這其中的關係

            

      因爲現在只學習Servlet,Jsp,所以在表示層中就放的是Servlet和Jsp了,如果學了3大框架,Struts、Hibernate、Spring、會發現Struts是處理表示層的一個框架,而Hibernate是在dao層的一個框架,spring就是service層了。

              

 

三、總結

    1、經典三層架構和MVC的關係?

        他們是兩個毫無相關的東西,經典三層架構是一種分層思想,將開發模式分爲了這三層,每個人根據自己的專長,開發不同的模塊,比如,前端工程師,那麼就專研表示層即可,想辦法如何讓頁面變的更好看,如何吸引別人,而有些專門做數據庫工作的人,就可以只關注操作數據庫的活,如何讓查詢更加快速有效,而不必關注數據該如何顯示這種問題。這就是分層帶來的巨大好處。

         而MVC是一種設計模式,目的是讓HTML代碼和業務邏輯代碼分開,讓代碼看起來更加清晰,便於開發。

         硬說他們有關係的話,只能說他們有共同的點,分層,解耦。

 

    2、實際項目中的包命名結構,其也是按照三層架構思想來進行編寫代碼的,

         腦袋裏要保持着這種思想進行開發

          

          xxx:代表公司名稱

          yyy:代表項目名稱

 

      com.xxx.yyy.dao      dao層接口

      com.xxx.yyy.dao.impl    dao層實現

      com.xxx.yyy.service    service層接口

      com.xxx.yyy.service.impl  service層實現      

      com.xxx.yyy.web      web層

      com.xxx.yyy.util      工具包

      com.xxx.yyy.domain    javabean