springMvc的工作流程簡介

背景

最近在開發一箇中臺的項目,發現裏面的思想基本都是用的springMvc思想和前端視圖freeMark,所以特別抽空總結了這篇文章,把springMvc的流程理透徹

springMvc是什麼?

百度百科的解釋:
Spring MVC屬於SpringFrameWork的後續產品,已經融合在Spring Web Flow裏面。Spring 框架提供了構建 Web 應用程序的全功能 MVC 模塊。使用 Spring 可插入的 MVC 架構,從而在使用Spring進行WEB開發時,可以選擇使用Spring的Spring MVC框架或集成其他MVC開發框架,如Struts1(現在一般不用),Struts 2(一般老項目使用)等等。

流程分析

整體流程

在這裏插入圖片描述
步驟

  • 首先用戶發送請求到前端控制器(DispatcherServlet),DispatcherServlet根據請求信息(url)來決定選擇哪一個頁面控制器進行處理並把請求委託給它。就是圖中的1,2步驟。
  • 頁面控制器收到請求後,進行功能處理,首先需要收集和綁定請求參數到一個對象,這個對象在SpringWebMvc中叫命令對象,並進行驗證,然後將命令對象委託給業務對象進行處理;處理完畢後返回一個ModelAndView(模型數據和邏輯視圖名),圖中
    3,4,5步驟。
  • 前端控制器收回控制權,然後根據根據返回的邏輯視圖名,選擇相應的視圖進行渲染,並把模型數據傳入以便視圖渲染;圖中6,7步驟。
  • 前端控制器再次收回控制權,將響應返回給用戶,圖中步驟8

核心流程

在這裏插入圖片描述
具體的步驟:

  • 第一步:發起請求到前端控制器(DispatcherServlet)
  • 第二步:前端控制器請求HandlerMapper查找Handler(可以根據xml配置、註解進行查找)
  • 第三步:處理器映射器HandlerMapper向前端控制器返回Handler,HandlerMapper會把請求映射爲HandlerExcecutionChain對象(包含一個Handler處理器(頁面控制器)對象,多個HanlderInterceptor攔截器對象),通過這中策略模式,很容易添加新的映射策略。
  • 第四步:前端控制器調用處理器適配器去執行Handler
  • 第五步:處理器適配器HandlerAdapter將會根據適配的結果去執行Handler
  • 第六步:Handler執行完成給適配器返回ModelAndView
  • 第七步:處理器適配器向前端控制器返回MoldelAndView(ModelAndView是springmvc框架的一個底層對象,包括Model和view)一般現在都是前後端分離,有用@ResponseBody註解的話就直接到此結束
  • 第八步:前端控制器請求視圖解析器進行視圖解析(根據邏輯視圖名解析成真正的視圖jsp),通過這種策略很容易更換其他視圖技術,只需要更改視圖解析器即可
  • 第九步:視圖解析器向前端控制器返回View
  • 第十步:前端控制器進行視圖渲染(視圖渲染將模型數據(在ModelAndView對象中)填充到request域)
  • 第十一步:前端控制器向用戶相應結果。

組件介紹

  • 前端控制器DispatcherServlet(不需要程序員開發)
    作用:接受請求,響應結果,相當於轉化器,中央處理器。有了DispatcherServlet減少了其他組件之間的耦合度。
  • 處理器映射器HandlerMapping(不需要程序員開發)
    作用:根據請求的url查找Handler
  • 處理器適配器HandlerAdapter(程序員開發)
    作用:按照特定規則(HandlerAdapter要求的規則)去執行Handler。
  • 處理器Handler(需要開發)
    注意:編寫Handler時按照HandlerAdapter的要求去做,這樣適配器纔可以去正確執行Handler
  • 視圖解析器ViewResolver
    作用:進行視圖解析,根據邏輯視圖名解析成真正的視圖(View)
  • 視圖view
    注意:View是一個接口,實現類支持不同的View類型(jsp,freemark,pdf…)

SpringMvc的一些理解

爲什麼要使用springMvc?

SpringMvc是一種基於Java,實現了Web Mvc設計模式,請求驅動類型的輕量級Web框架,即使用了MVC架構模式的思想,將Web層進行職責解耦。基於請求驅動指的就是使用請求-響應模型,框架的目的就是幫助我們簡化開發,SpringMvc也是要簡化日常web開發。(處理業務數據的對象和顯示業務數據的視圖之間存在緊密耦合)

什麼是MVC設計模式?

M: Mode
V:View
C: Controller
將應用按照Model(模型)、View(視圖)、Controller(控制)這樣的方式分離。

視圖(View):代表用戶交互界面,對於Web應用來說,可以是Html,也可能是jsp,xml和Applet等。一個應用可能有很多不同的視圖,Mvc設計模式對於的處理僅限於視圖上數據的採集和處理,以及用戶的請求,而不包括在視圖上的業務流程的處理。業務流程的處理交於模型(Model)處理。

模型(Model):是業務的處理以及業務規則的制定。模型接受視圖請求的數據,並返回最終得處理結果。業務模型的設計是Mvc最主要的核心。MVC設計模式告訴我們,把應用的模型按一定的規則抽取出來,抽取的層次很重要,抽象與具體不能隔得太遠,也不能離得太近。MVC沒有提供模型的設計方法,而只是組織管理這些模型,以便於模型的重構和提供重用性。

控制(Controller):可以理解爲從用戶接收請求,將模型與視圖匹配在一起,共同完成用戶的請求。劃分控制層的作用也很明顯,它清除的告訴你,它就是一個分發器,選擇什麼樣的模型,選擇什麼樣的視圖,可以完成什麼樣的請求。控制層並不做任何的數據處理。

SpringMvc的優點

  • 能非常簡單的設計出乾淨的web層和薄薄的web層
  • 進行更簡潔的Web層的開發
  • 天生與spring框架繼承(Ioc、aop等)
  • 提供強大的約定大於配置的契約式編程支持
  • 非常靈活的數據驗證、格式化和數據綁定機制
  • 支持Restful風格

springMvc的常用註解及其作用

@Controller :標識這個類是一個控制器
@RequestMapping :給控制器方法綁定一個uri
@ResponseBody:將java對象轉換成json,並且發送給客戶端
@RequestBody:將客戶端請求過來的json轉成java對象
@RequestParam:當表單參數和方法形參名字不一致時,做一個名字映射
@PathVarible: 用於獲取uri中的參數,比如user/1中1的值
Restful風格的新api
@RestController相當於@Controller+@ResponseBody
@GetMapping@DeleteMapping@PostMapping@PutMapping
其他註解
@SessionAttribute:聲明將什麼模型數據存入session
@cookieValue: 獲取cookie值
@ModelAttribute:將方法返回值傳入model中
@HeaderValue:獲取請求頭中的值

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章