![java課件是非常優(yōu)秀的框架由其在3 0發(fā)布后_第1頁](http://file4.renrendoc.com/view/29dfbadd79c8a871221138501f6002d4/29dfbadd79c8a871221138501f6002d41.gif)
![java課件是非常優(yōu)秀的框架由其在3 0發(fā)布后_第2頁](http://file4.renrendoc.com/view/29dfbadd79c8a871221138501f6002d4/29dfbadd79c8a871221138501f6002d42.gif)
![java課件是非常優(yōu)秀的框架由其在3 0發(fā)布后_第3頁](http://file4.renrendoc.com/view/29dfbadd79c8a871221138501f6002d4/29dfbadd79c8a871221138501f6002d43.gif)
![java課件是非常優(yōu)秀的框架由其在3 0發(fā)布后_第4頁](http://file4.renrendoc.com/view/29dfbadd79c8a871221138501f6002d4/29dfbadd79c8a871221138501f6002d44.gif)
![java課件是非常優(yōu)秀的框架由其在3 0發(fā)布后_第5頁](http://file4.renrendoc.com/view/29dfbadd79c8a871221138501f6002d4/29dfbadd79c8a871221138501f6002d45.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
SpringMVC4.0–1、前SpringMVC是非常優(yōu)秀的MVC框架由其是在3.0版本發(fā)布后現(xiàn)在有越來越多的團(tuán)隊選擇了SpringMVC了。SpringMVC結(jié)構(gòu)簡單,應(yīng)了那句話簡單就是美,而且他強(qiáng)大不失靈活,性能也很優(yōu)秀。的是采用了值棧OGNL表達(dá)式struts2庫等會導(dǎo)致應(yīng)用的性能下降Struts2的多層器多實例actionSpringMVC1、SpringMVCStruts2,Struts22、SpringMVC很容易就可以寫出性能優(yōu)秀的程序,Struts2要處處才可以寫出性能優(yōu)秀的程3、SpringMVC的靈活是你無法想像的,Spring的擴(kuò)展性有口皆碑,Spring3MVC當(dāng)然也不會,不會MVC框架而感到有任何的限制。Struts2的眾多優(yōu)點:略 (呵呵,是不是2、1:可以從baidu中搜索的整體zip文件2:3:參考使用maven添加3、類與接1、 --前置控制2、HandlerMap接口--處理請求的映HandlerMap接口的實現(xiàn)類SimpleUrlHandlerMap通過配置文件,把一個URL映射到DefaultAnnotationHandlerMap通過注解,把一個URL映射到Controller類在spring3.2以后,此類已經(jīng)不再建議使用修改使用RequestMapHandlerMap實現(xiàn)RequestMapHandlerMap的api:用于識別在類上添加的@RequestMap注CreatesRequestMapInfoinstancesfromtypeandmethod-level@RequestMapannotationsin@Controllerclasses.3、HandlerAdapter--處理請求的映AnnotationMethodHandlerAdapterURL映射到ControllerRequestMapHandlerAdapter類,在Spring3.2以后,上面的類已不被建議使用 HandlerMethopterthatsupportsHandlerMethodswiththesignature--methodargumentandreturntypes,definedin@RequestMap.即用于識別在方法上添加的@RequestMap注解。4、Controller--控制所以我們并沒有用到這個接口。在類中只要添加@Controller5、HandlerInterceptor接口--我們自己實現(xiàn)這個接口,來完成的器的工作6、ViewResolver接口的實現(xiàn)UrlBasedViewResolverView7、View接JstlView8、用于解決i18n9、HandlerExceptionResolver--異常處SimpleMapExceptionResolver實現(xiàn)4、執(zhí)5、DispatcherServlet說SpringMVC,DispatcherServlet定義,把下來的請求,依據(jù)某某規(guī)則分發(fā)到目標(biāo)Controller(我們寫的Action)來處理?!澳衬骋?guī)則”:是根據(jù)你使用了哪個HandlerMap接口的實現(xiàn)類的不同而不同。<web-<servlet-map<url-pattern>*form</url-<url-pattern>*form</url-pattern>會*form結(jié)尾的請求名字來區(qū)分的。每一個DispatcherServlet有自己的WebApplicationContext上下文對象。同時保存的ServletContext中和Request對象中,關(guān)于key,以后說明。DispatcherServletwebWEB-INF文件夾下尋找名為[servlet-name]-servletxmlbean。<init-<param-value>classpath*:/springMVCxml</param-</init-<servlet-mapspringMVC.xml配置文件。其中<param-value>**xml</param-value>這里可以使用多種寫法2、<param-value>/WEB-INF/classes/springMVCxml</param-value>3、<param-value>classpath*:springMVC-mvcxml</param-value>46、Servlet匹配規(guī)則可以自已定義,Servlet哪種URL合適1、*.do,例如:/user/add.do,弊端:所有的url都要以.do結(jié)尾。不會影響靜態(tài)文件3、/,例如:/user/add,弊端:對jpg,js,css靜態(tài)文件的也被不能正常顯示。后面有解決辦法4、/*,可以走到Action中,但轉(zhuǎn)發(fā)到j(luò)sp時再次被,不能到j(luò)sp7、雙親上下文的說如果你使用了listener器來加載配置,一般在Struts+Spring+Hibernate的項目中都是使用Spring會創(chuàng)建一個全局的WebApplicationContextServletContext中,key是WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTEDispatcherServlet是一個Servlet,可以同時配置多個,每個DispatcherServlet有一個自己的WebApplicationContext上下文,這個上下文繼承了根上下文中所有東西。保存在ServletContext中,key是"org.springframework.web.servlet.FrameworkServlet.CONTEXT"+Servlet名稱當(dāng)一個Request對象產(chǎn)生時,會把這個WebApplicationContext上下文保存在Request對象中,key是DispatcherServlet.class.getName()+ SpringApplicationContext實例可以被限制在不同的作用域(scope)webMVCDispatcherServletWebApplicationContextcontextWebApplicationContext的所有beanservlet實例自己使用的屬性??偨Y(jié):不使用listener器來加載spring的配置,改用DispatcherServlet來加載spring的配置,不要雙親上下文,只使用一個DispatcherServlet,事情就簡單了,什么麻煩事兒也沒有了。8、spring.xml配置文件片段<!-- ponent-scanbase- .core,JUnit4" ponent-<!--<mvc:annotation-driven<!--<bean<propertyname="prefix"value="/WEB-<propertyname="suffix"<!--可為空,方便實現(xiàn)自已的依據(jù)擴(kuò)展名來選擇視圖解釋類的邏輯<!--器--<beanclass="com.coremvc.MyInteceptor"<!--對靜態(tài)資源文件的方案一(二選一)--<!--對靜態(tài)資源文件的方案二(二選一)--<mvcresourcesmap="/images/**"location="/images/"cache- <mvcresourcesmap="/js/**"location="/js/"cache- <mvcresourcesmap="/css/**"location="/css/"cache-period=" 在spring3.2<!--<beanng"/>--><!--<beanr"/>--><!--控制在類上添加的@RequestMap注解,下面的類可以實現(xiàn)更加詳細(xì)的配置,比用mvc:更好一些,這要看個人的--><!--<beanap"/>--<!--<bean
/>--由于寫了/以后,對靜態(tài)資源導(dǎo)入不成功,所以可以使用resource去除不被spring<!--<mvc:resourceslocation="/js/"map="/js/**"period="#{60*60*24*30}"/>--<!--也可以使用以下方法去除對靜態(tài)資源的--<!--<mvc:default-servlet-handler/>--<!--將靜態(tài)的資源的地址,傳遞到SimpleUrlHandlerMap中可以實現(xiàn)上面同樣的效果--<property<property<entry<property對所有css<entry
<!--自己的類--<beanid="test01"class="cn.test.controller.Test01Controller" ponent-scan/>@ControllerAction組 Service組件 @RepositoryDao組件 泛指組件,當(dāng)不好歸類時.@RequestMap("/")請求映射@Resource用于注入,j2ee)默認(rèn)按名稱裝配,@Resource(name="beanName")@Autowired用于注入,(sr提供的)默認(rèn)按類型裝配@Transactional(rollbackFor={Exception.class}) 設(shè)定bean<mvc:annotation-driven是一種簡寫形式,完全可以手動配置替代這種簡寫形式,簡寫形式可以讓初學(xué)都快速應(yīng)用默認(rèn)配置方案。<mvc:annotation-driven/>會自動RequestMapHandlerMap與RequestMapHandlerAdapter兩個bean,是springMVC為@Controllers分發(fā)請求所必須的。并提供了:數(shù)據(jù)綁定支持,@NumberFormatannotation支持,@DateTimeFormat支持,@Valid后面,我們處理響應(yīng)ajax請求時,就使用到了對json<mvc:interceptors/>是一種簡寫形式。通過看前面的大圖,知道,我們可以配置多個HandlerMap<mvc:interceptors/>會為每一個HandlerMap,注入一個器。其實我們也可以手動配置為每個HandlerMap注入一個器<mvc:default-servlet-handler/>Servlet<mvcresourcesmap="/images/**"location="/images/"cache- "/>匹配URLURL被當(dāng)做靜態(tài)資源,由Spring讀出到內(nèi)存中再響應(yīng)http9、如何到靜態(tài)的文件,如如何你的DispatcherServlet*.do這樣的URL,就不存在不到靜態(tài)資源的問題。如果你目的:可以正常靜態(tài)文件,不要找不到靜態(tài)文件報404。方案一:激活Tomcat的defaultServlet來處理靜<servlet-map<servlet-map<servlet-map,要寫在DispatcherServlet的前面,讓defaultServlet先,這個就不會進(jìn)入Spring了性能是最好的,Tomcat,JettyJBossandGlassFishServletdefault"AppEngine默認(rèn)Servlet的名字--"_ah_default"Resin默認(rèn)Servlet的名字--"resin-file"WebLogicServlet的名字"FileServlet"WebSphereServlet方案二spring3.0.4以后版本提供了mvcresourcesXml<!--對靜態(tài)資源文件的--<mvcresourcesmap="/images/**"location="/images/" 如果出現(xiàn)下面的錯誤,可能是沒有配置<mvc:annotation-driven報錯WARNING:NomapfoundforHTTPrequestwithURI[/mvc/user/findUser/lisi/770]inDispatcherServletwithname'springMVC'使用<mvcresources/>元素,把map的URI到SimpleUrlHandlerMap的urlMap中,key為map的URIpattern值,而value為ResourceHttpRequestHandler,這樣就巧妙的把對靜態(tài)資源的由HandlerMap轉(zhuǎn)到ResourceHttpRequestHandler處理并返回,所以就支持classpath ,jar包內(nèi)靜態(tài)資源的.另外需要注意的一點是,不要對SimpleUrlHandlerMap設(shè)置defaultHandler.因為對staticuridefaultHandler就是否則無法處理staticresources如到SimpleUrlHandlerMap上<property<property<entry<property對所有css<entry
方案<mvc:default-servlet-Xml會把"/**"url,到SimpleUrlHandlerMap的urlMap中,把對靜態(tài)資源的由HandlerMap轉(zhuǎn)到org.springframework.web.servletresource.DefaultServletHttpRequestHandler處理并返回.DefaultServletHttpRequestHandlerServlet補充說明:多個HandlerMap的執(zhí)行順序問題DefaultAnnotationHandlerMap的order屬性值是<mvcresources/>自動的SimpleUrlHandlerMap的order屬性值是<mvc:default-servlet-handler/>自動的SimpleUrlHandlerMap的order屬性值是spring會先執(zhí)行order值比較小的。當(dāng)一個a.jpg圖片文件時,先通過DefaultAnnotationHandlerMap來找處理器,一定是找不到的,我們沒有叫a.jpg的Action。再按order值升序找,由于最后一個SimpleUrlHandlerMap是匹配"/**"的,所以一定會匹配上,再響應(yīng)。一個,還要走層層匹配。真不知性能如何?改天做一下壓力測試,與Apache。最后再說明一下,如何你的DispatcherServlet*.do這樣的URL,就不存上述問題了。10、請求如何映射到具體的Action中的方方案一:基于xml配置映射,可以利用SimpleUrlHandlerMap、BeanNameUrlHandlerMap進(jìn)行Xmlap"/>以上都可以注入interceptors,實現(xiàn)權(quán)限控制等前置工作。2springMVC并在action類上使用:11、Spring中的Springorg.springframework.web.servlet.HandlerInterceptor接口,Action之前執(zhí)行publicbooleanpreHandle(HttpServletRequestrequest,HttpServletResponseresponse,ObjectpublicvoidpostHandle(HttpServletRequestrequest,HttpServletResponseresponse,Objecthandler,ModelAndViewmodelAndView);publicvoid pletion(HttpServletRequestrequest,HttpServletResponseresponse,Objecthandler,Exceptionex)在preHandle中,可以進(jìn)行編碼、安全控制等處理;在postHandleModelAndView; pletion中,可以根據(jù)ex是否為null判斷是否發(fā)生了異常,進(jìn)行日志記錄。參數(shù)中的Objecthandler是下一個器。12、如何使用器自定義一個器,要實現(xiàn)HandlerInterceptor接口JavapublicclassMyInteceptorimplementsHandlerInterceptor}SpringMVC并沒有總的器,不能對所有的請求進(jìn)行前后SpringMVC的器是屬于HandlerMap級別的可以有多個HandlerMap每個可以有自己的器當(dāng)一個請求按Order值從小到大,順序執(zhí)行HandlerMap接口的實現(xiàn)類時,哪一個先有返回,那就可以結(jié)束了,后面的HandlerMap就不走了,本道工序就完成了。就轉(zhuǎn)到下一道工序了。器會在什么時候執(zhí)行呢?一個請求交給一個HandlerMap時,這個HandlerMap先找有沒有處springMVC的配置文件中配置有三種方法:Java<beanclass="com.app.mvc.MyInteceptor"<mvc:interceptors/>會為每一個HandlerMap,注入一個器??傆幸粋€HandlerMap是可以找到方案二,(近似)總器,匹配的URL。Xml代碼<mvc:interceptors<mvcmappath="/user/*"/><!--/user/*--<beanclass="comURL匹配。方案三,HandlerMappint上的器Xml<property<beanclass="com如果使用了<mvc:annotation-driven/>,它會自動注冊DefaultAnnotationHandlerMap與AnnotationMethodHandlerAdapter這兩個bean,所以就沒有機(jī)會再給它注入interceptors屬性,就無法指定攔當(dāng)然我們可以通過人工配置上面的兩個Bean<mvc:annotation-driven,就可以給interceptors性注入器了13、如何實現(xiàn)全局的異常處springMVCXml<!--總錯誤處理 <property<property<property這里主要的類是SimpleMapExceptionResolver類,和他的父類 HandlerExceptionResolver類。HandlerExceptionResolver接口,寫一個自己的異常處理程序。spring通過SimpleMapExceptionResolver我們可以將不同的異常映射到不同的jsp頁面(通exceptionMaps屬性的配置拋出的異常在exceptionMaps中沒有對應(yīng)的映射,則Spring將用此默認(rèn)配置顯示異常信息。注意這里配置的異常顯示界面均僅包括主文件名,至于文件路徑和后綴已經(jīng)在viewResolver顯示錯誤的jsp頁面:Html<%@pagelanguage="java"contentType="text/html;charset=GBK"<%@page <metahttp-equiv="Content-Type"content="text/html;<h1>出錯了Exceptione=(Exception)request.getAttribute("exception");
14、如何把全局異常記錄到日志中定名。我是在SimpleMapExceptionResolver類父類HandlerExceptionResolver類中找到這個屬warnLogCategory不為空,spring就會使用apachemons.logging.Logwarn值:“org.springframework.web.servlethandler.SimpleMapExceptionResolver”,是“SimpleMapExceptionResolver類的全限定名。這個值不是隨便寫的。因為我在log4j的配置文件中warn的日志一定會被記錄,即使log4j的根日志級別是ERROR。15、如何給springMVC中的ActionJUnit單元測試springMVCactionaction寫單元測試的,再在不同JUnitActionBaseJUnitJavapackageimportjavax.servlethttp.HttpServletRequest;importjavax.servlethttp.HttpServletResponse;importorg.junit.BeforeClass;importorg.springframework.mock.web.MockServletContext;importorg.springframework.web.servlet.HandlerAdapter;importorg.springframework.web.servlet.HandlerExecutionChain;importorg.springframework.web.servlet.HandlerMap;importorg.springframework.web.servlet.ModelAndView;importorg.springframework.web.servletmvc.annotation.AnnotationMethodHandlerAdapter;importorg.springframework.web.servletmvc.annotation.DefaultAnnotationHandlerMap;JUnit測試actionpublicclassJUnitActionBaseprivatestaticHandlerMaphandlerMap;privatestaticHandlerAdapterhandlerAdapter;*springMVC配置文publicstaticvoidsetUp()if(handlerMap==null)String[]configs={"file:src/springConfig/springMVCxml"};XmlWebApplicationContextcontext=newXmlWebApplicationContext();MockServletContextmsc=newMockServletContext(); contextrefresh();handlerMap=(HandlerMap)context }}request對象請求的*@param@param@throwspublicModelAndViewexcuteAction(HttpServletRequestrequest,HttpServletResponseresponse)throwsException{HandlerExecutionChainchain=handlerMap.getHandler(request);finalModelAndViewmodel=handlerAdapter.handle(request,response,returnmodel;}}這是個JUnit測試類,我們可以newRequest對象,來參與測試,太方便了。給request指定的URL,Action了。Java importorg.junit.Assert;importorg.
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度城鎮(zhèn)土地使用權(quán)轉(zhuǎn)讓及配套設(shè)施建設(shè)合同協(xié)議3篇
- 二零二五年度小額貸款個人信用借款合同范本2篇
- 二零二五年度電子商務(wù)銷售結(jié)算合同3篇
- 二零二五年度建筑施工安全環(huán)保事故處理協(xié)議3篇
- 二零二五年度個人住宅買賣合同示范范本
- 酒店管理工作中的風(fēng)險管控
- 醫(yī)院行業(yè)美工的醫(yī)療廣告
- 培訓(xùn)行業(yè)課程安全操作指南
- 電子工程師的領(lǐng)域探索
- 二零二五年度農(nóng)產(chǎn)品直銷銷售合同范本
- 《帶一本書去讀研:研究生關(guān)鍵學(xué)術(shù)技能快速入門》筆記
- 知識圖譜智慧樹知到答案2024年浙江大學(xué)
- 2024年度-美團(tuán)新騎手入門培訓(xùn)
- 高一數(shù)學(xué)寒假講義(新人教A專用)【復(fù)習(xí)】第05講 三角函數(shù)(學(xué)生卷)
- 農(nóng)村高中思想政治課時政教育研究的中期報告
- 醫(yī)院定崗定編方案文檔
- 4-熔化焊與熱切割作業(yè)基礎(chǔ)知識(一)
- 2023年200MW儲能電站儲能系統(tǒng)設(shè)計方案
- 個人安全與社會責(zé)任的基本知識概述
- 簡易勞務(wù)合同電子版
- 明代文學(xué)緒論
評論
0/150
提交評論