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