在早期的JavaWeb應用中,JSP文件負責處理業務邏輯,控制網頁流程並創建HTML頁面,JSP文件是一個獨立的,能自主完成所有任務的模塊,
這帶來了一系列問題:
HTML代碼和Java程序代碼強耦合在一起
內嵌的流程控制邏輯
調試困難
可維護性差
可讀性差
為了解決以上問題,SUN公司先後制定了兩種設計模式:jspmodel1以及jspmodel2
本質區別:在於負責流程控制的組件不同。
在JSP Model1中,JSP頁面負責調用模型組件來響應客戶請求,並將處理結果返回給用戶。
JSP既要負責流程控制,還要負責產生用戶界面,因此它要同時充當視圖和控制器的需要,但它不適合開發復雜的大型應用程序。
JSP Model2用JSP技術實現視圖的功能,用Servlet技術實現控制器的功能,用JavaBean實現模型的功能:
Servlet充當控制器的角色,負責處理客戶請求,創建JSP頁面需要使用的JavaBean對象,並更具客戶請求選擇合適的JSP頁面返回給客戶。 在JSP頁面內沒有流程控制邏輯,它僅負責檢索原先由Servlet創建的JavaBean對象,並把JavaBean對象包含的數據作為動態內容插入到靜態模板中。 它清晰地分離了數據展示,數據處理和流程控制。
在Model2中,使用一個Servlet或者Filter充當控制器Controller,所有現代的Web框架都是Model2實現。像Struct1和spring MVC這類框架是在他們的MVC架構中使用一個Servlet Controller,而Structs2則使用Filter。 盡管也支持其他的View技術,但一般來說,它用JSP頁面作為應用程序的View。至於Model,則是使用POJO對象。許多人選擇使用JavaBean保存模型對象的狀態,並將業務邏輯轉移到一個Action類中。
在Model2應用程序中,每一個HTTP請求都必須被定向到Controller中。請求的URI告訴控制器要調用那一個Action。Action是指應用程序能夠執行的一項操作。一個Action類可以用來服務幾個不同的Action或單個Action。控制器會仔細查看URI,決定要調用哪一項Action。它還會將模型對象保存在一個可以通過View訪問到的地方,以便服務器端的值可以在浏覽器中顯示出來。最後,控制器用一個RequestDIspatcher跳轉到一個View。在View(JSP)頁面中,利用EL表達式和定制標簽來顯示值。
目前,javaee體系主要采用的是MVC模式,MVC是模型(model),視圖(view)和控制(controller)的縮寫。 這種技術是某model2實現的。
MVC主要用於實現web系統的職能分工。
在MVC分層結構中:
model層主要實現系統中的業務邏輯,通常可以用javabean或EJB來實現。
view層主要是用於和用戶的交互,主要用jsp來實現。
controller是model和view之間溝通的橋梁,他可以分派用戶的請求,並選擇恰當的view來實現交互,同時可以解析用戶得輸入,並將其映射成模型層可以執行的操作。通常用servlet實現。
通常意義上的三層架構:把整個業務應用分為三層:表現層(UI),業務邏輯層(BLL),數據訪問層(DAL)
三層架構的目的:高內聚,低耦合。
表現層(UI):通俗地講,是展現給用戶的東西,也就是用戶在使用應用的時候能看到的一切。
業務邏輯層(BLL):根據具體問題的操作,對數據業務進行邏輯的處理
數據訪問層:(DAL):直接對數據庫進行操作,也就是對數據庫進行增刪查改等操作。