SpringMVC之原始碼分析 啟動過程

2021-09-13 19:04:26 字數 2892 閱讀 6602

類的繼承關係

spring mvc前端控制器dispatcherservlet-->frameworkservlet-->httpservletbean-->httpservlet

httpservlet是servlet規範中的核心類,實現servlet介面,繼承此類用於處理使用者請求。

httpservletbean主要配置servlet中初始化引數。繼承httpservlet,並實現無參的init()方法,用於設定在web.xml中配置的contextconfiglocation屬性,此屬性指定spring mvc的配置檔案位址,預設為web-inf/[servlet-name]-servlet.xml,原始碼如下:

/**

* dispatcherservlet第一次載入時呼叫init方法

*/@override

public final void init() throws servletexception

catch (bean***ception ex)

throw ex;}}

// 呼叫子類(frameworkservlet)進行初始化

// 模版方法,此方法在httpservletbean本身是空的,但是因為呼叫方法的物件是dispatcherservlet

// 所以優先在dispatcherservlet找,找不到再去父類找,最後在frameworkservlet找到

initservletbean();

if (logger.isdebugenabled())

}

總結httpservletbean的作用:

1、initservletbean

@override

protected final void initservletbean() throws servletexception

catch (servletexception | runtimeexception ex)

if (this.logger.isinfoenabled())

}

// 判斷容器是否由程式設計式傳入(即是否已經存在了容器例項),存在的話直接賦值給wac,給springmvc容器設定父容器

// context上下文在構造是注入

if (!cwac.isactive()) }}

}// 在servletcontext中尋找是否有spring mvc容器,初次執行是沒有的,spring mvc初始化完畢servletcontext就有了spring mvc容器

if (wac == null)

// 當wac既沒有沒被程式設計式註冊到容器中的,也沒在servletcontext找得到,此時就要新建乙個spring mvc容器

if (wac == null)

// 到這裡spring mvc容器已經建立完畢,接著真正呼叫dispatcherservlet的初始化方法onrefresh(wac)

// 此處仍是模板模式的應用

if (!this.refresheventreceived)

// 將spring mvc容器存放到servletcontext中去,方便下次取出來

if (this.publishcontext)

}return wac;}

} class> contextclass = getcontextclass();

if (this.logger.isdebugenabled())

"fatal initialization error in servlet with name '" + getservletname() +

}// 例項化容器

// 設定容器環境

wac.setenvironment(getenvironment());

// 設定父容器

wac.setparent(parent);

// 載入spring mvc的配置資訊,如:bean注入、註解、掃瞄等等

string configlocation = getcontextconfiglocation();

if (configlocation != null)

// 重新整理容器,根據spring mvc配置檔案完成初始化操作

return wac;}

總結frameworkservlet的作用:

dispatcherservlet是spring mvc核心,它是j2ee規範前端控制器的實現,負責攔截使用者請求,並解析請求進行**。

@override

initstrategies(context);

} initmultipartresolver(context); // 檔案上傳解析

initlocaleresolver(context); // 本地解析

initthemeresolver(context); //主題解析

inithandleradapters(context); // 初始化controller類

inithandlerexceptionresolvers(context); // 異常解析

initrequesttoviewnametranslator(context);

initviewresolvers(context); // 視**析

SpringMVC之原始碼分析 View(一)

通過上幾章的介紹知道了viewresolver的作用,即viewresolver就是把handler返回的邏輯檢視名稱解析為檢視view物件。進而通過view物件的檢視渲染把最終的結果展現給使用者。view檢視渲染的原理,簡單說就是把模型資料填充到檢視模板,最終交由servlet的response進...

SpringMVC 原始碼分析

springmvc之 springmvc的引數匹配原始碼分析 使用 modelattribute 進行引數注入 springmvc方法返回值詳解 原始碼流程 public class implements configuration componentscan com enableaspectjau...

SpringMVC原始碼分析 二

第九章 spring aop 原始碼解析 二 這一章來簡單的介紹一下springmvc的高階應用 過濾器 filter 對request請求起到過濾的作用,作用在servlet之前,如果配置為 可以對所有的資源訪問 servlet js css靜態資源等 進行過濾處理 interceptor 是sp...