<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Spring-mvc 的處理流程

    Posted on 2009-08-17 14:59 無很 閱讀(1301) 評論(0)  編輯  收藏 所屬分類: Spring
    Spring-mvc 的處理流程
    請求的分發(fā)

    請求首先到達DispatcherServlet,應(yīng)用服務(wù)器會根據(jù)Web應(yīng)用中web.xml文件定義的url映射將相應(yīng)的請求分發(fā)到DispatcherServlet中

    請求的處理

    DispatcherServlet會查找相應(yīng)的HandlerMapping接口的實現(xiàn)類,調(diào)用其中的方法:HandlerExecutionChain getHandler(HttpServletRequest request) throwsException,該方法會返回一個HandlerExecutionChain。返回的HandlerExecutionChain中包含了零個或者是多個Interceptor和一個處理請求的Handler。DispatcherServlet會調(diào)用Interceptor中的 preHandle()方法。然后處理Handler,這個Handler相當于Struts中Action,在SpringMVC中默認的實現(xiàn)是Controller接口,是具體處理請求的代碼所駐留的地方。事實上HandlerExecutionChain中的getHandler()返回的是一個Object類型。DispatcherServlet不會直接調(diào)用getHandler()返回對象中的方法,DispatcherServlet會查找相應(yīng)的HandlerAdapter,然后具體通過HandlerAdapter來調(diào)用getHandler() 返回的handler對象中的方法。就是說我們可以實現(xiàn)自己的HandlerAdapter然后通過IoC注入到DispatcherServlet中,從而可以實現(xiàn)一套自定義的控制器。隨后DispatcherServlet會調(diào)用Interceptor中的postHandle()方法。

    視圖的處理

    DispatcherServlet會期望Hander返回一個ModelAndView,DispatcherServlet會根據(jù)所返回的ModelAndView對象所包含的信息進行視圖的渲染。起具體出來流程如下:

    首先DispatcherServlet會根據(jù)LocaleResolver來識別請求中的Locale,開發(fā)人員可以自己實現(xiàn)LocaleResolver接口,然后通過IoC注入到DispatcherServlet中,然后DispatcherServlet 會判斷ModelAndView中是否已經(jīng)包含了接口View的具體實現(xiàn),如果包含了,則直接調(diào)用View中的方法render(Map model,HttpServletRequest request, HttpServletResponseresponse)。如果不包含,則說明該ModelAndView只是包含了View的名稱引用,DispatcherServlet會調(diào)用ViewResolver中的resolveViewName(String viewName, Localelocale)來解析其真正的視圖。該方法會返回一個View的具體實現(xiàn)。

    視圖的渲染

    Spring支持多種視圖技術(shù),其中比較常用的包括有Jstl視圖,Veloctiy視圖,F(xiàn)reeMarker視圖等。對Jstl視圖的渲染 Spring是通過JstlView這個類具體實現(xiàn)的。事實上其最終的渲染是交給容器來做的,Spring只是通過RequestDispatcher實現(xiàn)了服務(wù)器內(nèi)部請求的Forward。而對于模板視圖,如Veloctiy和FreeMarker等,Spring會初始化其相應(yīng)的模板引擎,由模板引擎生成最終的Html頁面然后在合并到Response的輸出流中。

    異常的處理

    如果在Hander中處理請求是拋出異常,DispatcherServlet會查找HandlerExceptionResolver接口的具體實現(xiàn),該接口定義了一個方法:

    ModelAndView resolveException(HttpServletRequest request,HttpServletResponse response, Object handler, Exceptionex),實現(xiàn)類需要實現(xiàn)該方法以便對異常進行處理,最后該方法需要返回一個ModelAndView。
    主站蜘蛛池模板: 亚洲白嫩在线观看| 亚洲精品中文字幕无乱码| 亚洲成在人线在线播放无码| 黄瓜视频影院在线观看免费| 亚洲人成综合在线播放| 美女视频黄的全免费视频| 久久久久亚洲AV无码观看| 97免费人妻在线视频| 91亚洲国产成人久久精品网址| 最近免费mv在线电影| 亚洲伊人久久大香线蕉影院| 人妻视频一区二区三区免费| 亚洲 暴爽 AV人人爽日日碰| 日韩免费高清视频网站| 粉色视频成年免费人15次| 激情97综合亚洲色婷婷五| 久久久久免费精品国产| 亚洲国产国产综合一区首页| 亚洲啪啪免费视频| 亚洲中文字幕无码久久| 免费h黄肉动漫在线观看| 久久久久久av无码免费看大片 | 8x8×在线永久免费视频| 亚洲国产成人久久77| 青青草国产免费久久久91| 色爽黄1000部免费软件下载| 亚洲精品午夜国产VA久久成人| 18禁止看的免费污网站| 亚洲精品人成网线在线播放va| 亚洲午夜无码片在线观看影院猛| 久久免费视频观看| 亚洲中文无码永久免| 久久亚洲中文字幕精品一区四 | 亚洲欧洲国产精品你懂的| 成年女人毛片免费视频| 久久久久久久久久免免费精品| 亚洲网站免费观看| 亚洲福利在线播放| 啦啦啦完整版免费视频在线观看| 麻豆亚洲AV成人无码久久精品 | 国产在线观看免费av站|