亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專(zhuān)欄INFORMATION COLUMN

SpringMVC之源碼分析--Controller(二)

KevinYan / 2513人閱讀

摘要:概述上篇文章主要分析了提供的及抽象類(lèi),本章繼續(xù)分析其具體的幾個(gè)實(shí)現(xiàn)類(lèi)。源碼由繼承關(guān)系繼承抽象類(lèi),并實(shí)現(xiàn)模板方法,完成將接收的請(qǐng)求進(jìn)行轉(zhuǎn)發(fā),源碼如下實(shí)現(xiàn)父類(lèi)模板方法獲取部署文件中定義的,傳入?yún)?shù)。

概述

上篇文章主要分析了Spring提供的Controller及抽象類(lèi)AbstractController,本章繼續(xù)分析其具體的幾個(gè)實(shí)現(xiàn)類(lèi)。

本系列文章是基于Spring5.0.5RELEASE。

ServletForwardingController

作用

ServletForwardingController實(shí)現(xiàn)的功能是將接收的用戶(hù)請(qǐng)求轉(zhuǎn)發(fā)給你一個(gè)命名的servlet去處理,該命名servlet需在部署描述(web.xml)文件中定義。

源碼

由繼承關(guān)系ServletForwardingController繼承AbstractController抽象類(lèi),并實(shí)現(xiàn)模板方法handleRequestInternal,完成將接收的請(qǐng)求進(jìn)行轉(zhuǎn)發(fā),源碼如下:

/**
 *實(shí)現(xiàn)父類(lèi)模板方法
 */
@Override
protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response)
        throws Exception {

    ServletContext servletContext = getServletContext();
    Assert.state(servletContext != null, "No ServletContext");
    // 獲取部署文件中定義的servlet,傳入servelet name參數(shù)。
    RequestDispatcher rd = servletContext.getNamedDispatcher(this.servletName);
    if (rd == null) {
        throw new ServletException("No servlet with name "" + this.servletName + "" defined in web.xml");
    }

    // 判斷是否是include請(qǐng)求
    if (useInclude(request, response)) {
        // 是include請(qǐng)求,繼續(xù)使用include
        rd.include(request, response);
        if (logger.isDebugEnabled()) {
            logger.debug("Included servlet [" + this.servletName +
                    "] in ServletForwardingController "" + this.beanName + """);
        }
    }
    else {
        // 非include請(qǐng)求,進(jìn)行轉(zhuǎn)發(fā)
        rd.forward(request, response);
        if (logger.isDebugEnabled()) {
            logger.debug("Forwarded to servlet [" + this.servletName +
                    "] in ServletForwardingController "" + this.beanName + """);
        }
    }

    return null;
}

實(shí)戰(zhàn)

編寫(xiě)servlet,代碼如下:

public class ForwardServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.getWriter().write("hello ForwardServlet...");
    }
}

配置部署描述文件,代碼如下:


    forwording
    com.github.dalianghe.controller.ForwardServlet
  

配置Spring配置文件,代碼如下:


    

測(cè)試

編寫(xiě)完以上代碼,啟動(dòng)系統(tǒng)并請(qǐng)求,地址:http://localhost:8086/forwardToServlet,請(qǐng)求將通過(guò)ServletForwardingController轉(zhuǎn)發(fā)到Servlet進(jìn)行處理,最終在界面如圖:

ParameterizableViewController

作用

根據(jù)參數(shù)的邏輯視圖名直接選擇需要展示的視圖,只支持GET、HEAD請(qǐng)求方法類(lèi)型。

源碼

核心處理方法源碼如下:

/**
 *處理請(qǐng)求
 */
@Override
protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response)
        throws Exception {
    //獲取配置的viewName屬性
    String viewName = getViewName();
    
    ... ...

    // 把視圖邏輯名設(shè)置到ModelAndView中
    if (getViewName() != null) {
        modelAndView.setViewName(viewName);
    }
    else {
        modelAndView.setView(getView());
    }
    return (isStatusOnly() ? null : modelAndView);
}

實(shí)戰(zhàn)

因?yàn)榇瞬糠质褂胘sp視圖,故需引入jstl支持,在pom文件中添加依賴(lài)坐標(biāo),如下:


  javax.servlet
  jstl
  1.2

在Spring配置文件中,添加相關(guān)配置,如下:



    
    
    
    
    



    

在WEB-INF下新建jsp文件夾及test.jsp文件,文件內(nèi)容如下:


    
        My Frist JSP
    
    
        

hello jsptest

測(cè)試

啟動(dòng)服務(wù),進(jìn)行測(cè)試,訪(fǎng)問(wèn)/helloJSP,結(jié)果如下:

測(cè)試結(jié)果表明,我們并未編寫(xiě)Controller,通過(guò)配置接口實(shí)現(xiàn)通過(guò)Spring轉(zhuǎn)發(fā)到視圖。

UrlFilenameViewController

作用

作用與ParameterizableViewController一樣,但功能強(qiáng)大很多,支持模式匹配。

示例

以下提供兩種示例,可做為參考,如下:





本類(lèi)不做演示了,有興趣的可以自行驗(yàn)證,有問(wèn)題可以留言或加入qq群反饋。

總結(jié)

本章主要分析并演示了Spring提供Controller接口的實(shí)現(xiàn)類(lèi),目前來(lái)說(shuō)用的很多,有些我也不是很明白,有講解錯(cuò)誤的地方,還望指定,真心的希望能與大家一起進(jìn)步。

最后創(chuàng)建了qq群方便大家交流,可掃描加入,同時(shí)也可加我qq:276420284,共同學(xué)習(xí)、共同進(jìn)步,謝謝!

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/69586.html

相關(guān)文章

  • SpringMVC源碼分析--ViewResolver(

    摘要:概述上篇學(xué)習(xí)了視圖解析器作用及處理流程,為我們提供了豐富的視圖解析器見(jiàn)下圖本系列文章是基于。該視圖解析器是根據(jù)處理器返回的邏輯視圖名稱(chēng),在應(yīng)用上下文中查找該名稱(chēng)的視圖對(duì)象視圖對(duì)象就是的對(duì)象。 概述 上篇學(xué)習(xí)了Spring MVC ViewResolver視圖解析器作用及處理流程,Spring為我們提供了豐富的視圖解析器(見(jiàn)下圖):showImg(https://segmentfault...

    jas0n 評(píng)論0 收藏0
  • SpringMVC源碼分析--ThemeResolver(

    摘要:類(lèi)實(shí)現(xiàn)接口,使用用戶(hù)會(huì)話(huà)中的主題。新增并更換一張不同的圖片。通過(guò)關(guān)閉瀏覽器,然后再訪(fǎng)問(wèn)進(jìn)行測(cè)試總結(jié)本章通過(guò)攔截器和結(jié)合實(shí)現(xiàn)了通過(guò)請(qǐng)求參數(shù)控制會(huì)話(huà)主題。 概述 本章繼續(xù)分析ThemeResolver的另一個(gè)實(shí)現(xiàn)類(lèi)SessionThemeResolver,需要了解Spring MVC Theme情況的,可參考上一篇文章https://segmentfault.com/a/119000001...

    antyiwei 評(píng)論0 收藏0
  • SpringMVC源碼分析--LocaleResolver(

    摘要:概述上一篇就默認(rèn)的進(jìn)行了分析,詳細(xì)請(qǐng)參考,本節(jié)我們繼續(xù)分析學(xué)習(xí),主要分析解析器類(lèi)繼承關(guān)系如下圖由上面類(lèi)圖可知,繼承并實(shí)現(xiàn)接口,主要是操作的工具類(lèi),繼承接口,增加了信息操作。即通過(guò)實(shí)現(xiàn)的選擇。 概述 上一篇就Spring MVC默認(rèn)的LocaleResovler(AcceptHeaderLocaleResolver)進(jìn)行了分析,詳細(xì)請(qǐng)參考https://segmentfault.com/...

    RichardXG 評(píng)論0 收藏0
  • SpringMVC源碼分析--Controller(一)

    摘要:總結(jié)本章主要分析了接口抽象類(lèi)以及對(duì)自定義的幾個(gè)重要屬性進(jìn)行了測(cè)試,希望對(duì)大家有幫助,謝謝。 概述 Controller是Spring MVC為我們提供的基礎(chǔ)的控制器接口,和HttpServlet一樣,接收request和response參數(shù)處理用戶(hù)請(qǐng)求,并返回ModelAndView,從概念上可以類(lèi)比Struts的Action。 Controller主要實(shí)現(xiàn)的如下功能: 接收并處理用...

    CKJOKER 評(píng)論0 收藏0
  • SpringMVC源碼分析--HandlerMapping(四)

    摘要:默認(rèn)支持該策略。以上是對(duì)的宏觀(guān)分析,下面我們進(jìn)行內(nèi)部細(xì)節(jié)分析。整體流程一通過(guò)實(shí)現(xiàn)接口,完成攔截器相關(guān)組件的初始化調(diào)用類(lèi)的方法??偨Y(jié)本文主要分析了的初始化過(guò)程,希望對(duì)大家有幫助。隨著學(xué)習(xí)的深入,后面有時(shí)間在分析下期中涉及的關(guān)鍵,比如等等。 概述 本節(jié)我們繼續(xù)分析HandlerMapping另一個(gè)實(shí)現(xiàn)類(lèi)ReqeustMappingHandlerMapping,該類(lèi)是我們?nèi)粘i_(kāi)發(fā)中使用最多的...

    imccl 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<