国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

spring MVC -- controller參數的解析

suemi / 3171人閱讀

摘要:是提供的類,為了在容器中建立容器而服務的。主要處理的請求分發,對進行管理。接收到請求由進行匹配,匹配成功后交由進行業務邏輯的處理,業務邏輯處理完成后交由進行數據的解析同時找到對應的,最終由將的結果到瀏覽器進行解析。

spring給我們帶來了什么?

spring IoC、AOP、Transaction這些都是很重要的特性,但是這篇這些都不是主角,主要來談談springMVC是如何對請求參數進行解析封裝的,以及簡單的介紹spring是怎么進行http請求路由的。

0x01 springMVC工程的建立

本篇就不過多介紹springMVC的工程的新建過程,此次調試springMVC源碼新建的工程目錄如下,通過maven管理的工程:

0x02 spring是如何接入web容器的

在進行springMVC的開發過程中我們都會在web.xml文件中進行下面一些配置,但是這些配置都是用來干嘛的呢?



    
    
        contextConfigLocation
        classpath:config/applicationContext.xml
    
    
        org.springframework.web.context.ContextLoaderListener
    

    
    
        logbackConfigLocation
        classpath:logconfig/logback.xml
    
    
        ch.qos.logback.ext.spring.web.LogbackConfigListener
    

    
    
        springMvc
        org.springframework.web.servlet.DispatcherServlet
        
            contextConfigLocation
            classpath:config/applicationMvcContext.xml
        
    
    
        springMvc
        /
    
 

這里著重介紹ContextLoaderListener和DispatcherServlet。

ContextLoaderListener是spring提供的類,為了在web容器中建立IoC容器而服務的。它實現了ServletContextListener這個接口,通過這個接口的方法實現servlet生命周期的回調,在這個過程中會通過XmlWebApplicationContext去加載bean的配置創建IoC容器。

DispatcherServlet作為一個前端控制器,他會去加載另一個bean的配置形成一個IoC容器,這個IoC會將ContextLoaderListener加載的IoC容器作為父容器,這樣的好處是從DispatcherServlet容器中getBean也能取到父容器中的bean,他會先去父容器中看有沒有,如果找到直接返回了。DispatcherServlet 主要處理HTTP的請求分發(HandlerMapping),對controller、viewresolver、view進行管理。DispatcherServlet接收到請求由HandlerMapping進行匹配,匹配成功后交由controller進行業務邏輯的處理,業務邏輯處理完成后交由viewresolver進行數據的解析同時找到對應的view,最終由DispatcherServlet將view的結果render到瀏覽器進行解析。

0x03 controller的參數是如何被解析的

在開發過程中遇到下面這樣的controller方法怎么也得到不到us值,

public String printWelcome(ModelMap model,ArrayList us){}

如果改成下面這樣就可以正常得到us的值

public String printWelcome(ModelMap model,String us){}

這是為什么?怎么解決?

搜索后發現這樣可以解決問題,但是sowhat?

public String printWelcome(ModelMap model,@RequestParam("us[]") List us){}

所以需要來剖析下springMVC的源代碼了,發現spring是通過下面這個方法進行controller參數解析的。

org.springframework.web.bind.annotation.support.HandlerMethodInvoker#resolveHandlerArguments

解析參數值的代碼(里面好多if else啊):

從這個圖片可以看到通過if去判斷paramName對應controller方法中的@RequestParam,pathVarName對應@PathVariable,沒有加任何修飾會進入到attrName這個分支里面去解析參數。在解析的過程中會通過函數的參數類型去組裝對象傳遞到RequestMapping類的方法中。

如果是下面這樣的方法參數又會怎樣

public String printWelcome(ModelMap model,@RequestParam("us[]") List us){}

User是自定義的參數,spring會對這種參數進行一個特殊的處理處理方法如下:

org.springframework.beans.TypeConverterDelegate#convertIfNecessary

在這個方法中有一段處理的代碼,會根據List內部元素類型去判斷類型是不準確并賦值。

到這里應該和controller相關的注解可以隨便用了吧?

0x04 感想

在學校期間一直用著C、C++進行開發,其實也沒怎么開發,只是作為裝逼的一種手段,如今踏入工作崗位開始離C、C++很遠了,又開始了0基礎JAVA開發。作為一個門外漢來觀望spring。
spring的東西太多了,也很權威大家基本上都用,所以后面還學要加強這方面的探索和學習,期待后面自己還能將spring的學習感想記錄下來。這篇是在進行開發的過程中遇到上面提到的一個問題所以想深入了解其背后的實現方式,未來繼續spring。

0x05 參考

在學習spring的過程中可以參考計文柯著的spring技術內幕,里面結合代碼講解了spring的各個重要的技術,需要一定的基礎再去看比較好,值得推薦。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/65948.html

相關文章

  • Spring之旅第八站:Spring MVC Spittr舞臺搭建、基本控制器、請求輸入、表

    摘要:請求旅程的第一站是的。的任務是將請求發送控制器控制器是一個用于處理請求的組件。處理映射器根據請求攜帶的信息來進行決策。這樣的結果就是,只能找到顯示聲明在配置類中的控制器。 構建Spring Web應用 說明 如果你有幸能看到。 1、本文參考了《Spring 實戰》重點內容,參考了GitHub上的代碼 2、本文只為記錄作為以后參考,要想真正領悟Spring的強大,請看原書。 3、在一次...

    maybe_009 評論0 收藏0
  • Spring實戰5-基于Spring構建Web應用

    摘要:的框架用于解決上述提到的問題,基于模型,可以幫助開發人員構建靈活易擴展的應用。在這一章中,將專注于構建該應用的層,創建控制器和顯示,以及處理用戶注冊的表單。類有兩個靜態接口,代表兩種模擬服務的方式獨立測試和集成測試。 主要內容 將web請求映射到Spring控制器 綁定form參數 驗證表單提交的參數 寫在前面:關于Java Web,首先推薦一篇文章——寫給java web一年左右...

    sourcenode 評論0 收藏0
  • SpringMVC學習筆記

    摘要:是目前最流行的一種互聯網軟件架構。協議,是一個無狀態協議,即所有的狀態都保存在服務器端。而這種轉化是建立在表現層之上的,所以就是表現層狀態轉化。具體說,就是協議里面,四個表示操作方式的動詞。 一、SpringMVC概述 Spring為展現層提供的基于MVC設計理念的優秀的Web框架,是目前最主流的MVC框架之一 Spring3.0之后全面超越Struts2,成為最優秀的MVC框架 S...

    roundstones 評論0 收藏0
  • SpringMVC之源碼分析--HandlerMapping(一)

    摘要:接口接口作用是將請求映射到處理程序,以及預處理和處理后的攔截器列表,映射是基于一些標準的,其中的細節因不同的實現而不相同。該參數是類型,作用是檢查所有的映射解析器或使用或為的,默認為,即從上下文中檢查所有的。 概述 在Spring MVC啟動章節https://segmentfault.com/a/1190000014674239,介紹到了DispatcherServlet的onRef...

    ralap 評論0 收藏0
  • Learn Spring - Spring MVC

    摘要:例如,將請求信息中的字符串格式參數轉換為對應方法中的類類型入參可通過的屬性注冊自定義轉換器。 1. 處理流程 請求提交給DispatchServlet 查找HandlerMapping 調用由HandlerAdapter封裝后的Handler 返回ModelAndView到DispatcherServlet 借由ViewResolver完成邏輯視圖到真實視圖的轉換 返回響應 2. ...

    DesGemini 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<