1. 程式人生 > >javaWeb 三層架構

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