『網際網路架構』軟體架構-spring原始碼之spring MVC(上)(12)
spring MVC從2014年開始流行,基本工作上都用過,一起在熟悉和深入瞭解下。原始碼:https://github.com/limingios/netFuture/blob/master/仿springmvc/tl0920
Spring MVC
簡潔的一個web開關
MVC其實就是一種設計模式,三層架構:檢視,模型,控制。J2EE開發的模式,例如servlet來說絕對是簡潔。
支援Restful 支援,支援靜態資源,本地解析
靈活的url對映關係
跟spring ioc aop 完美整合
本身都是spring,肯定可以完美整合
對其他試圖freemark,jsp,Velocity,jstl支援整合
- jsp 翻譯型,jsp先變成class轉成java
- Velocity 解釋型
- 效率 jsp 大於 Velocity
- 開發方便程度Velocity大於jsp
- jsp問題:嵌入java程式碼(也違反了MVC的思路)
靜態,動態
靜態就是通過對應靜態檔案的快取,key來對應圖片。很多時候,我們都是通過nginx然後跳轉到tomcat,nginx的作用其實不光是代理,還可以快取,它用來快取讓第二次的話直接讀取本地,較少服務端的壓力。
1. html,css,img,flash客戶端
2. jsp,jstl->服務端
3. last-modified
第一次登陸,網站返回200狀態碼
4. if-modified-since
第二次登陸,網站返回304狀態碼,if-modified-since等於第一次的。
5.載入優先順序 compiler & listings
Spring Mvc
官網:https://docs.spring.io/spring/docs/5.1.3.RELEASE/spring-framework-reference/web.html#spring-web
具體建立一個簡單的mvc例子,這裡就不建立了。
-
小技巧
>app 或者pc 區別分開來,返回結果是一樣的
>@RequestMapping(value = {“/app”,”/pc”})
對上述流程圖的解釋:
* 使用者發起請求到前端控制器(Controller)
* 前端控制器沒有處理業務邏輯的能力,需要找到具體的模型物件處理(Handler),到處理器對映器(HandlerMapping)中查詢Handler物件(Model)。
* HandlerMapping返回執行鏈,包含了2部分內容: ① Handler物件、② 攔截器陣列
* 前端處理器通過處理器介面卡包裝後執行Handler物件。
* 處理業務邏輯。
* Handler處理完業務邏輯,返回ModelAndView物件,其中view是檢視名稱,不是真正的檢視物件。
* 將ModelAndView返回給前端控制器。
* 檢視解析器(ViewResolver)返回真正的檢視物件(View)。
* (此時前端控制器中既有檢視又有Model物件資料)前端控制器根據模型資料和檢視物件,進行檢視渲染。
* 返回渲染後的檢視(html/json/xml)返回。
* 給使用者產生響應。
PS:先了解總體的流程,然後在細細的品味原始碼的味道,重點是DispatcherServlet 是HTTP請求處理程式/控制器的中央排程程式。
>>原創文章,歡迎轉載。轉載請註明:轉載自,謝謝!>>原文連結地址:上一篇:已是最新文章