<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 無很 閱讀(1302) 評論(0)  編輯  收藏 所屬分類: Spring
    Spring-mvc 的處理流程
    請求的分發

    請求首先到達DispatcherServlet,應用服務器會根據Web應用中web.xml文件定義的url映射將相應的請求分發到DispatcherServlet中

    請求的處理

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

    視圖的處理

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

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

    視圖的渲染

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

    異常的處理

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

    ModelAndView resolveException(HttpServletRequest request,HttpServletResponse response, Object handler, Exceptionex),實現類需要實現該方法以便對異常進行處理,最后該方法需要返回一個ModelAndView。
    主站蜘蛛池模板: 免费99精品国产自在现线| free哆拍拍免费永久视频 | 日本免费一区二区三区| 国产日产亚洲系列最新| 亚洲成人免费网址| 亚洲精品免费观看| 中文字幕无码日韩专区免费| 国产在线国偷精品免费看 | 国产91久久久久久久免费| 免费被黄网站在观看| 超pen个人视频国产免费观看| 德国女人一级毛片免费| 大陆一级毛片免费视频观看i| 免费特级黄毛片在线成人观看| 免费无码又爽又刺激高潮的视频| 日韩免费高清视频| 国产免费拔擦拔擦8x| 亚洲精品黄色视频在线观看免费资源| 成人亚洲网站www在线观看| 亚洲色一色噜一噜噜噜| 亚洲乱码国产一区三区| 久久精品国产亚洲av麻豆| 91天堂素人精品系列全集亚洲| 亚洲国产成人久久综合一区| 亚洲中文无码亚洲人成影院| 免费一级全黄少妇性色生活片| 成人A毛片免费观看网站| 日本一区二区免费看| 国产卡二卡三卡四卡免费网址| 精品免费国产一区二区| 在线日韩日本国产亚洲| 亚洲精品福利视频| 亚洲人成图片网站| 精品无码专区亚洲| 国产午夜无码片免费| 91精品导航在线网址免费| 免费黄色网址入口| 国产亚洲成人久久| 亚洲精品永久www忘忧草| 亚洲国产精品免费视频| 亚洲国产日韩精品|