javascript
大剑无锋----SpringMVC原理详细解析
SpringMVC
談到這個問題,我們不得不提提之前 Model1 和 Model2 這兩個沒有 Spring MVC 的時代。
?
----Model1 時代?: 很多學(xué) Java 后端比較晚的朋友可能并沒有接觸過 Model1 模式下的 JavaWeb 應(yīng)用開發(fā)。在 Model1 模式下,整個 Web 應(yīng)用幾乎全部用 JSP 頁面組成,只用少量的 JavaBean 來處理數(shù)據(jù)庫連接、訪問等操作。這個模式下 JSP 即是控制層又是表現(xiàn)層。顯而易見,這種模式存在很多問題。比如①將控制邏輯和表現(xiàn)邏輯混雜在一起,導(dǎo)致代碼重用率極低;②前端和后端相互依賴,難以進(jìn)行測試并且開發(fā)效率極低;
?
----Model2 時代?:學(xué)過 Servlet 并做過相關(guān) Demo 的朋友應(yīng)該了解“Java Bean(Model)+ JSP(View,)+Servlet(Controller) ”這種開發(fā)模式,這就是早期的 JavaWeb MVC 開發(fā)模式。Model:系統(tǒng)涉及的數(shù)據(jù),也就是 dao 和 bean。View:展示模型中的數(shù)據(jù),只是用來展示。Controller:處理用戶請求都發(fā)送給 ,返回數(shù)據(jù)給 JSP 并展示給用戶。
?
Model2 模式下還存在很多問題,Model2的抽象和封裝程度還遠(yuǎn)遠(yuǎn)不夠,使用Model2進(jìn)行開發(fā)時不可避免地會重復(fù)造輪子,這就大大降低了程序的可維護(hù)性和復(fù)用性。于是很多JavaWeb開發(fā)相關(guān)的 MVC 框架應(yīng)該運(yùn)而生比如Struts2,但是 Struts2 比較笨重。隨著 Spring 輕量級開發(fā)框架的流行,Spring 生態(tài)圈出現(xiàn)了 Spring MVC 框架, Spring MVC 是當(dāng)前最優(yōu)秀的 MVC 框架。相比于 Struts2 , Spring MVC 使用更加簡單和方便,開發(fā)效率更高,并且 Spring MVC 運(yùn)行速度更快。
?
MVC 是一種設(shè)計模式,Spring MVC 是一款很優(yōu)秀的 MVC 框架。Spring MVC 可以幫助我們進(jìn)行更簡潔的Web層的開發(fā),并且它天生與 Spring 框架集成。Spring MVC 下我們一般把后端項目分為 Service層(處理業(yè)務(wù))、Dao層(數(shù)據(jù)庫操作)、Entity層(實體類)、Controller層(控制層,返回數(shù)據(jù)給前臺頁面)。
?
對于springMVC簡單原理的圖示,我比較喜歡之前在網(wǎng)上看到的以為大V的圖:
?
那么SpringMVC web的原理呢,還是這位大佬的圖示和解釋:
?
?
?
流程說明(重要):
1.客戶端(瀏覽器)發(fā)送請求,直接請求到?DispatcherServlet(前端控制器)。
2.DispatcherServlet?根據(jù)請求信息調(diào)用?HandlerMapping(處理器映射器),解析請求對應(yīng)的?Handler。
3.解析到對應(yīng)的?Handler(也就是我們平常說的?Controller?控制器)后,開始由?HandlerAdapter?(處理器適配器)處理。
4.HandlerAdapter?會根據(jù)?Handler來調(diào)用真正的處理器開處理請求,并處理相應(yīng)的業(yè)務(wù)邏輯。
處理器處理完業(yè)務(wù)后,會返回一個?ModelAndView?對象,Model?是返回的數(shù)據(jù)對象,View?是個邏輯上的?View。
5.ViewResolver?(視圖解析器)會根據(jù)邏輯?View?查找實際的?View。
6.DispaterServlet?把返回的?Model?傳給?View(視圖渲染)。
7.把?View?返回給請求者(瀏覽器)
?
總結(jié)
以上是生活随笔為你收集整理的大剑无锋----SpringMVC原理详细解析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大剑无锋之浅析Cookie/Sessio
- 下一篇: springMVC——SpringMVC