SpringMvc框架的簡(jiǎn)介與執(zhí)行流程詳解
一、SpringMvc框架簡(jiǎn)介
1、Mvc設(shè)計(jì)理念
- M:代表模型Model
模型就是數(shù)據(jù),應(yīng)用程序的核心。
- V:代表視圖View
回顯數(shù)據(jù)的界面,例如JSP就是用來(lái)展示模型中的數(shù)據(jù)。
- C:代表控制器Controller
控制器的作用就是根據(jù)入?yún)?,把不同的響?yīng)數(shù)據(jù)(Model),顯示在不同的視圖(View)上。
2、SpringMvc簡(jiǎn)介
- 框架描述
SpringMVC是一種基于Java實(shí)現(xiàn)的MVC設(shè)計(jì)模式的請(qǐng)求驅(qū)動(dòng)類(lèi)型的輕量級(jí)Web框架,出自Spring框架全家桶,與Spring框架無(wú)縫整合,使用了MVC架構(gòu)模式的思想,將Web層進(jìn)行職責(zé)解耦。
- 框架優(yōu)點(diǎn)
結(jié)構(gòu)松散,幾乎可以在SpringMVC中使用各類(lèi)視圖,各個(gè)模塊分離而且耦合度非常低,且易于擴(kuò)展。與Spring無(wú)縫集成,且簡(jiǎn)單,靈活,容易上手。
二、SpringMvc執(zhí)行流程
1、流程圖解
2、步驟描述
(1)、發(fā)起請(qǐng)求到前端控制器DispatcherServlet;
(2)、前端控制器請(qǐng)求HandlerMapping查找,Handler可以根據(jù)xml配置、注解進(jìn)行查找;
(3)、處理器映射器HandlerMapping向前端控制器返回Handler;
(4)、前端控制器調(diào)用處理器適配器去執(zhí)行Handler;
(5)、處理器適配器去執(zhí)行Handler ;
(6)、Handler執(zhí)行完成給適配器返回ModelAndView ;
(7)、處理器適配器向前端控制器返回ModelAndView,ModelAndView是springmvc框架的一個(gè)底層對(duì)象,包括Model和view;
(8)、前端控制器請(qǐng)求視圖解析器去進(jìn)行視圖解析,根據(jù)邏輯視圖名解析成真正的視圖 ;
(9)、視圖解析器向前端控制器返回View ;
(10)、前端控制器進(jìn)行視圖渲染,視圖渲染將模型數(shù)據(jù)(在ModelAndView對(duì)象中)填充到request域中;
(11)、前端控制器向用戶響應(yīng)結(jié)果 ;
3、核心組件
- 前端控制器
DispatcherServlet:請(qǐng)求離開(kāi)瀏覽器后,最先到達(dá)的就是DispatcherServlet,是整個(gè)流程控制的中心,作用接收請(qǐng)求,響應(yīng)結(jié)果,相當(dāng)于轉(zhuǎn)發(fā)器,中央處理器。減少各個(gè)組件之間的耦合度。
- 處理器映射器
HandlerMapping:根據(jù)請(qǐng)求的url路由到指定接口,用戶請(qǐng)求找到Handler處理器,springmvc提供不同類(lèi)型映射器,例如:Xml配置方式,注解方式等。
- 處理器適配器
HandlerAdapter:按照特定規(guī)則去執(zhí)行Handler,SpringMvc支持多種處理器,各種處理器中的處理方法各不相同,為了解決適應(yīng)多種處理器,就出現(xiàn)了處理器適配器。
- 處理器
Handler:處理用戶請(qǐng)求,涉及具體業(yè)務(wù)邏輯,需要程序員根據(jù)業(yè)務(wù)需求開(kāi)發(fā)。編寫(xiě)Handler時(shí)按照HandlerAdapter的規(guī)則開(kāi)發(fā),這樣適配器才可以正確執(zhí)行Handler。
- 視圖解析器
ViewResolver:負(fù)責(zé)將請(qǐng)求的響應(yīng)結(jié)果生成View,根據(jù)邏輯視圖名解析成物理視圖名,就是具體頁(yè)面地址,生成View視圖對(duì)象,對(duì)View進(jìn)行渲染,通過(guò)頁(yè)面展示給用戶。
- 視圖
View:SpringMvc框架提供很多的View視圖類(lèi)型的支持,包括:jsp、freemarker、pdf等。通過(guò)頁(yè)面標(biāo)簽或頁(yè)面模版解析模型數(shù)據(jù)回顯到頁(yè)面,需要根據(jù)業(yè)務(wù)開(kāi)發(fā)具體頁(yè)面。
三、整合Spring框架配置
1、spring-mvc配置
<!-- 掃描文件 --> <context:component-scan base-package="com.spring.mvc.controller" /> <!-- MVC默認(rèn)的注解映射的方式 --> <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、測(cè)試接口
@Controller public class HelloController { @RequestMapping("/getInfo") public @ResponseBody String getInfo (String name){ return name ; } }
4、常用注解說(shuō)明
- @Controller
標(biāo)記一個(gè)類(lèi)是Handler,也就是開(kāi)發(fā)的Controller,然后使用@RequestMapping或其他相關(guān)注解(@GetMapping、@PostMapping、@PutMapping、@DeleteMapping),用來(lái)關(guān)聯(lián)請(qǐng)求和Controller方法之間的映射關(guān)系,這樣的Controller 就可以被請(qǐng)求訪問(wèn)。
- @RequestMapping
處理請(qǐng)求地址映射的注解,可作用于類(lèi)或方法上。用于類(lèi)上,表示類(lèi)中的所有響應(yīng)請(qǐng)求的方法都是以類(lèi)上標(biāo)注地址作為父路徑。
- @requestParam
主要用于在SpringMvc框架的控制層獲取參數(shù),三個(gè)常用參數(shù):defaultValue表示設(shè)置默認(rèn)值,required 通過(guò)boolean設(shè)置是否是必須要傳入的參數(shù),value值表示傳入的參數(shù)名稱。
- @RequestBody
接收請(qǐng)求體中傳遞給后端的Json字符串?dāng)?shù)據(jù)的,GET方式無(wú)請(qǐng)求體,所以使用@RequestBody接收數(shù)據(jù)時(shí),不能使用GET方式提交數(shù)據(jù),需要用POST方式進(jìn)行提交。
- @ResponseBody
該注解用于方法的返回對(duì)象,可以通過(guò)配置轉(zhuǎn)換器為指定數(shù)據(jù)響應(yīng)格式,如果希望返回的數(shù)據(jù)不是View試圖頁(yè)面,而是指定數(shù)據(jù)格式的時(shí)候使用,例如:Json、Xml等。
- @Autowired
按照類(lèi)型(byType)裝配依賴對(duì)象,默認(rèn)情況下它要求依賴對(duì)象必須存在,如果允許null值,可以設(shè)置它的required屬性為false。如果想使用按照名稱(byName)來(lái)裝配,可以結(jié)合@Qualifier注解一起使用。
- @Resource
按照ByName自動(dòng)注入,需要導(dǎo)入包javax.annotation.Resource。@Resource有兩個(gè)重要的屬性:name和type,而Spring將@Resource注解的name屬性解析為bean的名字,而type屬性則解析為bean的類(lèi)型。
- @PathVariable
用于將請(qǐng)求URL中的模板變量映射到功能處理方法的參數(shù)上,即取出uri模板中的變量作為參數(shù)。
四、常見(jiàn)參數(shù)映射
1、普通映射
@RequestMapping("/getSum") public Integer getSum (int a,int b){ return a+b ; }
測(cè)試:
http://localhost:6003/getSum?a=1&b=2
傳參名稱和方法參數(shù)保持一致。
2、指定參數(shù)名
@RequestMapping("/getInfo") public String getInfo (@RequestParam("name") String var1, @RequestParam("say") String var2){ return var1+":"+var2 ; }
測(cè)試:
http://localhost:6003/getInfo?name=cica&say=hello
傳參名和 @RequestParam 指定的參數(shù)名要對(duì)應(yīng)。
3、數(shù)組參數(shù)
@GetMapping("/getArray") public String getArray (String[] ids){ return ids[0]+"-"+ids[1] ; }
測(cè)試:
http://localhost:6003/getArray?ids=2&ids=3
傳遞并解析數(shù)組類(lèi)型的參數(shù)格式。
4、Map參數(shù)
測(cè)試:
http://localhost:6003/getCityEntity?province=浙江&name=杭州
這里以Post方式將相關(guān)參數(shù)傳遞CityEntity實(shí)體對(duì)象中。
5、包裝參數(shù)
@PostMapping("/getCityEntity") public CityEntity getCityEntity (CityEntity cityEntity){ return cityEntity ; }
測(cè)試:
http://localhost:6003/getCityEntity?province=浙江&name=杭州
這里以Post方式將相關(guān)參數(shù)傳遞CityEntity實(shí)體對(duì)象中。
6、Rest風(fēng)格參數(shù)
@GetMapping("/getId/{id}") public String getId (@PathVariable("id") Integer id){ return "id="+id ; }
測(cè)試:
http://localhost:6003/getId/1
RestFul 風(fēng)格參數(shù)映射。
五、源代碼地址
GitHub·地址
https://github.com/cicadasmile/spring-mvc-parent
GitEE·地址
https://gitee.com/cicadasmile/spring-mvc-parent
以上就是SpringMvc框架的簡(jiǎn)介與執(zhí)行流程詳解的詳細(xì)內(nèi)容,更多關(guān)于SpringMvc框架執(zhí)行流程的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Mybatis中and和循環(huán)or混用操作(or轉(zhuǎn)換成in)
這篇文章主要介紹了Mybatis中and和循環(huán)or混用操作(or轉(zhuǎn)換成in),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07手把手教你如何利用SpringBoot實(shí)現(xiàn)審核功能
審核功能經(jīng)過(guò)幾個(gè)小時(shí)的奮戰(zhàn)終于完成了,現(xiàn)在我就與廣大網(wǎng)友分享我的成果,這篇文章主要給大家介紹了關(guān)于如何利用SpringBoot實(shí)現(xiàn)審核功能的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-05-05SpringBoot后端接口的實(shí)現(xiàn)(看這一篇就夠了)
這篇文章主要介紹了SpringBoot后端接口的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09Nginx+SpringCloud Gateway搭建項(xiàng)目訪問(wèn)環(huán)境
本文主要介紹了Nginx+SpringCloud Gateway搭建項(xiàng)目訪問(wèn)環(huán)境,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08Mybatis-Plus使用ID_WORKER生成主鍵id重復(fù)的解決方法
本文主要介紹了Mybatis-Plus使用ID_WORKER生成主鍵id重復(fù)的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07Java的String類(lèi)中的startsWith方法和endsWith方法示例詳解
大家應(yīng)該都知道startsWith()方法用于檢測(cè)字符串是否以指定的前綴開(kāi)始,endsWith()方法用于測(cè)試字符串是否以指定的后綴結(jié)束,本文就Java的String類(lèi)中的startsWith方法和endsWith方法給大家詳細(xì)講解,感興趣的朋友一起看看吧2023-11-11