Spring 框架基礎(06):Mvc架構模式簡介,執行流程詳解
一、SpringMvc框架簡介
1、Mvc設計理念
MVC是一種軟體設計典範,用一種業務邏輯、資料、介面顯示分離的方法組織程式碼,將業務邏輯聚集到一個元件裡面,在改進和個性化定製介面及使用者互動的同時,不需要重新編寫業務邏輯,MVC分層有助於管理和架構複雜的應用程式
- M:代表模型
Model
模型就是資料,應用程式的核心。
- V:代表檢視
View
回顯資料的介面,例如JSP就是用來展示模型中的資料。
- C:代表控制器
Controller
控制器的作用就是根據入參,把不同的響應資料(
Model
),顯示在不同的檢視(
View
)上。
2、SpringMvc簡介
- 框架描述
SpringMVC
是一種基於
Java
實現的
MVC
設計模式的請求驅動型別的輕量級
Web
框架,出自
Spring
框架全家桶,與
Spring
框架無縫整合,使用了
MVC
架構模式的思想,將
Web
層進行職責解耦。
- 框架優點
結構鬆散,幾乎可以在
SpringMVC
中使用各類檢視,各個模組分離而且耦合度非常低,且易於擴充套件。與
Spring
無縫整合,且簡單,靈活,容易上手。
二、SpringMvc執行流程
1、流程圖解
2、步驟描述
(1)、發起請求到前端控制器
DispatcherServlet
;
(2)、前端控制器請求
HandlerMapping
查詢,
Handler
可以根據
xml
配置、註解進行查詢;
(3)、處理器對映器
HandlerMapping
向前端控制器返回
Handler
;
(4)、前端控制器呼叫處理器介面卡去執行
Handler
;
(5)、處理器介面卡去執行
Handler
;
(6)、
Handler
執行完成給介面卡返回
ModelAndView
;
(7)、處理器介面卡向前端控制器返回
ModelAndView
,
ModelAndView
是
springmvc
框架的一個底層物件,包括
Model
和
view
;
(8)、前端控制器請求檢視解析器去進行檢視解析,根據邏輯檢視名解析成真正的檢視 ;
(9)、檢視解析器向前端控制器返回
View
;
(10)、前端控制器進行檢視渲染,檢視渲染將模型資料(在
ModelAndView
物件中)填充到
request
域中;
(11)、前端控制器向使用者響應結果 ;
3、核心元件
- 前端控制器
DispatcherServlet
:請求離開瀏覽器後,最先到達的就是DispatcherServlet,是整個流程控制的中心,作用接收請求,響應結果,相當於轉發器,中央處理器。減少各個元件之間的耦合度。
- 處理器對映器
HandlerMapping
:根據請求的url路由到指定介面,使用者請求找到Handler處理器,springmvc提供不同型別對映器,例如:Xml配置方式,註解方式等。
- 處理器介面卡
HandlerAdapter
:按照特定規則去執行Handler,SpringMvc支援多種處理器,各種處理器中的處理方法各不相同,為了解決適應多種處理器,就出現了處理器介面卡。
- 處理器
Handler
:處理使用者請求,涉及具體業務邏輯,需要程式設計師根據業務需求開發。編寫Handler時按照HandlerAdapter的規則開發,這樣介面卡才可以正確執行Handler。
- 檢視解析器
ViewResolver
:負責將請求的響應結果生成View,根據邏輯檢視名解析成物理檢視名,就是具體頁面地址,生成View檢視物件,對View進行渲染,通過頁面展示給使用者。
- 檢視
View
:SpringMvc框架提供很多的View檢視型別的支援,包括:jsp、freemarker、pdf等。通過頁面標籤或頁面模版解析模型資料回顯到頁面,需要根據業務開發具體頁面。
三、整合Spring框架配置
1、spring-mvc配置
<!-- 掃描檔案 --><context:component-scan base-package="com.spring.mvc.controller" /><!-- MVC預設的註解對映的方式 --><mvc:annotation-driven /><mvc:default-servlet-handler/><!-- 檢視解析器 --><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/page/" /> <property name="suffix" value=".jsp" /></bean>
2、Web.xml配置
<servlet> <servlet-name>spring-mvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring-mvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup></servlet><servlet-mapping> <servlet-name>spring-mvc</servlet-name> <url-pattern>/</url-pattern></servlet-mapping>
3、測試介面
@Controllerpublic class HelloController { @RequestMapping("/getInfo") public @ResponseBody String getInfo (String name){ return name ; } }
4、常用註解說明
-
@Controller
標記一個類是Handler,也就是開發的Controller,然後使用@RequestMapping或其他相關注解(@GetMapping、@PostMapping、@PutMapping、@DeleteMapping),用來關聯請求和Controller方法之間的對映關係,這樣的Controller 就可以被請求訪問。
-
@RequestMapping
處理請求地址對映的註解,可作用於類或方法上。用於類上,表示類中的所有響應請求的方法都是以類上標註地址作為父路徑。
-
@requestParam
主要用於在SpringMvc框架的控制層獲取引數,三個常用引數:defaultValue表示設定預設值,required 通過boolean設定是否是必須要傳入的引數,value值表示傳入的引數名稱。
-
@RequestBody
接收請求體中傳遞給後端的Json字串資料的,GET方式無請求體,所以使用@RequestBody接收資料時,不能使用GET方式提交資料,需要用POST方式進行提交。
-
@ResponseBody
該註解用於方法的返回物件,可以通過配置轉換器為指定資料響應格式,如果希望返回的資料不是View試圖頁面,而是指定資料格式的時候使用,例如:Json、Xml等。
-
@Autowired
按照型別(byType)裝配依賴物件,預設情況下它要求依賴物件必須存在,如果允許null值,可以設定它的required屬性為false。如果想使用按照名稱(byName)來裝配,可以結合@Qualifier註解一起使用。
-
@Resource
按照ByName自動注入,需要匯入包javax.annotation.Resource。@Resource有兩個重要的屬性:name和type,而Spring將@Resource註解的name屬性解析為bean的名字,而type屬性則解析為bean的型別。
-
@PathVariable
用於將請求URL中的模板變數對映到功能處理方法的引數上,即取出uri模板中的變數作為引數。
四、常見引數對映
1、普通對映
@RequestMapping("/getSum")public Integer getSum (int a,int b){ return a+b ; }
測試:
http://localhost:6003/getSum?a=1&b=2
傳參名稱和方法引數保持一致。
2、指定引數名
@RequestMapping("/getInfo")public String getInfo (@RequestParam("name") String var1, @RequestParam("say") String var2){ return var1+":"+var2 ; }
測試:
http://localhost:6003/getInfo?name=cica&say=hello
傳參名和 @RequestParam 指定的引數名要對應。
3、陣列引數
@GetMapping("/getArray")public String getArray (String[] ids){ return ids[0]+"-"+ids[1] ; }
測試:
http://localhost:6003/getArray?ids=2&ids=3
傳遞並解析陣列型別的引數格式。
4、Map引數
@RequestMapping("/getMap")public String getMap (@RequestParam Map<String,String> paramMap){ return paramMap.get("name") ; }
測試:
http://localhost:6003/getCityEntity?province=浙江&name=杭州
這裡以Post方式將相關引數傳遞CityEntity實體物件中。
5、包裝引數
@PostMapping("/getCityEntity")public CityEntity getCityEntity (CityEntity cityEntity){ return cityEntity ; }
測試:
http://localhost:6003/getCityEntity?province=浙江&name=杭州
這裡以Post方式將相關引數傳遞CityEntity實體物件中。
6、Rest風格引數
@GetMapping("/getId/{id}")public String getId (@PathVariable("id") Integer id){ return "id="+id ; }
測試:
http://localhost:6003/getId/1
RestFul 風格引數對映。
五、原始碼地址
GitHub·地址https://github.com/cicadasmile/spring-mvc-parentGitEE·地址https://gitee.com/cicadasmile/spring-mvc-parent
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69949356/viewspace-2667217/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL基礎架構執行流程MySql架構
- 極簡架構模式-MVC模式架構模式MVC
- MySQL原理簡介—2.InnoDB架構原理和執行流程MySql架構
- spring mvc 框架搭建及詳解SpringMVC框架
- HotDB 基礎架構詳解架構
- Spring MVC基礎SpringMVC
- Spring AOP基礎簡介Spring
- Lararel 框架執行流程詳解(1) 入口檔案框架
- Spring Cloud雲架構-Restful 基礎架構SpringCloud架構REST
- 分散式架構基礎:Java RMI詳解分散式架構Java
- spring cloud架構整合-springcloud簡介SpringCloud架構GC
- MVC與三層框架|Spring的基礎應用MVC框架Spring
- MVC 三層架構案例詳細講解MVC架構
- Spring框架簡介⑩Spring框架
- Spring框架簡介⑨Spring框架
- Spring框架簡介⑧Spring框架
- Spring框架簡介⑦Spring框架
- Spring框架簡介⑥Spring框架
- Spring框架簡介⑤Spring框架
- Spring框架簡介④Spring框架
- Spring框架簡介③Spring框架
- Spring框架簡介②Spring框架
- Spring框架簡介①Spring框架
- 手寫Spring MVC框架(一) 實現簡易版mvc框架SpringMVC框架
- 個人伺服器基礎設施架構簡介伺服器架構
- 實現MVC基礎框架MVC框架
- 解析MySQL基礎架構及一條SQL語句的執行流程和流轉MySql架構
- 【CSS】CSS簡介,CSS基礎選擇器詳解CSS
- Java架構-(一)spring cloud微服務分散式雲架構 - Spring Cloud簡介Java架構SpringCloud微服務分散式
- SSM三大框架的執行流程、原理、核心技術詳解SSM框架
- 熱璞資料庫HotDB 基礎架構詳解資料庫架構
- scrapy框架簡介和基礎應用框架
- 【Python基礎知識】Django框架簡介PythonDjango框架
- Spring Cloud系列(一):微服務架構簡介SpringCloud微服務架構
- 資料管理流程,基礎入門簡介
- 選用Vue做MVC架構模式VueMVC架構模式
- 基礎篇-http協議《http 簡介、url詳解、request》HTTP協議
- RESTful 架構 基礎講解REST架構