DispatcherServlet邏輯處理

2021-09-29 05:47:14 字數 2638 閱讀 6619

// 迴圈所有的handleradaoter通過supports判斷適合的handler,得到合適的handleradapter

handleradapter ha =

gethandleradapter

gethandler()

);// process last-modified header, if supported by the handler.

string method = request.

getmethod()

;boolean isget =

"get"

.equals

(method);if

(isget ||

"head"

.equals

(method))}

// ***的prehandler的方法呼叫,這裡會取出所有的***然後挨個執行

//如果返回false 會執行triggeraftercompletion方法,並結束dodispatch方法。if(

(processedrequest, response)

)// actually invoke the handler.

//真正controller的邏輯處理並返回檢視

mv = ha.

handle

gethandler()

);// 處理非同步通知的???

if(asyncmanager.

isconcurrenthandlingstarted()

)// 檢視是否返回了檢視,沒有的話 通過viewnametranslator 來獲取我們配置的預設檢視

(processedrequest, mv)

;//執行所有***的posthandle方法

(processedrequest, response, mv);}

catch

(exception ex)

catch

(throwable err)

//判斷是否有異常,如果controller存在,則呼叫***的aftercompletion方法

processdispatchresult;}

catch

(exception ex)

catch

(throwable err)

finally

}else}}

}這裡詳細描述gethandler過程

看一下gethandlerinternal方法

lookuphandler中會根據urlpath獲取對應的handler,匹配不到,會嘗試使用萬用字元匹配controller。萬用字元

buildpathexposinghandler方法將配置中對應***加入到執行鏈中,保證這些***可以有效的作用於目標物件。

緊接著獲取處理器介面卡gethandleradapter方法。

看一下******controllerhandleradapter類

servlet過濾器可以再servlet處理每個web請求的前後分別對它進行前置處理和後置處理。

springmvc允許通過處理攔截web請求,進行前置處理和後置處理。處理攔截是在spring的web應用程式上下文中配置的。因此它們可以利用各種容器特性,並引用容器中宣告的任何bean。

看一下render方法

再看一下createview方法

解析得到檢視時候就可以進一步處理跳轉邏輯。

DispatcherServlet學習筆記

chapter2 org.springframework.web.servlet.dispatcherservlet 1 dispatcherservlet主要用作職責排程工作,本身主要用於控制流程,主要職責如下 1 檔案上傳解析,如果請求型別是multipart將通過multipartresolv...

DispatcherServlet的原始碼和流程分析

1 自動配置dispatcherservlet和dispatcherservletregistry 2 註冊dispatcherservlet到servletcontext 3 初始化mvc的元件 handler執行完成後,向dispatcherservlet 返回乙個modelandview物件 ...

邏輯回歸 breast cancer 資料集處理

coding utf 8 import pandas as pd import numpy as np from matplotlib import pyplot as plt from sklearn.model selection import train test split definit ...