<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          SpringBoot中請求映射的原理

          共 1823字,需瀏覽 4分鐘

           ·

          2021-01-11 22:39

          點(diǎn)擊上方藍(lán)色字體,選擇“標(biāo)星公眾號”

          優(yōu)質(zhì)文章,第一時間送達(dá)

          76套java從入門到精通實(shí)戰(zhàn)課程分享

          本圖是很久以前學(xué)習(xí)SpringMVC時的,本次學(xué)習(xí)拿出來對照收獲頗多。

          帶著問題學(xué)習(xí):我們寫的接口,是如何被處理的。

          在SpringBoot中,所有的請求都是會來到DispatcherServlet中,而這也就是SpringMVC中的東西。

          從此圖可以看出繼承樹,最終是來到HttpServlet的,也就是說必然會有doGetPost方法。而HttpServlet并沒有,于是順著關(guān)系找下去。

          在FrameworkServlet中,我們發(fā)現(xiàn)了重寫的方法:

          而兩個方法都是調(diào)用processRequest的,進(jìn)入進(jìn)去:

          除了各種初始化過程,最終做的是調(diào)用doService方法。而FrameworkServlet中doService是抽象的,來到DispatcherServlet中找到此方法:

          protected?void?doDispatch(HttpServletRequest?request,?HttpServletResponse?response)?throws?Exception?{
          ??HttpServletRequest?processedRequest?=?request;
          ??HandlerExecutionChain?mappedHandler?=?null;
          ??boolean?multipartRequestParsed?=?false;

          ??WebAsyncManager?asyncManager?=?WebAsyncUtils.getAsyncManager(request);

          ??try?{
          ???ModelAndView?mv?=?null;
          ???Exception?dispatchException?=?null;

          ???try?{
          ????processedRequest?=?checkMultipart(request);
          ????multipartRequestParsed?=?(processedRequest?!=?request);

          ????//?找到當(dāng)前請求使用哪個Handler(Controller的方法)處理
          ????mappedHandler?=?getHandler(processedRequest);
          ????????????????
          ????????????????//HandlerMapping:處理器映射。/xxx->>xxxx

          略過一些與本次學(xué)習(xí)無關(guān)的,直接看倒數(shù)兩行,將會通過getHandler方法,找到合適的Handler(Controller的方法)處理(流程2、3):

          而handlerMapping中會有五個值:

          RequestMappingHandlerMapping:保存了所有@RequestMapping 和handler的映射規(guī)則:

          順便講了歡迎頁的原理:
          ? 請求進(jìn)來,挨個嘗試所有的HandlerMapping看是否有請求信息。
          ? 如果有就找到這個請求對應(yīng)的handler
          ? 如果沒有就是下一個 HandlerMapping

          如果你啥也沒傳,也就是"/",那么在RequestMappingHandlerMapping中將不會找到合適的,然后他就會循環(huán)到下一個控制器:WelcomePageHandlerMapping:

          而這個控制器就是專門處理"/"的,于是根據(jù)處理,轉(zhuǎn)發(fā)到index.html中。
          (SpringBoot自動配置歡迎頁的 WelcomePageHandlerMapping 。訪問 /能訪問到index.html;)

          而不管是哪個控制器,找到后都會對應(yīng)的操作邏輯,也就是流程5后面的事情了。


          版權(quán)聲明:本文為博主原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接和本聲明。

          本文鏈接:https://blog.csdn.net/weixin_42313246/article/details/112311353


          粉絲福利:Java從入門到入土學(xué)習(xí)路線圖

          ??????

          ??長按上方微信二維碼?2 秒


          感謝點(diǎn)贊支持下哈?

          瀏覽 59
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  俺去听听婷婷 | 天天日,天天干,天天射 | 黄色毛片毛片 | 久久超碰大香蕉 | 日韩毛片在线免费观看 |