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

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

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

    隨筆-295  評論-26  文章-1  trackbacks-0

    Spring-mvc 的處理流程

    關鍵字: Spring ? mvc ioc ????

    請求的分發

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

    請求的處理

    DispatcherServlet會查找相應的HandlerMapping接口的實現類,調用其中的方法:HandlerExecutionChain getHandler(HttpServletRequest request) throws Exception,該方法會返回一個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, HttpServletResponse response)。如果不包含,則說明該ModelAndView只是包含了View的名稱引用,DispatcherServlet會調用ViewResolver中的resolveViewName(String viewName, Locale locale)來解析其真正的視圖。該方法會返回一個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, Exception ex),實現類需要實現該方法以便對異常進行處理,最后該方法需要返回一個ModelAndView。

    SpringMVC的一些總結
    靈活的Interceptor,通過Interceptor我們可以在一個請求處理前和請求處理完成之后做相應的操作,通過Interceptor機制,我們可以做authentication, logging, and filtering等。
    良好的表單支持,在SpringMVC的Controller繼承體系結構中,其具體的子類對表單(Form)提供了良好的支持。能夠很好的支持單個表單的顯示、修改、提交操作。同時也提供了表單的分步提交。
    可定制的數據綁定(Data Binding)。
    多視圖技術的支持,SpringMVC同時支持Jstl, Velocity 等多中視圖技術,但是這同時也會引出一個問題,因為各種視圖技術都有自己的一套方法來處理國際化,例如Jstl和Velocity處理國際化的方式就很不相同。因此在多個視圖技術并存的應用中,國際化也是一個需要注意的問題。
    其Handler(控制器)作為Bean定義在Spring容器中,因此能享受容器帶來的服務。
    Handler(控制器)具有良好的可測試性。



    大盤預測 國富論
    posted on 2007-08-29 10:23 華夢行 閱讀(2961) 評論(0)  編輯  收藏 所屬分類: Spring
    主站蜘蛛池模板: 久久久久国色av免费看| 国产精品亚洲专一区二区三区| 久久精品成人免费观看97| 国产福利免费在线观看| 亚洲AⅤ男人的天堂在线观看| 成年人在线免费观看| 中文字幕的电影免费网站| 俄罗斯极品美女毛片免费播放| 亚洲.国产.欧美一区二区三区| 日韩免费观看的一级毛片| 亚洲国产成人久久一区二区三区| 性xxxx视频播放免费| 亚洲AV永久无码精品一福利| 国产yw855.c免费视频| 国产亚洲男人的天堂在线观看| 五月天婷亚洲天综合网精品偷| 精品国产呦系列在线观看免费| 亚洲精品乱码久久久久久 | 凹凸精品视频分类国产品免费| 亚洲AV无码资源在线观看| 国产精品另类激情久久久免费| 无套内射无矿码免费看黄| 久久精品夜色噜噜亚洲A∨| 美女在线视频观看影院免费天天看 | 特级毛片免费观看视频| 久久精品国产亚洲Aⅴ蜜臀色欲| 国产免费无码一区二区| 亚洲色偷偷偷网站色偷一区| 成人啪精品视频免费网站| 天天综合亚洲色在线精品| 夜夜春亚洲嫩草影院| 毛片免费全部播放无码| 亚洲国产成人久久综合| 亚洲韩国精品无码一区二区三区| 国产h视频在线观看网站免费| 国产亚洲综合精品一区二区三区| 亚洲女同成人AⅤ人片在线观看| 国产一区二区三区免费| 国产人成亚洲第一网站在线播放| 亚洲熟伦熟女新五十路熟妇| 亚洲免费一级视频|