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

資訊專欄INFORMATION COLUMN

springMvc源碼解讀--AbstractUrlHandlerMapping

dendoink / 1056人閱讀

摘要:系列都是繼承于,它是通過來進行匹配的,是將與對應(yīng)的保存在一個中,在方法中使用從中獲取,中實現(xiàn)了具體用從中獲取的過程,而將的初始化則交給了具體的子類去完成。這里的就是定義在中的,另外還多帶帶定義了處理請求的處理器。

AbstractUrlHandlerMapping系列都是繼承于AbstractUrlHandlerMapping,它是通過URL來進行匹配的,是將URL與對應(yīng)的handler保存在一個map中,在getHandlerInternal方法中使用URL從map中獲取handler,AbstractUrlHandlerMapping中實現(xiàn)了具體用URL從map中獲取handler的過程,而將map的初始化則交給了具體的子類去完成。這里的map就是定義在AbstractUrlHandlerMapping中的handlerMap,另外還多帶帶定義了處理“/”請求的處理器rootHandler。

handler的入口是getHandlerInternal,具體實現(xiàn)如下:
/* Java

@Override
@Nullable
protected Object getHandlerInternal(HttpServletRequest request) throws Exception {
    String lookupPath = getUrlPathHelper().getLookupPathForRequest(request);
    Object handler = lookupHandler(lookupPath, request);
    if (handler == null) {
        // We need to care for the default handler directly, since we need to
        // expose the PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE for it as well.
        Object rawHandler = null;
        if ("/".equals(lookupPath)) {
            rawHandler = getRootHandler();
        }
        if (rawHandler == null) {
            rawHandler = getDefaultHandler();
        }
        if (rawHandler != null) {
            // Bean name or resolved handler?
            if (rawHandler instanceof String) {
                String handlerName = (String) rawHandler;
                rawHandler = obtainApplicationContext().getBean(handlerName);
            }
            validateHandler(rawHandler, request);
            handler = buildPathExposingHandler(rawHandler, lookupPath, lookupPath, null);
        }
    }
    if (handler != null && logger.isDebugEnabled()) {
        logger.debug("Mapping [" + lookupPath + "] to " + handler);
    }
    else if (handler == null && logger.isTraceEnabled()) {
        logger.trace("No handler mapping found for [" + lookupPath + "]");
    }
    return handler;
}

*/
這里lookupHandler方法用于使用lookupPath從map中查找handler,不過很多時候不能從map中直接get到結(jié)果,因為很多handler都是用了pattern的匹配模式,如“/getData/*",這里的星號可以代表任意內(nèi)容而不是真正的匹配URL中的星號,buildPathExposingHandler方法的作用是用于查找到的handler注冊兩個攔截器PathExposingHandlerInterceptor和UriTemplateVariablesHandlerInterceptor,這是兩個內(nèi)部攔截器,主要作用是將與當前URL實際匹配的pattern、匹配條件,和URL模版參數(shù)等設(shè)置到request的屬性里,這樣在后面的處理過程中可以直接從request屬性中獲取。

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

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/72597.html

相關(guān)文章

  • SpringMvc源碼解讀--AbstractUrlHandlerMapping系列

    摘要:定義了一個變量,將所有的和的對應(yīng)關(guān)系放在里面,最后注冊在父類里面,創(chuàng)建時通過重寫調(diào)用方法完成的注冊,內(nèi)部又調(diào)用父類的方法將我們注冊的的注冊到之中。 SimpleUrlHandlerMapping定義了一個map變量,將所有的URL和handler的對應(yīng)關(guān)系放在里面,最后注冊在父類里面,SimpleUrlHandlerMapping創(chuàng)建時通過重寫initApplicationConte...

    mj 評論0 收藏0
  • springMvc源碼解讀--HandlerMapping

    摘要:它的作用是根據(jù)找到相應(yīng)的處理器和接口里面只有一個方法只要使用就會返回一個,當然我們可以定義自己的實現(xiàn)類來實現(xiàn)。 HandlerMapping:它的作用是根據(jù)request找到相應(yīng)的處理器handler和interceptors,HandlerMapping接口里面只有一個方法HandlerExecutionChain getHandler(HttpServletRequest req...

    VishKozus 評論0 收藏0
  • SpringMVC源碼分析--HandlerMapping(二)

    摘要:由于抽象類重寫了父類的方法,所以此時會調(diào)用的方法,在該方法中通過調(diào)用父類的方法,該方法通過模板方法模式最終調(diào)到類的方法。分析該類間接實現(xiàn)了接口,直接實現(xiàn)該接口的是抽象類,映射與請求。 概述 在前一章https://segmentfault.com/a/1190000014901736的基礎(chǔ)上繼續(xù)分析,主要完成SimpleUrlHandlerMapping類的原理。 本系列文章是基于Sp...

    Imfan 評論0 收藏0
  • SpringMVC源碼分析--HandlerMapping(三)

    摘要:與類圖對比,類繼承自抽象類,其又繼承自抽象類,再往上繼承關(guān)系與一致。創(chuàng)建初始化上一章我們分析了的創(chuàng)建初始化過程,的創(chuàng)建初始化過程與一樣,方法的入口在抽象類中的方法。至此,代碼編寫完畢。 概述 本節(jié)我們繼續(xù)分析HandlerMapping另一個實現(xiàn)類BeanNameUrlHandlerMapping,從類的名字可知,該類會根據(jù)請求的url與spring容器中定義的bean的name屬性值...

    fsmStudy 評論0 收藏0
  • spring-cloud-zuul原理解析(一)

    摘要:是開源的微服務(wù)網(wǎng)關(guān),它可以和,等組件配合使用,網(wǎng)上也有很多如何使用的文章,我們也在生產(chǎn)環(huán)境使用了,所以讀了下的源碼,下面把它分享出來,與大家探討下核心原理。 Zuul是Netflix開源的微服務(wù)網(wǎng)關(guān),它可以和Eureka,consul,Ribbon,Hystrix等組件配合使用,網(wǎng)上也有很多如何使用zuul的文章,我們也在生產(chǎn)環(huán)境使用了,所以讀了下zuul的源碼,下面把它分享出來,與大...

    qingshanli1988 評論0 收藏0

發(fā)表評論

0條評論

dendoink

|高級講師

TA的文章

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