springmvc理解小結


springMVC

首先了解MVC,

MVC是什么?
MVC模式是一種復合模式,它將多個設計模式在一種解決方案中結合起來,用來解決許多設計問題。

MVC的結構:
MVC模式把用戶界面交互分拆到不同的三種角色中,使應用程序被分成三個核心部件:Model(模型)、View(視圖)、Control(控制器)

(1)模型:模型持有所有的數據、狀態和程序邏輯。模型獨立於視圖 和控制器。(數據的擁有者)
(2)視圖:用來呈現模型。視圖通常直接從模型中取得它需要顯示的 狀態與數據。對於相同的信息可以有多個不同的顯示形式 或視圖。(顯示數據)
(3)控制器:位於視圖和模型中間,負責接受用戶的輸入,將輸入進 行解析並反饋給模型,通常一個視圖具有一個控制器。
(收到請求,將數據通過視圖呈現出來)

MVC的好處:

(1)一個模型提供不同的多個視圖表現形式,也能夠為一個模型創建新的視圖而無須重寫模型。一旦模型的數據發生變化,模型將通知有的視圖,每個視圖相應地刷新自己。

 

(2)模型可復用。因為模型是獨立於視圖的,所以可以把一個模型獨 立地移植到新的平台工作。


(3)提高開發效率。在開發界面顯示部分時,你僅僅需要考慮的是如何布局一個好的用戶界面;開發模型時,你僅僅要考慮的是業務邏輯和數據維護,這樣能使開發者專注於某一方面的開發,提高開發效率。

springmvc
springmvc是什么?
基於spring在MVC上的一個框架

springmvc的作用?
框架的作用都是為了提高代碼的質量,
(springmvc的controller是單例的)整個程序只有一個對象實例。Spring的安全性是通過綁定threadlocal實現

springmvc的組件:
1、前端控制器DispatcherServlet(不需要程序員開發)
作用接收請求,響應結果,相當於轉發器,中央處理器。
有了DispatcherServlet減少了其它組件之間的耦合度。

2、處理器映射器HandlerMapping(不需要程序員開發)
作用:根據請求的url查找Handler

3、處理器適配器HandlerAdapter
作用:按照特定規則(HandlerAdapter要求的規則)去執行Handler

4、處理器Handler(需要程序員開發)
注意:編寫Handler時按照HandlerAdapter的要求去做,這樣適配器才可以去正確執行Handler

5、視圖解析器View resolver(不需要程序員開發)
作用:進行視圖解析,根據邏輯視圖名解析成真正的視圖(view)

6、視圖View(需要程序員開發jsp)
View是一個接口,實現類支持不同的View類型(jsp、freemarker、pdf…)

 

流程:
1.用戶向服務器發送請求,請求被Spring 前端控制Servelt DispatcherServlet捕獲;
2.DispatcherServlet對請求URL進行解析,得到請求資源標識符(URI)。然后根據該URI,調用HandlerMapping獲得該Handler配置的所有相關的對象(包括Handler對象以及Handler對象對應的攔截器),最后以HandlerExecutionChain對象的形式返回;
3.DispatcherServlet 根據獲得的Handler,選擇一個合適的HandlerAdapter。(附注:如果成功獲得HandlerAdapter后,此時將開始執行攔截器的preHandler(…)方法)
4.提取Request中的模型數據,填充Handler入參,開始執行Handler(Controller)。 在填充Handler的入參過程中,根據你的配置,Spring將幫你做一些額外的工作:
HttpMessageConveter: 將請求消息(如Json、xml等數據)轉換成一個對象,將對象轉換為指定的響應信息
數據轉換:對請求消息進行數據轉換。如String轉換成Integer、Double等
數據根式化:對請求消息進行數據格式化。 如將字符串轉換成格式化數字或格式化日期等
數據驗證: 驗證數據的有效性(長度、格式等),驗證結果存儲到BindingResult或Error中
5.Handler執行完成后,向DispatcherServlet 返回一個ModelAndView對象;
6.根據返回的ModelAndView,選擇一個適合的ViewResolver(必須是已經注冊到Spring容器中的ViewResolver)返回給DispatcherServlet ;
7.ViewResolver 結合Model和View,來渲染視圖
8.將渲染結果返回給客戶端。

注意:
1,是單例模式,所以在多線程訪問的時候有線程安全問題,不要用同步, 會影響性能的,解決方案是在控制器里面不能寫字段
2,SpingMvc中的控制器的注解一般用@Conntroller注解,表示是表現 層,不能用別的注解代替.
3,如果確實不需要該方法返回頁面,可以在方法上使用@ResponseBody 注解,表一個請求到此為止。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM