springMVC-doService()分析
1、request到dispaterServlet
-> doservice( request,response){
1、保存請求快照
2、共享上下文信息,本地解析,主題解析等對象給 handler和view對象
}
-->doDispatch( request,reponse){
1、判斷request是否是文件上傳請求,是則轉換成MultipartRequest,
2、gethandler(request)-- HandlerExecutionChain <--HandlerMapping.getHandler(request)
3、獲取getHandlerApator(handler) HandlerAdapter<-- HandlerAdapter.support(handler) ,返回支持當前handler的 handleradapter
4、判斷是否是get或者head請求。根據lasdModified(request)判斷請求是否改變,沒有發生改變則不再繼續請求,而是告訴瀏覽器 繼續使用上次的緩存結果。
5、handler.applyPreHandle(),執行前置攔截器中的方法。
6、handlerAdaptar.hand()--handlerInternal(request,response,handler)--設置session信息--同步或異步執行invokeHandleMethod(request, response, handlerMethod)--返回modelandview對象。
7、當modelandview不等空且viewname爲空時根據request設置默認的viewname
8、handler.applyPosthandle() ,執行後置攔截器
9、上述步驟發生異常的話就捕獲交給 dispatchException來處理。
10、執行 processDispatchResult(),根據相應的viewname返回到客戶端{
1、處理異常
2、modelandview不爲空則,執行render()方法,渲染視圖--view.render()--renderMergedOutputModel()[jsp默認的視圖是InternaleResourceView]
}
}
-> doservice( request,response){
1、保存請求快照
2、共享上下文信息,本地解析,主題解析等對象給 handler和view對象
}
-->doDispatch( request,reponse){
1、判斷request是否是文件上傳請求,是則轉換成MultipartRequest,
2、gethandler(request)-- HandlerExecutionChain <--HandlerMapping.getHandler(request)
3、獲取getHandlerApator(handler) HandlerAdapter<-- HandlerAdapter.support(handler) ,返回支持當前handler的 handleradapter
4、判斷是否是get或者head請求。根據lasdModified(request)判斷請求是否改變,沒有發生改變則不再繼續請求,而是告訴瀏覽器 繼續使用上次的緩存結果。
5、handler.applyPreHandle(),執行前置攔截器中的方法。
6、handlerAdaptar.hand()--handlerInternal(request,response,handler)--設置session信息--同步或異步執行invokeHandleMethod(request, response, handlerMethod)--返回modelandview對象。
7、當modelandview不等空且viewname爲空時根據request設置默認的viewname
8、handler.applyPosthandle() ,執行後置攔截器
9、上述步驟發生異常的話就捕獲交給 dispatchException來處理。
10、執行 processDispatchResult(),根據相應的viewname返回到客戶端{
1、處理異常
2、modelandview不爲空則,執行render()方法,渲染視圖--view.render()--renderMergedOutputModel()[jsp默認的視圖是InternaleResourceView]
}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.