<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    StevenBot-Saltsam

    眼睛能裝下世界,為何卻裝不下眼淚? 一只風箏一輩子只為一根線冒險。 那不是一場游戲,為何總有一根線牽著心懷,隱隱作疼? 那不是一段邂逅,為何飄在橋上的影子,總纏進夢鄉? 那不是一個夢境,為何你的溫柔私語,總是不經意的響起?

    導航

    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    統計

    常用鏈接

    留言簿

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    datas link

    OSChinal Sources codes Library

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    SpringMVC web框架學習 Controller 分析

    SpringMVC web框架學習 Controller 分析

    org.springframework.web.servlet.mvc.AbstractController (implements org.springframework.web.servlet.mvc.Controller)

    Spring MVC框架中的Controller對請求進行處理:所有的Controller都實現接口Controller:

    public interface Controller {       /**      * Process the request and return a ModelAndView object which the DispatcherServlet      * will render. A <code>null</code> return value is not an error: It indicates that      * this object completed request processing itself, thus there is no ModelAndView      * to render.      * @param request current HTTP request      * @param response current HTTP response      * @return a ModelAndView to render, or <code>null</code> if handled directly      * @throws Exception in case of errors      */     ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception;   } 上面的doc表明Controller返回的modelandview可以使空,表明請求都是該函數中處理完成了,不需要modeland來進行渲染。
     
    在繼續之前先介紹一個有用的工具類:WebUtils。用這個可以簡化session,request的處理。具體的內容可以參考文檔。
     
    Controller的第一個實現是:AbstractController。他是一個Abstract類,除了實現了Controller接口,它還繼承了WebContentGenerator。
     
    WebContentGenerator的作用是什么?參考文檔可以發現,該類主要對Cache和Session進行管理。
     
    cacheSeconds 指定內容緩存的時間,默認為1
    requireSession 是否需要會話,默認支持
    supportedMethods 支持的方法,默認是GET\post\Head
    useCacheControlHeader 指定是否使用http1.1的cache控制頭信息,默認使用
    useCacheControlNoStore 指定是否設置http1.1的cache控制頭信息為no-store。默認使用
    useExpiresHeader 指定是否使用http1.0的expire頭信息。默認使用
    用戶可以對這些參數進行測試,cache和expire信息涉及到了http協議信息,更多信息可以參考http協議文檔。這里不再說明。
     
    再看AbstractController的代碼:
    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response)
    throws Exception {

    // Delegate to WebContentGenerator for checking and preparing.
    checkAndPrepare(request, response, this instanceof LastModified);

    // Execute handleRequestInternal in synchronized block if required.
    if (this.synchronizeOnSession) {
    HttpSession session = request.getSession(false);
    if (session != null) {
    Object mutex = WebUtils.getSessionMutex(session);
    synchronized (mutex) {
    return handleRequestInternal(request, response);
    }
    }
    }
    return handleRequestInternal(request, response);
    }
    checkandPrepare的目的就是使用用于進行的配置來對request進行預處理和準備。
    他會檢查支持的方法,和會話,然后應用cache設置。
    如果需要session同步,就進行同步處理。session同步應用于有session的情況下。如果沒有session,session同步是沒有用的。
    AbstractController會調用handleRequestInternal方法進行處理,繼承AbstractController的類需要實現該方法。
    下面我們再看看AbstractUrlViewController 的代碼實現和文檔,先看handleRequestInternal的實現:

     
    /**
    * Retrieves the URL path to use for lookup and delegates to
    * {@link #getViewNameForRequest}.
    */
    protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) {
    String lookupPath = getUrlPathHelper().getLookupPathForRequest(request);
    String viewName = getViewNameForRequest(request);
    if (logger.isDebugEnabled()) {
    logger.debug("Returning view name '" + viewName + "' for lookup path [" + lookupPath + "]");
    }
    return new ModelAndView(viewName);
    }
    可以看到,它使用了getViewNameForRequest獲取需要的viewName。而getViewNameForRequest是一個抽象函數,需要子類實現。lookupPath就是我們請求的URL中的一部分。如我們使用UrlFilenameViewController來進行如下的配置:
    <bean name="/index.do" class="org.springframework.web.servlet.mvc.UrlFilenameViewController"></bean>、
    09-11-25 11:56:06 - DEBUG [http-8200-1] - Returning view name 'index' for lookup path [/index.do]
    該Controller對/index.do解析成index,然后再通過viewResolver對index進行擴展為/jsp/index.jsp。從而找到該頁面。
    可以看到這個類的主要是用于對url進行解析,然后轉到合適的頁面上,而在轉到這個頁面之前不需要進行特別的處理。
    明白了該類的作用自然也就知道了UrlFilenameViewController的作用。這里不再進行詳細分析。

    posted on 2011-10-15 09:49 Steven_bot 閱讀(715) 評論(0)  編輯  收藏 所屬分類: spring

    主站蜘蛛池模板: 国产亚洲综合视频| 国产亚洲精品91| 日本免费一区二区三区 | 拍拍拍无挡视频免费观看1000| 成人免费无码大片a毛片软件| 亚洲va精品中文字幕| 免免费国产AAAAA片| 国产亚洲精品bv在线观看| 一个人看www在线高清免费看 | 99免费视频观看| 亚洲精品福利在线观看| 人人狠狠综合久久亚洲88| 成人精品视频99在线观看免费| 精品亚洲视频在线观看| 中文字幕无线码中文字幕免费 | 亚洲一区二区三区深夜天堂| 91在线视频免费播放| 亚洲av无码专区青青草原| 免费在线观看a级毛片| 精品国产免费一区二区三区| 亚洲AV午夜成人影院老师机影院| 久久国产乱子免费精品| 亚洲毛片无码专区亚洲乱| 成人免费777777| 一二三区免费视频| 亚洲成人精品久久| 拍拍拍又黄又爽无挡视频免费| 黄色网址在线免费观看| 亚洲精品无码不卡在线播放HE| 99久久久国产精品免费牛牛四川| 99999久久久久久亚洲| 亚洲成?v人片天堂网无码| 99视频精品全部免费观看| 中文字幕精品三区无码亚洲| 亚洲国产精品毛片av不卡在线| 最新亚洲成av人免费看| 国产精品亚洲专区在线观看| 亚洲第一区精品观看| 69免费视频大片| 免费无码午夜福利片| 亚洲色偷偷偷网站色偷一区|