成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

spring MVC -- controller參數(shù)的解析

suemi / 3182人閱讀

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

spring給我們帶來了什么?

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

0x01 springMVC工程的建立

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

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

在進行springMVC的開發(fā)過程中我們都會在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容器而服務的。它實現(xiàn)了ServletContextListener這個接口,通過這個接口的方法實現(xiàn)servlet生命周期的回調(diào),在這個過程中會通過XmlWebApplicationContext去加載bean的配置創(chuàng)建IoC容器。

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

0x03 controller的參數(shù)是如何被解析的

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

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

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

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

這是為什么?怎么解決?

搜索后發(fā)現(xiàn)這樣可以解決問題,但是sowhat?

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

所以需要來剖析下springMVC的源代碼了,發(fā)現(xiàn)spring是通過下面這個方法進行controller參數(shù)解析的。

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

解析參數(shù)值的代碼(里面好多if else?。?br>

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

如果是下面這樣的方法參數(shù)又會怎樣

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

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

org.springframework.beans.TypeConverterDelegate#convertIfNecessary

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

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

0x04 感想

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

0x05 參考

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

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

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

相關文章

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

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

    maybe_009 評論0 收藏0
  • Spring實戰(zhàn)5-基于Spring構建Web應用

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

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

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

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

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

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

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

    DesGemini 評論0 收藏0

發(fā)表評論

0條評論

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