中文在线免费看视频_国产成人精品亚洲日本在线观看_亚洲精品第一综合99久久_国产亚洲精品日韩综合网

當(dāng)前位置: 首頁(yè) / 技術(shù)干貨 / 正文
SpringMVC源碼解析(三)

2023-03-09

處理器 映射器 bean   

  3 處理器映射器HandlerMapping

  HandlerMapping接口負(fù)責(zé)根據(jù)request請(qǐng)求找到對(duì)應(yīng)的Handler處理器及Interceptor攔截器,并將它們封裝在HandlerExecutionChain對(duì)象中,返回給中央調(diào)度器。

  其常用的實(shí)現(xiàn)類有兩種:

  BeanNameUrlHandlerMapping

  SimpleUrlHandlerMapping

  3.1 BeanNameUrlHandlerMapping

  BeanNameUrlHandlerMapping處理器映射器會(huì)根據(jù)請(qǐng)求的url與Spring容器中定義的處理器bean的name屬性值進(jìn)行匹配,從而在Spring容器中找到處理器bean實(shí)例。

<!-- 注冊(cè)處理器映射器 -->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>
<!-- 注冊(cè)處理器 -->
<bean name="/hello" class="com.cy.controller.HelloController"></bean>

  打開(kāi)類的源碼,從BeanNameUrlHandlerMapping處理器映射器的方法中可以看出,對(duì)于處理器的bean的名稱,必須以“/”開(kāi)頭,否則無(wú)法加入到urls數(shù)組中。

public class BeanNameUrlHandlerMapping extends AbstractDetectingUrlHandlerMapping {

/**
* 檢查給定bean的名稱和別名的URL,以“/”開(kāi)頭。
*/
@Override
protected String[] determineUrlsForHandler(String beanName) {
List<String> urls = new ArrayList<>();
if (beanName.startsWith("/")) {
urls.add(beanName);
}
String[] aliases = obtainApplicationContext().getAliases(beanName);
for (String alias : aliases) {
if (alias.startsWith("/")) {
urls.add(alias);
}
}
return StringUtils.toStringArray(urls);
}

}

  使用BeanNameUrlHandlerMapping處理器映射器有兩點(diǎn)明顯不足:

  處理器bean的id為一個(gè)url請(qǐng)求路徑,而不是bean的名稱,有些不倫不類。

  處理器bean的定義與請(qǐng)求url綁定在了一起,若出現(xiàn)多個(gè)url請(qǐng)求同一個(gè)處理器的情況,就需要在Spring容器中配置多個(gè)該處理器類的bean標(biāo)簽,這將導(dǎo)致容器會(huì)創(chuàng)建多個(gè)該處理器類實(shí)例。

<!-- 注冊(cè)處理器映射器 -->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>
<!-- 注冊(cè)處理器:為一個(gè)處理器綁定多個(gè)請(qǐng)求url -->
<bean name="/hello" class="com.cy.controller.HelloController"></bean>
<bean name="/world" class="com.cy.controller.HelloController"></bean>

  3.2 SimpleUrlHandlerMapping

  SimpleUrlHandlerMapping處理器映射器,不僅可以將url與處理器的定義分離,還可以對(duì)url進(jìn)行統(tǒng)一映射管理。

  SimpleUrlHandlerMapping處理器映射器會(huì)根據(jù)請(qǐng)求的url與Spring容器中定義的處理器映射器子標(biāo)簽的key屬性進(jìn)行匹配。匹配上后,再將該key的value值與處理器bean的id值進(jìn)行匹配,從而在Spring容器中找到處理器bean。

<!-- 注冊(cè)處理器映射器方式2:SimpleUrlHandlerMapping實(shí)現(xiàn)類 -->
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<!-- 方式1:通過(guò)mappings屬性為同一個(gè)處理器綁定多個(gè)url請(qǐng)求,二選一 -->
<property name="mappings">
<props>
<prop key="/hello.do">helloController</prop>
<prop key="/world.do">helloController</prop>
</props>
</property>
<!-- 方式2:通過(guò)mappings屬性為同一個(gè)處理器綁定多個(gè)url請(qǐng)求,二選一 -->
<property name="urlMap">
<map>
<entry key="/hello.action" value="helloController"/>
<entry key="/world.action" value="helloController"/>
</map>
</property>
</bean>
<!-- 注冊(cè)處理器 -->
<bean id="helloController" class="com.cy.controller.HelloController"></bean>

<!-- 注冊(cè)處理器映射器方式1:BeanNameUrlHandlerMapping實(shí)現(xiàn)類 -->
<!-- <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean> -->
<!-- <bean name="/hello" class="com.cy.controller.HelloController"></bean> -->
<!-- <bean name="/world" class="com.cy.controller.HelloController"></bean> -->

  3.3 HandlerMapping源碼分析

  HandlerMapping的調(diào)用過(guò)程見(jiàn)下:

org.springframework.web.servlet.DispatcherServlet(類):
-- void doService(HttpServletRequest request, HttpServletResponse response)
-- doDispatch(request, response)
-- void doDispatch(HttpServletRequest request, HttpServletResponse response)
-- getHandler(processedRequest, false)
-- HandlerExecutionChain getHandler(HttpServletRequest request, boolean cache)
-- getHandler(request)
-- HandlerExecutionChain getHandler(HttpServletRequest request)
-- hm.getHandler(request)

org.springframework.web.servlet.HandlerMapping(接口):
-- HandlerExecutionChain getHandler(HttpServletRequest request)

org.springframework.web.servlet.handler.AbstractHandlerMapping(抽象類 implements HandlerMapping):
-- HandlerExecutionChain getHandler(HttpServletRequest request)
-- getHandlerExecutionChain(handler, request)
-- HandlerExecutionChain getHandlerExecutionChain(Object handler, HttpServletRequest request)

好程序員公眾號(hào)

  • · 剖析行業(yè)發(fā)展趨勢(shì)
  • · 匯聚企業(yè)項(xiàng)目源碼

好程序員開(kāi)班動(dòng)態(tài)

More+
IT培訓(xùn)IT培訓(xùn)
在線咨詢
IT培訓(xùn)IT培訓(xùn)
試聽(tīng)
IT培訓(xùn)IT培訓(xùn)
入學(xué)教程
IT培訓(xùn)IT培訓(xùn)
立即報(bào)名
IT培訓(xùn)

Copyright 2011-2023 北京千鋒互聯(lián)科技有限公司 .All Right 京ICP備12003911號(hào)-5 京公網(wǎng)安備 11010802035720號(hào)

中文在线免费看视频_国产成人精品亚洲日本在线观看_亚洲精品第一综合99久久_国产亚洲精品日韩综合网

            欧美mv日韩mv国产| 国产精品日韩成人| 午夜电影久久久| 国产精品久久久久毛片软件| 日韩一区二区三区在线视频| 日本高清无吗v一区| 欧美亚州韩日在线看免费版国语版| 黄网站免费久久| 五月天网站亚洲| 亚洲精品国产成人久久av盗摄| 国产亚洲女人久久久久毛片| 日韩一区二区三区四区| 国产精品一区二区黑丝| 美女视频黄频大全不卡视频在线播放 | 国产精品国产自产拍在线| 日韩三级在线观看| 在线欧美小视频| 91美女视频网站| 国产99久久久精品| 国产成人在线视频网址| 久久成人免费日本黄色| 蜜臀av国产精品久久久久| 亚洲图片欧美视频| 一区二区三区**美女毛片| 亚洲欧美在线视频观看| 国产精品久久久久一区二区三区共| 久久久久久**毛片大全| 2021久久国产精品不只是精品| 日韩三级高清在线| 日韩亚洲欧美一区| 日韩女优电影在线观看| 欧美mv和日韩mv的网站| 亚洲精品在线免费观看视频| 日韩欧美国产三级电影视频| 欧美一区二区三区的| 日韩一级免费一区| 精品少妇一区二区三区免费观看| 欧美性大战久久| 欧美三级视频在线| 欧美一区二区三区男人的天堂 | 午夜精品在线看| 久色婷婷小香蕉久久| 狠狠色丁香久久婷婷综合_中| 国产成人午夜电影网| 91一区二区在线| 欧美人妇做爰xxxⅹ性高电影| 欧美xxxxx牲另类人与| 中文字幕精品三区| 一区二区三区欧美| 理论电影国产精品| caoporm超碰国产精品| 欧美人伦禁忌dvd放荡欲情| 精品久久久久久久久久久院品网 | 日韩高清不卡一区二区| 国产在线播放一区| 在线观看视频一区二区| 精品成人一区二区三区| 亚洲码国产岛国毛片在线| 免费成人美女在线观看| eeuss鲁片一区二区三区| 欧美高清dvd| 国产精品电影院| 蜜桃久久久久久| 91在线观看地址| www日韩大片| 亚洲国产精品自拍| 国产成人精品免费看| 欧美日韩国产中文| 国产精品美女久久久久久久久| 午夜久久久久久久久 | 久久综合给合久久狠狠狠97色69| 亚洲卡通动漫在线| 精品一区二区日韩| 国产色综合一区| 亚洲综合免费观看高清完整版 | 日韩欧美国产一区二区在线播放| 国产精品久久久久天堂| 美女久久久精品| 91福利在线播放| 中文字幕欧美区| 美女网站色91| 欧美日韩黄色一区二区| 亚洲婷婷综合色高清在线| 久久国产麻豆精品| 欧美日韩一区二区不卡| 成人欧美一区二区三区| 国产一区二区三区日韩| 欧美乱妇15p| 亚洲国产美女搞黄色| 91年精品国产| 国产精品视频观看| 国产一区二区三区免费在线观看| 欧美精品一二三| 夜夜精品浪潮av一区二区三区| eeuss鲁一区二区三区| 国产欧美日韩精品a在线观看| 久久国产三级精品| 日韩欧美国产一区在线观看| 五月综合激情婷婷六月色窝| 在线影视一区二区三区| 国产精品久久久久久久久果冻传媒 | 精品国内二区三区| 老色鬼精品视频在线观看播放| 欧美精品日日鲁夜夜添| 亚洲电影在线免费观看| 在线免费观看视频一区| 亚洲男人都懂的| 91免费观看视频在线| 国产精品国产成人国产三级| 成人动漫一区二区三区| 国产精品久久久久天堂| 不卡一区在线观看| 自拍视频在线观看一区二区| av亚洲精华国产精华| 国产精品视频观看| 99久久精品国产导航| 亚洲欧美精品午睡沙发| 在线一区二区三区四区五区| 亚洲久草在线视频| 欧美三级午夜理伦三级中视频| 亚洲午夜激情网站| 欧美视频在线观看一区| 天天操天天综合网| 日韩欧美在线影院| 国产毛片精品一区| 中文字幕亚洲欧美在线不卡| 91免费看`日韩一区二区| 一区二区三区四区蜜桃| 欧美色偷偷大香| 麻豆专区一区二区三区四区五区| 精品成人一区二区| 成人免费视频视频| 玉米视频成人免费看| 一区二区三区在线观看动漫| 欧美性色欧美a在线播放| 日韩有码一区二区三区| 久久综合资源网| 91视频.com| 婷婷成人综合网| 国产丝袜美腿一区二区三区| 99久久精品国产观看| 亚洲v中文字幕| 精品国一区二区三区| 成+人+亚洲+综合天堂| 亚洲国产成人av网| 精品国产123| 91蜜桃传媒精品久久久一区二区| 午夜精品福利一区二区三区av| 亚洲精品在线电影| eeuss国产一区二区三区| 日韩有码一区二区三区| 中文字幕欧美日韩一区| 欧美日本不卡视频| 成人丝袜18视频在线观看| 亚洲国产一二三| 2023国产精华国产精品| 在线日韩国产精品| 国产精品影音先锋| 亚洲国产精品一区二区www在线| 久久综合五月天婷婷伊人| 欧美综合在线视频| 国产精品一区二区在线观看不卡 | 精品处破学生在线二十三| 色综合久久天天| 久久99久久99| 亚洲免费视频成人| 欧美精品一区二区三区蜜臀| 色综合天天综合网国产成人综合天 | 538prom精品视频线放| 成人av影视在线观看| 蜜臀久久久久久久| 亚洲人成精品久久久久| 久久九九久久九九| 欧美狂野另类xxxxoooo| 92精品国产成人观看免费| 男人的天堂亚洲一区| 亚洲精品福利视频网站| xvideos.蜜桃一区二区| 欧美日韩成人在线| 色综合天天在线| 国产99久久久国产精品潘金网站| 日本视频中文字幕一区二区三区| 亚洲视频 欧洲视频| 国产三级一区二区| 日韩精品一区二区在线| 欧美日韩国产综合草草| 91久久精品一区二区三区| 国产91丝袜在线播放九色| 精品一区二区三区视频在线观看| 亚洲高清视频在线| 亚洲欧美日韩精品久久久久| 欧美国产一区在线| 日韩欧美国产wwwww| 欧美蜜桃一区二区三区| 欧洲精品视频在线观看| 色视频成人在线观看免| 91小视频在线免费看| av在线综合网| 暴力调教一区二区三区| 欧美一区永久视频免费观看|