https://blog.csdn.net/ITBigGod/article/details/86515893
鑒於最近一些零基礎的朋友要做項目,我梳理一下web項目的運行流程,主要是說一下理解思路,有什么不足或不對的,多多理解。
在N久前,傳統的項目有用jsp+JavaBeans開發的,有用JSP+Servlet開發的,還有的是符合mvc的JSP+Servlet+JavaBeans開發的。這些說法都沒有錯。
前面兩個年代久遠,不說了,主要重點說一下,MVC模式。
1.JSP+JavaBean模式:
在現在的開發中, JSP+JavaBean模式開發非常之少了,除非你的項目只有芝麻大一點
它可以說web開發中的是第一代設計模式,主要是JSP充當視圖和控制器,而JavaBeans充當模型。
特點:該模式將業務邏輯與頁面表現進行分離,在一定程度上增加了程序的可調試性和維護性。
缺點:頁面將控制與顯示集於一身。
結論:簡單,適合小型項目的快速構建與運行。
2.JSP+Servlet模式:
后來慢慢發展,有人使用jsp+servlet模式來開發。
其中就分為:(可能層的定義不這么叫,我忘了具體的。)
- view層——類比jsp前台交互,比如我們頁面顯示等,但是jsp中也寫了數據交互的東西。JSTL等
- web層——類比servlet,它與前台數據進行交互,又和數據庫打交道,其次它也動態輸出html內。
簡單的例子
servlet層中有a方法,實現和數據庫交互,jsp將注冊信息提交給servlet,在servlet里調用a方法,來接收sp的數據,然后將數據就和數據庫關聯。
值得一提的是:Servlet和JSP的一大共同點:
Servlet和jsp都可以操作網頁:
• Servlet可以在.java文件中通過HttpServletResponse對象動態輸出HTML內容,比如out.print()。
• JSP在靜態HTML/JSP中可以嵌入Java代碼,常見JSTL標簽<%%>,Java代碼被動態執行后生成新的HTML內容。
也就是說,單單只用jsp或者serlvet都可以對網頁進行開發,也正是這樣,導致兩者它們都有難以維護和雜亂代碼的困擾。
所以!揚長避短——MVC(Model-View-Controller)模式非常適合解決這一問題。
3.mvc模式:JSP + Servlet + JavaBean三層架構
MVC模式(Model-View-Controller),是系統分為三個基本部分:模型(Model)、視圖(View)和控制器(Controller):
可以理解為:JSP充當視圖,Servlet充當控制器,JavaBeans充當模型。
- 1.View層(JSP),前台交互,比如我們注冊時的數據等等,serlvet就是與前台數據進行交互的
- 2.Contrller層(servlet充當):Model與View之間溝通的橋梁, 這個層有業務處理,用戶的注冊登錄就可以看做是User的業務,我們就需要將相關的處理代碼寫到這個層中。
- 3.Model層:實現系統的業務邏輯,即javaBean,常見的就是封裝對象的屬性、數據庫連接操作等。
- 常規會寫一個dao層,是屬於mvc里面Model層抽出來。目的就是更單純的和數據庫打交道,將servlet的數據和數據庫進行交互。
特點:JSP作為視圖,來表現頁面;Servlet作為控制器,控制程序的流程並調用業務進行處理;JavaBean封裝了業務邏輯。遵循了MVC設計模式
缺點:沒有統一的開發框架導致開發周期長
圖示:
在MVC開發的軟件系統中,描述如下所示:
通俗的說,就是web broswer通過view層的jsp頁面發出的所有的http請求都應該交給servlet,即控制層來。servlet通過對Javabean,即核心的Model層處理,得到處理結果,然后返回給view層的Jsp頁面。Jsp頁面返回給瀏覽器最后的html網頁。
- 1
簡單的例子:
比如用戶的注冊業務——addUser()
前台取得注冊信息--封裝到user對象中,然后調用user的業務,即注冊功能控制。
這時就跳到Contrller層,然后此層調用dao中的方法將數據存入數據庫。
- 1
- 2
- 3
在實際應用中可以這樣理解:
.JSP,.html屬於視圖層,
servlet屬於控制器層,
Class類文件屬於javabeans。
(上層的依賴下層的,servlet是用JAVA寫的控制器層。)
對應項目的圖示:
這種最經典的mvc模式了。
總結:MVC大體上是jsp+Javabean+Servlet,MVC模式在Web開發中的好處是非常明顯,它規避了JSP與Servlet各自的短板,Servlet只負責業務邏輯而不會通過out.append()動態生成HTML代碼;JSP中也不會充斥着大量的業務代碼,這大大提高了代碼的可讀性和可維護性。