1. 程式人生 > >Spring 框架基礎(06):Mvc架構模式簡介,執行流程詳解

Spring 框架基礎(06):Mvc架構模式簡介,執行流程詳解

本文原始碼:GitHub·點這裡 || GitEE·點這裡

一、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,ModelAndViewspringmvc框架的一個底層物件,包括Modelview;

(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、測試介面

@Controller
public 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-parent
GitEE·地址
https://gitee.com/cicadasmile/spring-mvc-parent

相關推薦

Spring 框架基礎(06)Mvc架構模式簡介執行流程

本文原始碼:GitHub·點這裡 || GitEE·點這裡 一、SpringMvc框架簡介 1、Mvc設計理念 MVC是一種軟體設計典範,用一種業務邏輯、資料、介面顯示分離的方法組織程式碼,將業務邏輯聚集到一個元件裡面,在改進和個性化定製介面及使用者互動的同時,不需要重新編寫業務邏輯,MVC分層有助於管理和架

Spring 框架基礎(03)核心思想 IOC 說明案例演示

本文原始碼:GitHub·點這裡 || GitEE·點這裡 一、IOC控制反轉 1、IOC容器思想 Java系統中物件耦合關係

Spring 框架基礎(02)Bean的生命週期作用域裝配總結

本文原始碼:GitHub·點這裡 || GitEE·點這裡 一、裝配方式 Bean的概念:Spring框架管理的應用程式中,由

Spring 框架基礎(01)核心元件總結基礎環境搭建

本文原始碼:GitHub·點這裡 || GitEE·點這裡 一、Spring框架 1、框架簡介 Spring是一個開源框架,框

Spring 框架基礎(05)事務管理機制和實現方式

本文原始碼:GitHub·點這裡 || GitEE·點這裡 一、Spring事務管理 1、基礎描述 Spring事務管理的本質就是封裝了資料庫對事務支援的操作,使用JDBC的事務管理機制,就是利用java.sql.Connection物件完成對事務的提交和回滾。 Connection conn = Drive

SQL優化理論基礎MySQL架構總覽、查詢執行流程、SQL解析順序(轉載)

前言:   一直是想知道一條SQL語句是怎麼被執行的,它執行的順序是怎樣的,然後檢視總結各方資料,就有了下面這一篇博文了。   本文將從MySQL總體架構--->

MySQL基礎篇(05)邏輯架構圖解和InnoDB儲存引擎

> 本文原始碼:[GitHub·點這裡](https://github.com/cicadasmile/mysql-data-base) || [GitEE·點這裡](https://github.com/cicadasmile/mysql-data-base) # 一、MySQL邏輯架構 ##

Struts2框架執行流程

Struts2框架執行流程詳解1. Struts2源碼導入對於struts2框架它的源代碼我們主要使用三部分 struts2核心部分源代碼 org.apache.struts2xxsrc\core\src\main\java struts2的xwork核心部分源代碼src\xwork-core\src\m

Spring 框架的設計理念與設計模式分析

問題 面向對象編程 -h oop ram 重要 原因 依賴 object 轉自: https://www.ibm.com/developerworks/cn/java/j-lo-spring-principle/ Spring 的設計理念 前面介紹了 Spring 的三

使用Spring框架入門一基於XML配置的IOC/DI的使用

測試結果 plugins rac prepare lombok ray instance private mls 一、Spring框架   1、方法一:逐項導入基礎依賴包:     spring-core、spring-beans、spring-context、s

使用Spring框架入門二基於註解+XML配置的IOC/DI的使用

bsp hot sources hierarchy osi pan ioc clas operate 一、簡述 本文主要講使用註解+xml配合使用的幾種使用方式。基礎課程請看前一節。 二、步驟 1、為Pom.xml中引入依賴:本例中使用的是spring-context

三分鐘輕松了Spring框架基礎知識

xmla 深入 dao reference inject ace eve con 說過 做為一個合格的Java開發人員,你一定聽說過Spring框架,雖然會應用,但卻未必能夠深入理解框架的原理,只是像其它人一樣,泛泛的只是停留在理解的層面。小編會帶著大家一步步了解Sprin

Spring 框架的設計理念與設計模式

Spring 框架的設計理念與設計模式 Spring核心學習點 IoC容器:Spring核心是IoC容器,所以一定要透徹理解什麼是IoC容器,以及如何配置及使用容器,其他所有技術都是基於容器實現的; 面向切面程式設計:首先還是明確概念,基本配置,最後是實現原理,接下來就是資料庫事務管理,其實Sp

Spring框架基礎

Spring是什麼 一個輕量級的企業應用開發框架 非侵入式的框架 應用對框架的依賴很小,很多時候應用程式碼都可以使用POJO風格。 POJO:沒有從任何類繼承、也沒有實現任何介面,更沒有被其它框架侵入的java物件。 優點 :低耦合(類與類之間的聯絡) 高度可配置

Spring框架基礎(二)——依賴注入DI/IOC

一,手動進行值注入(bean) <!-- 例項化類時,呼叫類中屬性的set方法並將值傳給形參 --> <bean name="bookinfo" class="com.lanou.fuxi.domain.Bookinfo"&

Spring框架基礎(一)基本介紹

spring 框架的基本核心構成 IOC Inversion 0f Control 控制反轉 是Spring框架的核心 DAO 資料訪問物件模組 Spring 對JDBC訪問資料庫的封裝 MVC 是Spring對MVC架構以及web部分的支援 AOP

Spring框架基礎(三)Spring+Mybatis整合

一,配置檔案 <!-- 開啟自動掃描 --> <context:component-scan base-package="com.lanou.test.*" /> <!-- 資料連線池 --> <!-- 使用的是阿里的連線池,db

mysql刪庫跑路必會姿勢(基礎MySql架構與儲存引擎)

  基礎篇:MySql架構與儲存引擎 邏輯架構圖:      連線層: mysql啟動後(可以把mysql類比為一個後臺的伺服器),等待客戶端請求,當請求到來後,mysql建立一個一個執行緒處理(執行緒池則分配一個空執行緒,當然也可使用nio執行緒模

mysql刪庫跑路必會姿勢(基礎MySql架構與存儲引擎)

文本文 creat 數據 sql ltp engine mysql5 並發 acid 基礎篇:MySql架構與存儲引擎 邏輯架構圖: 連接層: mysql啟動後(可以把mysql類比為一個後臺的服務器),等待客戶端請求,當請求到來後,mysql建立一個一個

為何選用Vue做MVC架構模式

關鍵詞 並行開發 程式碼複用 關注點分離 經典的MVC架構模式 MVC架構模式是經典設計模式中的經典,是一種程式設計的方法論。具有高度抽象的特徵,經典MVC用簡單的定義體現出解決複雜通用問題的辦法,只有不斷思考和體會才能用來解決不同情況下程式設計所遇到的問題。 MVC不能脫離具體的框架而獨自存在,把握抽