日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

【SSM框架系列】Spring-MVC的组件解析

發(fā)布時(shí)間:2025/5/22 javascript 59 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【SSM框架系列】Spring-MVC的组件解析 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

SpringMVC完整執(zhí)行流程

  • 用戶發(fā)送請求至前端控制器DispatcherServlet。

  • DispatcherServlet收到請求調(diào)用HandlerMapping處理器映射器。

  • 處理器映射器找到具體的處理器(可以根據(jù)xml配置、注解等方式查找),生成HandlerExecutionChain(包含Handler及Handler攔截器)返回給DispatcherServlet。

  • DispatcherServlet調(diào)用HandlerAdapter處理器適配器。

  • HandlerAdapter經(jīng)過適配調(diào)用具體的處理器(Controller,也叫后端控制器)。

  • Controller執(zhí)行完成返回ModelAndView。

  • HandlerAdapter將controller執(zhí)行結(jié)果ModelAndView返回給DispatcherServlet。

  • DispatcherServlet將ModelAndView傳給ViewReslover視圖解析器。

  • ViewReslover解析后返回具體View。

  • DispatcherServlet根據(jù)View進(jìn)行渲染視圖(即將模型數(shù)據(jù)填充至視圖中)。

  • DispatcherServlet響應(yīng)用戶。

  • 以上步驟中,DispatchServlet、HandlerMapping、HandlerAdapter和ViewResolver等對象協(xié)同工作,共同完成了SpringMVC請求–>響應(yīng)的整個(gè)工作流程。但是這些對象和流程對于開發(fā)者來說都是不可見的,開發(fā)者并不需要關(guān)系這些對象時(shí)如何工作的,只需要在Handler(也就是Controller)中完成對請求的業(yè)務(wù)處理。

    Spring-MVC組件解析

    前端控制器:DispatcherServlet

    • 用戶請求到達(dá)DispatcherServlet,將由其進(jìn)行分發(fā),只分發(fā)不處理,它負(fù)責(zé)統(tǒng)一調(diào)度各個(gè)組件之間的調(diào)用,是整個(gè)請求響應(yīng)的控制中心。DispatcherServlet降低了各個(gè)組件之間的耦合度

    處理器映射器:HandlerMapping

    • HandlerMapping負(fù)責(zé)生成Handler。

    • DispatcherServlet解析請求的URL得到URI(請求資源標(biāo)識符),然后根據(jù)URI調(diào)用處理器映射器(HandlerMapping)獲得具體的Handler,以執(zhí)行鏈(HandlerExecutionChain)的形式,將處理器對象(Handler)和處理器攔截器(HandlerInterceptor)返回給DispatcherServlet。

    • SpringMVC 提供了不同的映射器實(shí)現(xiàn)不同的映射方式,例如:配置文件方式,實(shí)現(xiàn)接口方式,注解方式等。

    處理器適配器:HandlerAdapter

    • DispatcherServlet根據(jù)獲取的Handler,選擇一個(gè)合適的HandlerAdapter。

    • HandlerAdapter是適配器模式的應(yīng)用,通過擴(kuò)展適配器可以對更多類型的處理器進(jìn)行執(zhí)行。

    處理器:Handler

    • Handler就是要編寫的具體業(yè)務(wù)控制器Controller。

    • 提取Request中的模型數(shù)據(jù),填充Handler入?yún)?#xff0c;開始執(zhí)行Handler;在填充Handler入?yún)⒌倪^程中,根據(jù)配置Spring將做一些額外的工作:

      • HttpMessageConveter:將請求消息(如Json、XML等數(shù)據(jù))轉(zhuǎn)換成一個(gè)對象,將對象轉(zhuǎn)換為指定的響應(yīng)消息;
      • 數(shù)據(jù)轉(zhuǎn)換:將請求消息進(jìn)行數(shù)據(jù)轉(zhuǎn)換。例如:String轉(zhuǎn)換成Integer、Double等;
      • 數(shù)據(jù)格式化:對請求消息進(jìn)行數(shù)據(jù)格式化。例如:將字符串轉(zhuǎn)換成格式化數(shù)字或格式化日期等;
      • 數(shù)據(jù)驗(yàn)證:驗(yàn)證數(shù)據(jù)的有效性(長度、格式等),驗(yàn)證結(jié)果存儲到BingdingResult或Error中;

    視圖解析器:ViewResolver

    • ViewResolver 負(fù)責(zé)將處理結(jié)果生成 View 視圖。

    • Handler執(zhí)行完成后,HandlerAdaptor向DispatcherServlet返回一個(gè)ModelAndView對象,其中view是視圖名稱,并不是真正的視圖對象;根據(jù)ModelAndView選擇一個(gè)合適的ViewResolver對象,ViewResolver對象把DispatcherServlet提供的ModelAndView解析成視圖View對象(JSP)。

    視圖:View

    • 最常見的視圖View是Jsp

    • DispatcherServlet對視圖View進(jìn)行渲染(將模型數(shù)據(jù)填充到視圖中),響應(yīng)給用戶。

    • SpringMVC 框架提供了很多的 View 視圖類型的支持,包括:jsp、jstlView、freemarkerView、pdfView等。

    Spring-MVC注解

    @RequestMapping

    作用:用于建立請求 URL 和處理請求方法之間的對應(yīng)關(guān)系

    書寫位置:

    類上,請求URL 的第一級訪問目錄。此處不寫的話,就相當(dāng)于應(yīng)用的根目錄方法上,請求 URL 的第二級訪問目錄,與類上的使用@ReqquestMapping標(biāo)注的一級目錄一起組成訪問虛擬路徑

    屬性:

    value:用于指定請求的URL。它和path屬性的作用是一樣的method:用于指定請求的方式,值為枚舉類型params:用于指定限制請求參數(shù)的條件。它支持簡單的表達(dá)式。要求請求參數(shù)的key和value必須和配置的一模一樣

    例如:

    params = {"accountName"},表示請求參數(shù)必須有accountNameparams = {"moeny!100"},表示請求參數(shù)中money不能是100

    @PostMapping

    相當(dāng)于@RequestMapping(method={RequestMethod.POST})

    @GetMapping

    相當(dāng)于@RequestMapping(method={RequestMethod.GET})

    @params 限定請求參數(shù)

    // 有時(shí)候要求請求必須攜帶某個(gè)參數(shù),比方說token,可以使用下屬寫法:@RequestMapping(value = "test2_4",params = "token"){//拿到token進(jìn)行處理 }// 這個(gè)時(shí)候如果請求參數(shù)里面沒有token,請求將不會成功

    @RequestHeader 限制請求頭

    做接口開發(fā)時(shí),因?yàn)橐苿佣丝赡苁荌OS,也有可能是Android,需要對不同設(shè)備做不同處理, 這個(gè)時(shí)候可以添加一個(gè)device_type(名字任意,見名知意即可)的請求頭,寫法如下:public String test2_5(@RequestHeader String device_type,){//獲取設(shè)備類型進(jìn)行判斷處理}而且隨著版本的更新,高版本可能會支持一些新特性,但是低版本支持不了, 這個(gè)時(shí)候也可以通過添加請求頭的方式處理,寫法如下://對于軟件版本的請求頭,老版本的app可能不支持,只需要在@RequestHeader內(nèi)添加required = false即可,默認(rèn)值為true。public String test2_5(@RequestHeader String device_type,@RequestHeader(required = false) String app_version){//獲取設(shè)備類型、軟件版本進(jìn)行判斷處理}

    代碼演示

    <!-- 組件掃描。 --> <context:component-scan base-package=“com.itheima.controller"/> @Controller @RequestMapping("/user") public class QuickController {//value的值用于表示訪問地址值//method的值用于限定請求的方式,常用的是get和post,分別用RequestMethod.GET和RequestMethod.post表示//params可以對傳遞參數(shù)進(jìn)行限制,params={"username"}用于要去請求參數(shù)必須含有username@RequestMapping(value="/quick",method= RequestMethod.GET,params={"username"})public String quickMethod(){System.out.println("quickMethod running.....");return "/success.jsp";} }

    SpringMVC的XML配置解析

    視圖解析的請求轉(zhuǎn)發(fā)和重定向

    直接在Controller類中的方法中返回一個(gè)字符串,SpringMVC會幫助我們找到對應(yīng)的視圖資源,默認(rèn)使用請求轉(zhuǎn)發(fā)方式。

    return "/index.jsp";//上述代碼相當(dāng)于 return "forward:/index.jsp";

    可以在字符串前添加redirect改為請求重定向。

    return "redirect:/index.jsp";

    內(nèi)置資源視圖解析器的前綴和后綴

    可以在SpringMVC的配置文件中通過配置優(yōu)化Controller返回的視圖(視圖名)

    <bean class="org.srpingframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/pages/"/><property name="suffix" value=".jsp"/></bean>

    上述配置其實(shí)就是配置了一個(gè)Bean,用配置的方式修改了這個(gè)Bean里面的兩個(gè)屬性值。

    這樣配置之后,Controller內(nèi)方法最終返回的視圖名稱就是

    //前綴prefix值+方法返回值+后綴suffix值 即:/pages/index.jspreturn "index";

    重定向和內(nèi)置資源視圖解析器配合使用

    如果想要同時(shí)使用重定向和內(nèi)置資源視圖解析器的前后綴,不能直接寫成:

    //SpringMVC沒有這么智能,可以幫你截串之后再拼接成redirect:/pages/index.jspreturn "redirect:index";

    如果想要讓redirect生效,只能手動把路徑寫全,如下:

    //手動添加了redirect或者forward后,內(nèi)置資源視圖解析器內(nèi)置資源視圖解析器不會再幫你補(bǔ)全路徑,需要手動寫全return "redirect:/pages/index.jsp";

    SpringMVC有默認(rèn)組件配置,默認(rèn)組件都是DispatcherServlet.properties配置文件中配置的,該配置文件地址org/springframework/web/servlet/DispatcherServlet.properties,該文件中配置了默認(rèn)的視圖解析器,如下:

    org.springframework.web.servlet.ViewResolver = org.springframework.web.servlet.view.InternalResourceViewResolver

    翻看該解析器源碼,可以看到該解析器的默認(rèn)設(shè)置,如下:

    REDIRECT_URL_PREFIX = "redirect:" --重定向前綴FORWARD_URL_PREFIX = "forward:" --轉(zhuǎn)發(fā)前綴(默認(rèn)值)prefix = ""; --視圖名稱前綴suffix = ""; --視圖名稱后綴 《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

    總結(jié)

    以上是生活随笔為你收集整理的【SSM框架系列】Spring-MVC的组件解析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。