




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、Springmv知識A概念SpringWebMVC是一種基于Java的實現了WebMVC設計模式的請求驅動類型的輕量級Web框架,即使用了MVC架構模式的思想,將web層進行職責解耦,基于請求驅動指的就是使用請求-響應模型,框架的目的就是幫助我們簡化開發,SpringWebMVC也是要簡化我們日常Web開發的。理解這張圖之前我們得先知道以下的幾個名詞:前端控制器(DispatcherServlet)、請求到處理器映射(HandlerMapping)、處理器適配器(HandlerAdapter)、視圖解析器(ViewResolver)、處理器或頁面控制器(Controller)、驗證器(Vali
2、dator)、命令對象(Command請求參數綁定到的對象就叫命令對象)、表單對象(FormObject提供給表單展示和提交到的對象就叫表單對象)步驟解析:核心架構的具體流程步驟如下:1、首先用戶發送請求DispatcherServlet,前端控制器收到請求后自己不進行處理,而是委托給其他的解析器進行處理,作為統一訪問點,進行全局的流程控制;2、DispatcherServletHandlerMapping,HandlerMapping將會把請求映射為HandlerExecutionChain對象(包含一個Handler處理器(頁面控制器)對象、多個HandlerInterceptor攔截器)
3、對象,通過這種策略模式,很容易添加新的映射策略;3、DispatcherServletHandlerAdapter,HandlerAdapter將會把處理器包裝為適配器,從而支持多種類型的處理器,即適配器設計模式的應用,從而很容易支持很多類型的處理器;4、HandlerAdapter處理器功能處理方法的調用,HandlerAdapter將會根據適配的結果調用真正的處理器的功能處理方法,完成功能處理;并返回一個ModelAndView對象(包含模型數據、邏輯視圖名);5、ModelAndView的邏輯視圖名ViewResolver,ViewResolver將把邏輯視圖名解析為具體的View,通過
4、這種策略模式,很容易更換其他視圖技術;6、View渲染,View會根據傳進來的Model模型數據進行渲染,此處的Model實際是一個Map數據結構,因此很容易支持其他視圖技術;7、返回控制權給DispatcherServlet,由DispatcherServlet返回響應給用戶,到此一個流程結束。當然以上步驟中并沒有去說明攔截器、事務、安全性,其描述的是具體的對象的流程,前者所說的是框架對象,所以使用的技術和原理則不一樣。Handlerinterceptor攔截器A概念SpringMVC中的Interceptor攔截器也是相當重要和相當有用的,它的主要作用是攔截用戶的請求并進行相應的處理,其他
5、的作用比如通過它來進行權限驗證,或者是來判斷用戶是否登陸,日志記錄,或者限制時間點訪問。Interceptor實現類及其方法SpringMVC中的Interceptor攔截請求是通過HandlerInterceptor來實現的。在SpringMVC中定義一個Interceptor非常簡單,主要有兩種方式,第一種方式是要定義的Interceptor類要實現了Spring的HandlerInterceptor接口,或者是這個類繼承實現了HandlerInterceptor接口的類,比如Spring已經提供的實現了HandlerInterceptor接口的抽象類HandlerInterceptorA
6、dapter;第二種方式是實現Spring的WebRequestInterceptor接口,或者是繼承實現了WebRequestInterceptor的類。HandlerInterceptor接口中定義了三個方法,我們就是通過這三個方法來對用戶的請求進行攔截處理的。(1)preHandle(HttpServletRequestrequest,HttpServletResponseresponse,Objecthandle)方法。該方法將在請求處理之前進行調用。SpringMVC中的Interceptor是鏈式的調用的,在一個應用中或者說是在一個請求中可以同時存在多個Interceptor。每個
7、Interceptor的調用會依據它的聲明順序依次執行,而且最先執行的都是Interceptor中的preHandle方法,所以可以在這個方法中進行一些前置初始化操作或者是對當前請求的一個預處理,也可以在這個方法中進行一些判斷來決定請求是否要繼續進行下去。該方法的返回值是布爾值Boolean類型的,當它返回為false時,表示請求結束,后續的Interceptor和Controller都不會再執行;當返回值為true時就會繼續調用下一個Interceptor的preHandle方法,如果已經是最后一個Interceptor的時候就會是調用當前請求的Controller方法。(2)postHan
8、dle(HttpServletRequestrequest,HttpServletResponseresponse,Objecthandle,ModelAndViewmodelAndView)方法,由preHandle方法的解釋我們知道這個方法包括后面要說到的afterCompletion方法都只能是在當前所屬的Interceptor的preHandle方法的返回值為true時才能被調用。postHandle方法,顧名思義就是在當前請求進行處理之后,也就是Controller方法調用之后執行,但是它會在DispatcherServlet進行視圖返回渲染之前被調用,所以我們可以在這個方法中對Co
9、ntroller處理之后的ModelAndView對象進行操作。postHandle方法被調用的方向跟preHandle是相反的,也就是說先聲明的Interceptor的postHandle方法反而會后執行,這和Struts2里面的Interceptor的執行過程有點類型。Struts2里面的Interceptor的執行過程也是鏈式的,只是在Struts2里面需要手動調用ActionInvocation的invoke方法來觸發對下一個Interceptor或者是Action的調用,然后每一個Interceptor中在invoke方法調用之前的內容都是按照聲明順序執行的,而invoke方法之后的
10、內容就是反向的。(3)afterCompletion(HttpServletRequestrequest,HttpServletResponseresponse,Objecthandle,Exceptionex)方法,該方法也是需要當前對應的Interceptor的preHandle方法的返回值為true時才會執行。顧名思義,該方法將在整個請求結束之后,也就是在DispatcherServlet渲染了對應的視圖之后執行。這個方法的主要作用是用于進行資源清理工作的。我們的系統日志的攔截在這個方法中,可以記錄日志的相關的參數,檢測方法的執行。攔截器的配置-日志攔帚七圖2系統springmvc攔截器
11、這三個方法的代碼可以參考攔截器日志模塊運用1.獲取MAC地址獲取用戶請求的參數獲取異常獲取其所操作的所有的類可以訪問Loglnterceptor.javaAOP的原理與實現A概念AOP是OOP的延續,是AspectOrientedProgramming的縮寫,意思是面向切面編程。可以通過預編譯方式和運行期動態代理實現在不修改源代碼的情況下給程序動態統一添加功能的一種技術。AOP實際是GoF設計模式的延續,設計模式孜孜不倦追求的是調用者和被調用者之間的解耦,AOP可以說也是這種目標的一種實現。我們現在做的一些非業務,如:日志、事務、安全等都會寫在業務代碼中(也即是說,這些非業務類橫切于業務類),
12、但這些代碼往往是重復,復制粘貼式的代碼會給程序的維護帶來不便,AOP就實現了把這些業務需求與系統需求分開來做。這種解決的方式也稱代理機制。先來了解一下AOP的相關概念,Spring參考手冊中定義了以下幾個AOP的重要概念,結合以上代碼分析如下:切面(Aspect):官方的抽象定義為一個關注點的模塊化,這個關注點可能會橫切多個對象”,在本例中,“切面”就是類TestAspect所關注的具體行為,例如,AServiceImpl.barA()的調用就是切面TestAspect所關注的行為之一。切面在Applicationcontext中來配置。連接點(Joinpoint):程序執行過程中的某一行為,
13、例如,UserService.get的調用或者UserService.delete拋出異常等行為。通知(Advice):切面對于某個連接點所產生的動作,例如,TestAspect中對com.spring.service包下所有類的方法進行日志記錄的動作就是一個Advice。其中,一個“切面可以包含多個Advice,例如ServiceAspect。切入點(Pointcut):匹配連接點的斷言,在AOP中通知和一個切入點表達式關聯。例如,TestAspect中的所有通知所關注的連接點,都由切入點表達式execution(*com.spring.service.*.*(.)來決定。目標對象(Targ
14、etObject):被一個或者多個切面所通知的對象。例如,AServcielmpI和BServicelmpI,當然在實際運行時,SpringAOP采用代理實現,實際AOP操作的是TargetObject的代理對象。AOP代理(AOPProxy):在SpringAOP中有兩種代理方式,JDK動態代理和CGLIB代理。默認情況下,TargetObject實現了接口時,則采用JDK動態代理,例如,AServicelmpI;反之,采用CGLIB代理,例如,BServiceImpl。強制使用CGLIB代理需要將aop:config的proxy-target-class屬性設為true。通知(Advice
15、)類型:前置通知(Beforeadvice):在某連接點(JoinPoint)之前執行的通知,但這個通知不能阻止連接點前的執行。Applicationcontext中在aop:aspect里面使用aop:before元素進行聲明。例如,TestAspect中的doBefore方法。后置通知(Afteradvice):當某連接點退出的時候執行的通知(不論是正常返回還是異常退出)。ApplicationContext中在aop:aspect里面使用aop:after元素進行聲明。例如,ServiceAspect中的returnAfter方法,所以Teser中調用UserService.delete
16、拋出異常時,returnAfter方法仍然執行。返回后通知(Afterreturnadvice):在某連接點正常完成后執行的通知,不包括拋出異常的情況。ApplicationContext中在aop:aspect里面使用after-returning元素進行聲明。環繞通知(Aroundadvice):包圍一個連接點的通知,類似Web中Servlet規范中的Filter的doFilter方法。可以在方法的調用前后完成自定義的行為,也可以選擇不執行。ApplicationContext中在aop:aspect里面使用aop:around元素進行聲明。例女口,ServiceAspect中的aroun
17、d方法。拋出異常后通知(Afterthrowingadvice):在方法拋出異常退出時執行的通知。ApplicationContext中在aop:aspect里面使用aop:after-throwing元素進行聲明。例如,ServiceAspect中的returnThrow方法。AOP的配置和運用Aop的配置文件:aop的配置.xml。使用注意:1、tomact使用注意:在.XML文件支持aop的情況下,需要的配置文件中加入以下的代過注轄配畫詩組件一碼:!-激活繪件擔隘功能.:在包cmywh.studio.,spring.aop_其孑包下盂自動更益這con.text:o-nipon.en.t-
18、scaiibase-packaEe=,rcn*ysh!激活自動代產功能一aop:aspectjautQproxyproxy-1arge1:一匚_s5三=匸rue/Aop的bean文件2.注意aop切入點的表達式dop:pointcutid=(tionfoMcutj1*eKpressionVxecutioDbis.niodHes.tservice.J)orexecutionIns.module5,sys.servicetJ丿/環繞詭擁publicGbjectcontroller(ProceedingJoinPointpjp)throwsThrowable/獲職當亙mi行的controller&i
19、類Stringclasswaine=pjpgetTmrqEt)getclass().getName();if(classNatne!=null)conC1955tan?e=className;l/荻取當前執行的方法容StringmethodNaine=pjp.getsignature(J.getUame();/方法容If(metliodName1=null)tJiodJJahie=methoduame;Objectstt=pjpg巳t總rgs();If(strlength1=0)entity=str0.getClass().getSimplElfame();7/classNamem.etrio
20、dNam.eioptproperties/文件茯取操作茗Stringkey=clas3Uame+1T-,r+meth0dNaniE;Objectobj=pjp丁冃拆方,去returnobj;/F繞迪知publicCLjectservice(ProceedingJoinpointpjp)throwsThrowblsserviced的類StringclassName-pjp.gEtTarg巴t仃gEtC!丄門g已tName);Exception的處理A概念SpringMVC提供的異常處理主要有兩種方式,一種是直接實現自己的HandlerExceptionResolver,另一種是使用注解的方式實現
21、一個專門用于處理異常的ControllerExceptionHandler。前者當發生異常時,頁面會跳到指定的錯誤頁面,后者同樣,只是后者會在每個controller中都需要加入重復的代碼。如何進行簡單地統一配置異常,使得發生普通錯誤指定到固定的頁面,ajax發生錯直接通過js獲取,展現給用戶,變得非常重要。下面先介紹下2種異常處理方式,同時,結合現有的代碼,讓其支持ajax方式,實現springMVCweb系統的異常統一處理。1實現自己的。HandlerExceptionResolver是一個接口,springMVC本身已經對其有了一個自身的實現DefaultExceptionResolve
22、r,該解析器只是對其中的一些比較典型的異常進行了攔截處理。靈Li,r.14.importjswajirSerwl&t.htt口.HttpSerletR.equestsimportjavax.servlet.http-HttpServletResponsejimportorg.pring-Fi?amewDrk.web.serwlet.HandLerEscepticinREEOlvEr;importorg.springframework.web.servlet.odeLAndView;publicclassExceptionHandlerimplementsHandlerExceptionREcL忻Er園w亡rid亡publicModelAndViewresdlveExce口1:|215已*丄已tR皀quEMl:equestHttpServletRes口onm已responseObjecthandlerExceptio
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 核電工程現場施工安全操作規程考核試卷
- 衛生材料在汽車制造中的應用考核試卷
- 箱包行業創新材料應用考核試卷
- 守株待兔新編初二語文作文
- 描寫姥爺的初二語文作文
- 紙板生產中的物流與倉儲管理策略考核試卷
- 密封用填料的聲學性能分析考核試卷
- 九級語文上冊第五單元提高練習5課人教新課標版
- 租賃企業運營模式解析考核試卷
- 2-9邏輯函數的標準形式-最小項表達式
- 貴州國企招聘2025貴州路橋集團有限公司招聘35人筆試參考題庫附帶答案詳解
- 衛生管理行業人才培養與社會責任分析試題及答案
- DB32T 5082-2025建筑工程消防施工質量驗收標準
- 施工安全的教育培訓記錄表
- (正式版)SH∕T 3548-2024 石油化工涂料防腐蝕工程施工及驗收規范
- 農村常用法律法規知識講座課件(村干部培訓)
- 年產5萬噸甲醇氧化制甲醛工藝及反應器設計
- 國家職業技能標準 (2021年版) 鑒定估價師(機動車鑒定評估師)
- 公司組織架構圖56832
- USB 數據線 SOP
- 在自己的城里旅行
評論
0/150
提交評論