古詩詞大全網 - 個性簽名 - 為什麽使用rpc而不直接使用spring mvc

為什麽使用rpc而不直接使用spring mvc

springmvcstruts二概明白 內容自中國絡請認真看遍 Spring輕型容器(light-weight container)其核Bean工廠(Bean Factory)用構造我所需要M(Model)基礎Spring提供AOP(Aspect-Oriented Programming, 面向層面編程)實現用提供非管理環境申明式事務、安全等服務;Bean工廠擴展ApplicationContext更加便我實現J二EE應用;DAO/ORM實現便我進行數據庫發;Web MVCSpring Web提供Java Web應用框架或與其流行Web框架進行集 壹)源框架 二)IoC(控制反轉),類創建依賴關系寫配置文件由配置文件註入實現松耦合 三)AOP 安全事務等於程序邏輯相獨立功能抽取利用spring配置文件些功能插進實現按照面編程提高復用性 前言 近看Spring MVC源碼,自MVC模式各種框架實現認識寫給家看看,算總結.所,懇請家用懷疑眼光看待篇文章,假認識,麻煩指. MVC與WEB應用 MVC用我說.於現較熟Model-View-Control(MVC)框架言,其註意主要問題外乎面些: Model: 模型應該包含由視圖顯示數據.J二EE Web應用,數據通應該由普通javabean組.旦控制器選擇視圖,模型要包含視圖相應數據.模型本身應該進步訪問數據,應該業務象相聯系. 模型要解決問題包括: l 封裝要顯示數據 l 我認模型要依賴於特定框架 l 定非javabean View: 視圖負責顯示模型包含信息,視圖必解控制器或底層業務象具體實現 視圖要解決問題包括: l 顯示給定數據模型情況顯示內容 l 應該包含業務邏輯 l 能需要執行顯示邏輯,比顏色交替顯示某數組各行 l 視圖處理驗證錯誤,數據驗證應該由其組件完 l 視圖應該處理參數,參數應該交由控制器集處理 Control: 控制器像MVC樞神經,許需要些助手幫助比解析視圖,解析參數等.控制器訪問業務象或者中國重要,比StrutsAction. 控制器要解決問題包括: l 檢查抽取請求參數 l 調用業務象,傳遞請求獲取參數 l 創建模型,視圖講顯示應模型 l 選擇合適視圖發送給客戶端 l 控制器 現框架 現已經MVC框架實現.比較流行應該StrutsWebwork Struts 流行web框架,幾乎實際工業標準.除面討論MVC模式應該優點外.些缺點: l 每Action,緩存起,再請求Action候新象,重復使用第象,意味著每Action必須線程安全 l 采用ActionForm封裝表單數據,卻能應String類型數據, 雖使用工具Commons Beanutils進行類型轉化,僅僅提供象級別支持 l 嚴重依賴於Servlet API, 測試比較困難(版StrutsAction.execute簽名講換execute(ActionContext actionContext),依賴許嚴重) l 框架本身驗證規則比較簡單,般都依賴於Commons Validation進行驗證 l 想Action前做些處理困難.甚至自寫專門控制器 l 由於Struts都具體類繼承,容易打破封裝? l 提供各式各自定義標簽,數據綁定太原始,使頁面代碼依賴於Struts特定框架,卻規範,我覺致命 l 太面向JSP,盡管使用其視圖技術能,使用候卻便 Webwork 框架雖我沒使用,卻直關註發展 Webwork設計思想采用比Struts更聰明種式,技術角度說比Struts要高少.Command模式基礎.XworkWebwork,且框架並依賴於Servlet API. Xwork提供核功能:攔截器(Interceptor),運行表單驗證,類型轉換,IoC容器等. WebWork建立Xwork,用於處理基於HTTP響應請求.用MapActionContext封裝Session,Application等些Servlet象.解除Servlet API耦合. 仍完美: l 每請求都創建Action能些浪費.(Servlet引擎每請求創建象,沒看性能影響?) l 項目越越候,配置文件能零亂.像支持配置文件 l 異處理Command模式值註意問題:我知道某特定命令能拋特定異,所execute()迫拋異,論異運行異,已檢查異 Spring MVC Framework目標 面說些MVC原理,及現主流框架些問題,現看Spring何處理. Spring MVC框架根據同角色定義接口,問題依賴於Servlet API Spring MVC Framework些特點: l 基於組件技術.全部應用象,論控制器視圖,業務象類都java組件.並且Spring提供其基礎結構緊密集. l 依賴於Servlet API(目標雖,實現候確實依賴於Servlet) l 任意使用各種視圖技術,僅僅局限於JSP l 支持各種請求資源映射策略 l 應易於擴展 我認評價框架,應該幾原則 l 應該易於使用,易於測試 Spring 易於使用?我覺,尤其配置文件.恐怖情況,各種業務邏輯,基礎設施許擁擠配置文件.事務處理些基礎設施應該由容器管理發員,算些幾配置文件,邏輯雖清晰,基礎設置卻暴露外邊 Spring易於測試?Spring進行單元測試容易,測試起便 l 應該層提供接口 Spring提供接口,幾乎每接口都默認抽象實現,每抽象實現都些具體實現,所擴展性點Spring疑優秀 l 框架內部框架外部應該區別待 框架內部復雜,使用起定要簡單,Spring內部比較麻煩,隱藏種復雜性,使用起舒服,比設置bean屬性.僅僅setPropertyValue(String propertyName, Object value)完,至於設置,Spring完全隱藏種復雜性 l 完善文檔測試集 用說,外東西,都完善 Spring Web框架基本流程 知道Spring MVC框架,現看看流程 Spring MVC Framework至流程: web程序啟候,ContextLoaderServlet應配置文件信息讀取,通註射初始化控制器DispatchServlet. 接受HTTP請求候, DispatchServlet讓HandlerMapping處理請求.HandlerMapping根據請求URL(定非要URL,完全自定義,非靈)選擇Controller. DispatchServlet調用選定ControllerhandlerRequest,並且前調用Controllerinterceptor(假配置),返視圖模型集合ModelAndView.框架通ViewResolver解析視圖並且返View象,調用Viewrender返客戶端 DispatcherServlet 框架控制器,具體類,通運行文象初始化.控制器本身並控制流程,Controller控制器,處理請求責任委托給應Controller. 控制器繼承自抽象基類FrameworkServlet,屬性webApplicationContext代表著web程序文,文象默認實現XML文件讀取配置信息(其文件格式). WebApplicationContext其實beans包東西,包提供Spring整框架基礎結構,我析包內容.現僅僅需要知道WebApplicationContext代表web應用文象. 現看看DispatchServlet何工作: DispatchServlet由於繼承自抽象基類FrameworkServlet,FrameworkServletdoGet(),doPost()調用serviceWrapper(),跳serviceWrapper()看,結發現具體實現委托給doService(request, response); .所現已經清楚, DispatchServlet真實現功能doService() . 特別, FrameworkServletinitFrameworkServlet()控制器初始化,用初始化HandlerMappings類象,延遲類實現.其實Template模式實現.don’t call us, we will call u.總看,Spring通實現控制反轉:用框架控制流程,用戶 跳doService()看究竟,發現真工作另助手函數doDispatch(request, response),沒辦,繼續看,發現兩行代碼 HandlerExecutionChain mappedHandler = null; mappedHandler = getHandler(processedRequest, false); 看HandlerExecutionChain源碼發現其實ControllerInterceptors進行包裝; getHandler()HandlerMappings(List,存放handlerMapping象)取應handlerMapping象, 每HandlerMapping象代表ControllerURL映射(其實運行候HandlerExecutionChainURL映射,HandlerExecutionChain象其實Controllerinterceptors包裝器,HandlerMapping看ControllerURL映射).HandlerMapping通配置文件運行註射進,般SimpleUrlHandlerMapping類 取HandlerMapping象,繼續向看,發現: if (mappedHandler.getInterceptors() != null) { for (int i = 0; i < mappedHandler.getInterceptors().length; i++) { HandlerInterceptor interceptor = mappedHandler.getInterceptors()[i]; if (!interceptor.preHandle(processedRequest, response, mappedHandler.getHandler())) { triggerAfterCompletion(mappedHandler, interceptorIndex, processedRequest, response, null); return; } interceptorIndex = i; } } 調用Controller攔截器,原理句: interceptor.preHandle(processedRequest, response, mappedHandler.getHandler(), mv); preHandle傳入mappedHandler.getHandler()參數實現遞歸調用!interceptor.postHandle般.handleRequest調用 繼續看: HandlerAdapter ha = getHandlerAdapter(mappedHandler.getHandler()); mv = ha.handle(processedRequest, response, mappedHandler.getHandler()); 發現ControllerhandleRequest真操作中國給HandlerAdapterhandle,並且返ModelAndView,我想增加層意義應該解除ControllerDispatchServlet耦合吧. 接著簡單,調用render(),面由ViewResoler解析視圖名,再調用視圖象render合適視圖展現給用戶 ,控制器流程OVER HandlerMapping 通使用HandlerMapping,控制器用URL某Controller進行標準映射,實現URL映射具體類UrlHandlerMapping. Spring允許我自定義映射,比通Session,cookie或者用戶狀態映射.切僅僅需要實現HandlerMapping接口已.URL映射已經能滿足部要求 Controller Controller 類似StructsAction, Controller接口handleRequest(),放ModelAndView象,同設計目標所說,每Controller都java組件,所文環境任意配置,組件屬性都初始化候配置.Spring自提供幾具體實現.便我使用 ViewResolver Controller通返包含視圖名字視圖象ModelAndView象.徹底解除控制器視圖間耦合關系,並且提供際化支持. 配置文件: welcomeView.class = org.springframework.web.servlet.view. InternalResourceView welcomeView.url=/welcome.jsp welcomeView.class = org.springframework.web.servlet.view.xslt. XsltView welcomeView.url=/xslt/default.xslt View java組件,做任何請求處理或業務邏輯,僅僅獲取模型傳遞數據,並數據顯示.面 render按照流程工作: l 設置模型數據request作用域 l 取視圖URL l 轉發應URL 總結: Springweb框架優秀框架,走馬觀花析Spring工作流程些關鍵類,並沒深入探討背所體現思想,優缺點等東西.些都等再說