過程: 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 在處理請求的方法中,加入相對應的形參,保證形參的名字 ...