SpringMvc原始碼(二) 處理請求過程

2021-08-22 15:04:47 字數 3018 閱讀 4272

過程: 1.請求首先進入到frameworkservlet的processrequest中。

2.呼叫dispatcherservlet中的doservice方法,對請求進行預設定,doservice方法在frameworkservlet為抽象方法。

3.最後呼叫dispatcherservlet的dodispatch方法,對請求進行處理,dodispatch方法為整個處理請求過程中的核心方法。

processrequest方法

/**

* frameworkservlet中的processrequest方法

doservice方法,**比較簡單,主要做一些準備工作。

/**

* dispatcherservlet中的doservice方法

* 省略注釋以及日誌**

* 在處理請求之前做一些準備工作

//將一些元件設定到當前reuqest中,比如,springmvc容器,國際化資源解析器,主題解析器

request.setattribute(locale_resolver_attribute, this.localeresolver);

request.setattribute(theme_resolver_attribute, this.themeresolver);

request.setattribute(theme_source_attribute, getthemesource());

//對flashmap進行更新

flashmap inputflashmap = this.flashmapmanager.retrieveandupdate(request, response);

if (inputflashmap != null)

request.setattribute(output_flash_map_attribute, new flashmap());

request.setattribute(flash_map_manager_attribute, this.flashmapmanager);

try

finally

if (attributessnapshot != null) }}

核心方法,dodispatch,先看一張圖。

handleradapter 也是元件之一,作用是 使用找到的handler處理請求。

兩者的關係可以簡單理解為幹活的工具和幹活的人。當前請求request就是要幹的活,幹活需要工具,那麼handler就是用來幹活的工具,有了工具,那麼需要乙個具體的人來幹活,handleradapter就是幹活的人。連起來就是handleradapter使用handler處理請求,或者說handler是乙個方法,handleradapter就是去執行這個方法的人。

modelandview 比較簡單易懂,處理完請求之後需要返回的檢視以及傳輸到檢視中的資料,都放在這裡。

解釋了這幾個東西之後,在來看相關原始碼。

/**

* dispatcherservlet中的dodispatch

* 處理請求的核心方法

//根據找到的handler獲取能夠執行該handler的handleradapter

string method = request.getmethod();

boolean isget = "get".equals(method);

if (isget || "head".equals(method))

if (new servletwebrequest(request, response).checknotmodified(lastmodified) && isget)

}//順序執行所有***的prehandle方法,如果某個prehandle方法值為false,那麼直接return,請求結束

return;

}try

finally

}//設定預設檢視名字

//倒序執行所有***的posthandle方法

}catch (exception ex)

//渲染檢視,包括處理請求過程中出現的異常檢視都在這裡處理

}catch (exception ex)

catch (error err)

finally

if (multipartrequestparsed) }}

乙個請求到這裡之後就算結束了。在這個方法中幾乎用到了springmvc中的所有元件,具體每個元件的作用以及原始碼在後面的文章中會做一些分析。理解處理請求的過程最好還是打斷點跟一遍原始碼,會理解的更快。

SpringMvc原始碼(二) 處理請求過程

過程 1.請求首先進入到frameworkservlet的processrequest中。2.呼叫dispatcherservlet中的doservice方法,對請求進行預設定,doservice方法在frameworkservlet為抽象方法。3.最後呼叫dispatcherservlet的dod...

SpringMVC異常統一處理

正文 spring 統一異常處理有 3 種方式,分別為 使用 exceptionhandler 註解 實現 handlerexceptionresolver 介面 使用 controlleradvice 註解 package com.tao.smp.exception api統一的返回結果類 pub...

SpringMVC 三 處理請求資料

1.form元件 action屬性表示提交位址 method屬性表示提交方式 表單內容可以有 input textarea button select option optgroup fieldset label 等標籤 2.傳遞字面量引數 1 在處理請求的方法中,加入相對應的形參,保證形參的名字 ...