欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

從源碼角度看springmvc的請(qǐng)求處理過(guò)程

在分析spring mvc源碼之前,先看一張圖:

成都創(chuàng)新互聯(lián)公司是一家業(yè)務(wù)范圍包括IDC托管業(yè)務(wù),網(wǎng)站空間、主機(jī)租用、主機(jī)托管,四川、重慶、廣東電信服務(wù)器租用,德陽(yáng)機(jī)房服務(wù)器托管,成都網(wǎng)通服務(wù)器托管,成都服務(wù)器租用,業(yè)務(wù)范圍遍及中國(guó)大陸、港澳臺(tái)以及歐美等多個(gè)國(guó)家及地區(qū)的互聯(lián)網(wǎng)數(shù)據(jù)服務(wù)公司。

從源碼角度看spring mvc的請(qǐng)求處理過(guò)程

請(qǐng)求處理的過(guò)程:

1.DispatcherServelt作為前端控制器,攔截request對(duì)象。

2.DispatcherServlet接收到request對(duì)象之后,查詢HandlerMapping,得到一個(gè)HandlerExecutionChain對(duì)象。

3.DispatcherServlet將Handler對(duì)象交由HandlerAdapter(適配器模式的典型應(yīng)用),調(diào)用相應(yīng)的controller方法。

4.Controller方法返回ModelAndView對(duì)象,DispatcherServlet將view交由ViewResolver進(jìn)行解析,得到相應(yīng)的視圖。用model渲染視圖。

5.返回響應(yīng)結(jié)果。

整個(gè)過(guò)程的流程其實(shí)就是DispatcherServelt中doDispatch()方法的調(diào)用過(guò)程。

protected void doDispatch(HttpServletRequest request, HttpServletResponse response) throws Exception {
//第一步攔截request對(duì)象,doDispatch()方法在doService()方法中被調(diào)用,request對(duì)象是經(jīng)過(guò)處理的。
HttpServletRequest processedRequest = request;
HandlerExecutionChain mappedHandler = null;
boolean multipartRequestParsed = false;
WebAsyncManager asyncManager = WebAsyncUtils.getAsyncManager(request);
try {
ModelAndView mv = null;
Exception dispatchException = null;
try {
//和文件的上傳和下載有關(guān)系,判斷請(qǐng)求的類型是否是multipart類型
processedRequest = checkMultipart(request);
multipartRequestParsed = (processedRequest != request);
// Determine handler for the current request.
//主要看這里,這里是得到HandlerExecutionChain的方法。關(guān)于Handler()方法向下看
mappedHandler = getHandler(processedRequest);
if (mappedHandler == null || mappedHandler.getHandler() == null) {
noHandlerFound(processedRequest, response);
return;
}
// Determine handler adapter for the current request.
//這里已經(jīng)獲取到HandlerExecutionChain對(duì)象,接下來(lái)就要獲取HandlerAdapter對(duì)象,調(diào)用Handler對(duì)象的方法。
HandlerAdapter ha = getHandlerAdapter(mappedHandler.getHandler());
// Process last-modified header, if supported by the handler
//有關(guān)瀏覽器緩存的設(shè)定(304)
String method = request.getMethod();
boolean isGet = "GET".equals(method);
if (isGet || "HEAD".equals(method)) {
long lastModified = ha.getLastModified(request, mappedHandler.getHandler());
if (logger.isDebugEnabled()) {
logger.debug("Last-Modified value for [" + getRequestUri(request) + "] is: " + lastModified);
}
if (new ServletWebRequest(request, response).checkNotModified(lastModified) && isGet) {
return;
}
}
//pan'du
if (!mappedHandler.applyPreHandle(processedRequest, response)) {
return;
}
// Actually invoke the handler.
mv = ha.handle(processedRequest, response, mappedHandler.getHandler());
if (asyncManager.isConcurrentHandlingStarted()) {
return;
}
//解析視圖,數(shù)據(jù)渲染
applyDefaultViewName(request, mv);
mappedHandler.applyPostHandle(processedRequest, response, mv);
}
catch (Exception ex) {
dispatchException = ex;
}
processDispatchResult(processedRequest, response, mappedHandler, mv, dispatchException);
}
catch (Exception ex) {
triggerAfterCompletion(processedRequest, response, mappedHandler, ex);
}
catch (Error err) {
triggerAfterCompletionWithError(processedRequest, response, mappedHandler, err);
}
finally {
if (asyncManager.isConcurrentHandlingStarted()) {
// Instead of postHandle and afterCompletion
if (mappedHandler != null) {
mappedHandler.applyAfterConcurrentHandlingStarted(processedRequest, response);
}
}
else {
// Clean up any resources used by a multipart request.
if (multipartRequestParsed) {
cleanupMultipart(processedRequest);
}
}
}
}
protected HandlerExecutionChain getHandler(HttpServletRequest request) throws Exception {
//遍歷HandlerMappingList對(duì)象(存儲(chǔ)若干個(gè)HandlerMapping對(duì)象),不斷調(diào)用,直到不為空為止,否則返回null
for (HandlerMapping hm : this.handlerMappings) {
if (logger.isTraceEnabled()) {
logger.trace(
"Testing handler map [" + hm + "] in DispatcherServlet with name '" + getServletName() + "'");
}
HandlerExecutionChain handler = hm.getHandler(request);
if (handler != null) {
return handler;
}
}
return null;
}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。

網(wǎng)頁(yè)題目:從源碼角度看springmvc的請(qǐng)求處理過(guò)程
當(dāng)前路徑:http://aaarwkj.com/article2/jjgioc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機(jī)網(wǎng)站維護(hù)、建站公司品牌網(wǎng)站設(shè)計(jì)、Google、企業(yè)網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)
精品国产91乱码一区二区三区| 国产一区二区精品小视频| 放荡精品少妇一区二区三区| 日本午夜诱惑在线观看| 曰韩av毛片在线观看| 四虎在线永久观看视频| 五月天亚洲综合小说网| 视频一区二区视频三区| 一区二区在线视频中文字幕 | 亚洲日本欧美在线一区| 日韩在线视频一区二区三| 欧美国产成人精品一区| 国产三级三级三级三级三级| 亚洲欧美制服另类国产| 欧美日韩国产成人一区| 求个手机免费在线观看av网址| 麻豆国产传媒69国产| 国产精品黄色自拍合集| 精彩国产av一区二区三区| 精品亚洲一区二区三区| 久久精品女人天堂av| 日本一区二区三区免费不卡视频 | av免费观看日韩永久| 日韩欧美亚洲天堂视频| 十八禁网站免费在线播放| 国产精品亚洲在钱视频| 欧美日韩一区中文字幕| av天堂中文一区二区三区| 日韩欧美二区三区精品在线| 成人免费毛片内射视频| 午夜福利福利一区二区| 日韩高清不卡免费视频| 国产农村熟妇av国语对白| 在线看片国产精品自拍| 亚洲国产一区二区三区三州| 七十二式性日韩视频| 青青草原网址在线观看| 99在线视频午夜福利| 欧美亚洲另类色自拍偷拍| 亚洲在线免费播放视频| 精品一区二区三区乱码中文|