




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
SpringMVC4.0–1、前SpringMVC是非常優(yōu)秀的MVC框架由其是在3.0版本發(fā)布后現(xiàn)在有越來(lái)越多的團(tuán)隊(duì)選擇了SpringMVC了。SpringMVC結(jié)構(gòu)簡(jiǎn)單,應(yīng)了那句話簡(jiǎn)單就是美,而且他強(qiáng)大不失靈活,性能也很優(yōu)秀。的是采用了值棧OGNL表達(dá)式struts2庫(kù)等會(huì)導(dǎo)致應(yīng)用的性能下降Struts2的多層器多實(shí)例actionSpringMVC1、SpringMVCStruts2,Struts22、SpringMVC很容易就可以寫(xiě)出性能優(yōu)秀的程序,Struts2要處處才可以寫(xiě)出性能優(yōu)秀的程3、SpringMVC的靈活是你無(wú)法想像的,Spring的擴(kuò)展性有口皆碑,Spring3MVC當(dāng)然也不會(huì),不會(huì)MVC框架而感到有任何的限制。Struts2的眾多優(yōu)點(diǎn):略 (呵呵,是不是2、1:可以從baidu中搜索的整體zip文件2:3:參考使用maven添加3、類與接1、 --前置控制2、HandlerMap接口--處理請(qǐng)求的映HandlerMap接口的實(shí)現(xiàn)類SimpleUrlHandlerMap通過(guò)配置文件,把一個(gè)URL映射到DefaultAnnotationHandlerMap通過(guò)注解,把一個(gè)URL映射到Controller類在spring3.2以后,此類已經(jīng)不再建議使用修改使用RequestMapHandlerMap實(shí)現(xiàn)RequestMapHandlerMap的api:用于識(shí)別在類上添加的@RequestMap注CreatesRequestMapInfoinstancesfromtypeandmethod-level@RequestMapannotationsin@Controllerclasses.3、HandlerAdapter--處理請(qǐng)求的映AnnotationMethodHandlerAdapterURL映射到ControllerRequestMapHandlerAdapter類,在Spring3.2以后,上面的類已不被建議使用 HandlerMethopterthatsupportsHandlerMethodswiththesignature--methodargumentandreturntypes,definedin@RequestMap.即用于識(shí)別在方法上添加的@RequestMap注解。4、Controller--控制所以我們并沒(méi)有用到這個(gè)接口。在類中只要添加@Controller5、HandlerInterceptor接口--我們自己實(shí)現(xiàn)這個(gè)接口,來(lái)完成的器的工作6、ViewResolver接口的實(shí)現(xiàn)UrlBasedViewResolverView7、View接JstlView8、用于解決i18n9、HandlerExceptionResolver--異常處SimpleMapExceptionResolver實(shí)現(xiàn)4、執(zhí)5、DispatcherServlet說(shuō)SpringMVC,DispatcherServlet定義,把下來(lái)的請(qǐng)求,依據(jù)某某規(guī)則分發(fā)到目標(biāo)Controller(我們寫(xiě)的Action)來(lái)處理?!澳衬骋?guī)則”:是根據(jù)你使用了哪個(gè)HandlerMap接口的實(shí)現(xiàn)類的不同而不同。<web-<servlet-map<url-pattern>*form</url-<url-pattern>*form</url-pattern>會(huì)*form結(jié)尾的請(qǐng)求名字來(lái)區(qū)分的。每一個(gè)DispatcherServlet有自己的WebApplicationContext上下文對(duì)象。同時(shí)保存的ServletContext中和Request對(duì)象中,關(guān)于key,以后說(shuō)明。DispatcherServletwebWEB-INF文件夾下尋找名為[servlet-name]-servletxmlbean。<init-<param-value>classpath*:/springMVCxml</param-</init-<servlet-mapspringMVC.xml配置文件。其中<param-value>**xml</param-value>這里可以使用多種寫(xiě)法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é)尾。不會(huì)影響靜態(tài)文件3、/,例如:/user/add,弊端:對(duì)jpg,js,css靜態(tài)文件的也被不能正常顯示。后面有解決辦法4、/*,可以走到Action中,但轉(zhuǎn)發(fā)到j(luò)sp時(shí)再次被,不能到j(luò)sp7、雙親上下文的說(shuō)如果你使用了listener器來(lái)加載配置,一般在Struts+Spring+Hibernate的項(xiàng)目中都是使用Spring會(huì)創(chuàng)建一個(gè)全局的WebApplicationContextServletContext中,key是WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTEDispatcherServlet是一個(gè)Servlet,可以同時(shí)配置多個(gè),每個(gè)DispatcherServlet有一個(gè)自己的WebApplicationContext上下文,這個(gè)上下文繼承了根上下文中所有東西。保存在ServletContext中,key是"org.springframework.web.servlet.FrameworkServlet.CONTEXT"+Servlet名稱當(dāng)一個(gè)Request對(duì)象產(chǎn)生時(shí),會(huì)把這個(gè)WebApplicationContext上下文保存在Request對(duì)象中,key是DispatcherServlet.class.getName()+ SpringApplicationContext實(shí)例可以被限制在不同的作用域(scope)webMVCDispatcherServletWebApplicationContextcontextWebApplicationContext的所有beanservlet實(shí)例自己使用的屬性??偨Y(jié):不使用listener器來(lái)加載spring的配置,改用DispatcherServlet來(lái)加載spring的配置,不要雙親上下文,只使用一個(gè)DispatcherServlet,事情就簡(jiǎn)單了,什么麻煩事兒也沒(méi)有了。8、spring.xml配置文件片段<!-- ponent-scanbase- .core,JUnit4" ponent-<!--<mvc:annotation-driven<!--<bean<propertyname="prefix"value="/WEB-<propertyname="suffix"<!--可為空,方便實(shí)現(xiàn)自已的依據(jù)擴(kuò)展名來(lái)選擇視圖解釋類的邏輯<!--器--<beanclass="com.coremvc.MyInteceptor"<!--對(duì)靜態(tài)資源文件的方案一(二選一)--<!--對(duì)靜態(tài)資源文件的方案二(二選一)--<mvcresourcesmap="/images/**"location="/images/"cache- <mvcresourcesmap="/js/**"location="/js/"cache- <mvcresourcesmap="/css/**"location="/css/"cache-period=" 在spring3.2<!--<beanng"/>--><!--<beanr"/>--><!--控制在類上添加的@RequestMap注解,下面的類可以實(shí)現(xiàn)更加詳細(xì)的配置,比用mvc:更好一些,這要看個(gè)人的--><!--<beanap"/>--<!--<bean
/>--由于寫(xiě)了/以后,對(duì)靜態(tài)資源導(dǎo)入不成功,所以可以使用resource去除不被spring<!--<mvc:resourceslocation="/js/"map="/js/**"period="#{60*60*24*30}"/>--<!--也可以使用以下方法去除對(duì)靜態(tài)資源的--<!--<mvc:default-servlet-handler/>--<!--將靜態(tài)的資源的地址,傳遞到SimpleUrlHandlerMap中可以實(shí)現(xiàn)上面同樣的效果--<property<property<entry<property對(duì)所有css<entry
<!--自己的類--<beanid="test01"class="cn.test.controller.Test01Controller" ponent-scan/>@ControllerAction組 Service組件 @RepositoryDao組件 泛指組件,當(dāng)不好歸類時(shí).@RequestMap("/")請(qǐng)求映射@Resource用于注入,j2ee)默認(rèn)按名稱裝配,@Resource(name="beanName")@Autowired用于注入,(sr提供的)默認(rèn)按類型裝配@Transactional(rollbackFor={Exception.class}) 設(shè)定bean<mvc:annotation-driven是一種簡(jiǎn)寫(xiě)形式,完全可以手動(dòng)配置替代這種簡(jiǎn)寫(xiě)形式,簡(jiǎn)寫(xiě)形式可以讓初學(xué)都快速應(yīng)用默認(rèn)配置方案。<mvc:annotation-driven/>會(huì)自動(dòng)RequestMapHandlerMap與RequestMapHandlerAdapter兩個(gè)bean,是springMVC為@Controllers分發(fā)請(qǐng)求所必須的。并提供了:數(shù)據(jù)綁定支持,@NumberFormatannotation支持,@DateTimeFormat支持,@Valid后面,我們處理響應(yīng)ajax請(qǐng)求時(shí),就使用到了對(duì)json<mvc:interceptors/>是一種簡(jiǎn)寫(xiě)形式。通過(guò)看前面的大圖,知道,我們可以配置多個(gè)HandlerMap<mvc:interceptors/>會(huì)為每一個(gè)HandlerMap,注入一個(gè)器。其實(shí)我們也可以手動(dòng)配置為每個(gè)HandlerMap注入一個(gè)器<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)資源的問(wèn)題。如果你目的:可以正常靜態(tài)文件,不要找不到靜態(tài)文件報(bào)404。方案一:激活Tomcat的defaultServlet來(lái)處理靜<servlet-map<servlet-map<servlet-map,要寫(xiě)在DispatcherServlet的前面,讓defaultServlet先,這個(gè)就不會(huì)進(jìn)入Spring了性能是最好的,Tomcat,JettyJBossandGlassFishServletdefault"AppEngine默認(rèn)Servlet的名字--"_ah_default"Resin默認(rèn)Servlet的名字--"resin-file"WebLogicServlet的名字"FileServlet"WebSphereServlet方案二spring3.0.4以后版本提供了mvcresourcesXml<!--對(duì)靜態(tài)資源文件的--<mvcresourcesmap="/images/**"location="/images/" 如果出現(xiàn)下面的錯(cuò)誤,可能是沒(méi)有配置<mvc:annotation-driven報(bào)錯(cuò)WARNING:NomapfoundforHTTPrequestwithURI[/mvc/user/findUser/lisi/770]inDispatcherServletwithname'springMVC'使用<mvcresources/>元素,把map的URI到SimpleUrlHandlerMap的urlMap中,key為map的URIpattern值,而value為ResourceHttpRequestHandler,這樣就巧妙的把對(duì)靜態(tài)資源的由HandlerMap轉(zhuǎn)到ResourceHttpRequestHandler處理并返回,所以就支持classpath ,jar包內(nèi)靜態(tài)資源的.另外需要注意的一點(diǎn)是,不要對(duì)SimpleUrlHandlerMap設(shè)置defaultHandler.因?yàn)閷?duì)staticuridefaultHandler就是否則無(wú)法處理staticresources如到SimpleUrlHandlerMap上<property<property<entry<property對(duì)所有css<entry
方案<mvc:default-servlet-Xml會(huì)把"/**"url,到SimpleUrlHandlerMap的urlMap中,把對(duì)靜態(tài)資源的由HandlerMap轉(zhuǎn)到org.springframework.web.servletresource.DefaultServletHttpRequestHandler處理并返回.DefaultServletHttpRequestHandlerServlet補(bǔ)充說(shuō)明:多個(gè)HandlerMap的執(zhí)行順序問(wèn)題DefaultAnnotationHandlerMap的order屬性值是<mvcresources/>自動(dòng)的SimpleUrlHandlerMap的order屬性值是<mvc:default-servlet-handler/>自動(dòng)的SimpleUrlHandlerMap的order屬性值是spring會(huì)先執(zhí)行order值比較小的。當(dāng)一個(gè)a.jpg圖片文件時(shí),先通過(guò)DefaultAnnotationHandlerMap來(lái)找處理器,一定是找不到的,我們沒(méi)有叫a.jpg的Action。再按order值升序找,由于最后一個(gè)SimpleUrlHandlerMap是匹配"/**"的,所以一定會(huì)匹配上,再響應(yīng)。一個(gè),還要走層層匹配。真不知性能如何?改天做一下壓力測(cè)試,與Apache。最后再說(shuō)明一下,如何你的DispatcherServlet*.do這樣的URL,就不存上述問(wèn)題了。10、請(qǐng)求如何映射到具體的Action中的方方案一:基于xml配置映射,可以利用SimpleUrlHandlerMap、BeanNameUrlHandlerMap進(jìn)行Xmlap"/>以上都可以注入interceptors,實(shí)現(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是下一個(gè)器。12、如何使用器自定義一個(gè)器,要實(shí)現(xiàn)HandlerInterceptor接口JavapublicclassMyInteceptorimplementsHandlerInterceptor}SpringMVC并沒(méi)有總的器,不能對(duì)所有的請(qǐng)求進(jìn)行前后SpringMVC的器是屬于HandlerMap級(jí)別的可以有多個(gè)HandlerMap每個(gè)可以有自己的器當(dāng)一個(gè)請(qǐng)求按Order值從小到大,順序執(zhí)行HandlerMap接口的實(shí)現(xiàn)類時(shí),哪一個(gè)先有返回,那就可以結(jié)束了,后面的HandlerMap就不走了,本道工序就完成了。就轉(zhuǎn)到下一道工序了。器會(huì)在什么時(shí)候執(zhí)行呢?一個(gè)請(qǐng)求交給一個(gè)HandlerMap時(shí),這個(gè)HandlerMap先找有沒(méi)有處springMVC的配置文件中配置有三種方法:Java<beanclass="com.app.mvc.MyInteceptor"<mvc:interceptors/>會(huì)為每一個(gè)HandlerMap,注入一個(gè)器??傆幸粋€(gè)HandlerMap是可以找到方案二,(近似)總器,匹配的URL。Xml代碼<mvc:interceptors<mvcmappath="/user/*"/><!--/user/*--<beanclass="comURL匹配。方案三,HandlerMappint上的器Xml<property<beanclass="com如果使用了<mvc:annotation-driven/>,它會(huì)自動(dòng)注冊(cè)DefaultAnnotationHandlerMap與AnnotationMethodHandlerAdapter這兩個(gè)bean,所以就沒(méi)有機(jī)會(huì)再給它注入interceptors屬性,就無(wú)法指定攔當(dāng)然我們可以通過(guò)人工配置上面的兩個(gè)Bean<mvc:annotation-driven,就可以給interceptors性注入器了13、如何實(shí)現(xiàn)全局的異常處springMVCXml<!--總錯(cuò)誤處理 <property<property<property這里主要的類是SimpleMapExceptionResolver類,和他的父類 HandlerExceptionResolver類。HandlerExceptionResolver接口,寫(xiě)一個(gè)自己的異常處理程序。spring通過(guò)SimpleMapExceptionResolver我們可以將不同的異常映射到不同的jsp頁(yè)面(通exceptionMaps屬性的配置拋出的異常在exceptionMaps中沒(méi)有對(duì)應(yīng)的映射,則Spring將用此默認(rèn)配置顯示異常信息。注意這里配置的異常顯示界面均僅包括主文件名,至于文件路徑和后綴已經(jīng)在viewResolver顯示錯(cuò)誤的jsp頁(yè)面:Html<%@pagelanguage="java"contentType="text/html;charset=GBK"<%@page <metahttp-equiv="Content-Type"content="text/html;<h1>出錯(cuò)了Exceptione=(Exception)request.getAttribute("exception");
14、如何把全局異常記錄到日志中定名。我是在SimpleMapExceptionResolver類父類HandlerExceptionResolver類中找到這個(gè)屬warnLogCategory不為空,spring就會(huì)使用apachemons.logging.Logwarn值:“org.springframework.web.servlethandler.SimpleMapExceptionResolver”,是“SimpleMapExceptionResolver類的全限定名。這個(gè)值不是隨便寫(xiě)的。因?yàn)槲以趌og4j的配置文件中warn的日志一定會(huì)被記錄,即使log4j的根日志級(jí)別是ERROR。15、如何給springMVC中的ActionJUnit單元測(cè)試springMVCactionaction寫(xiě)單元測(cè)試的,再在不同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測(cè)試actionpublicclassJUnitActionBaseprivatestaticHandlerMaphandlerMap;privatestaticHandlerAdapterhandlerAdapter;*springMVC配置文publicstaticvoidsetUp()if(handlerMap==null)String[]configs={"file:src/springConfig/springMVCxml"};XmlWebApplicationContextcontext=newXmlWebApplicationContext();MockServletContextmsc=newMockServletContext(); contextrefresh();handlerMap=(HandlerMap)context }}request對(duì)象請(qǐng)求的*@param@param@throwspublicModelAndViewexcuteAction(HttpServletRequestrequest,HttpServletResponseresponse)throwsException{HandlerExecutionChainchain=handlerMap.getHandler(request);finalModelAndViewmodel=handlerAdapter.handle(request,response,returnmodel;}}這是個(gè)JUnit測(cè)試類,我們可以newRequest對(duì)象,來(lái)參與測(cè)試,太方便了。給request指定的URL,Action了。Java importorg.junit.Assert;importorg.
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 云南省昆明市盤(pán)龍區(qū)2024-2025學(xué)年三年級(jí)數(shù)學(xué)第二學(xué)期期末質(zhì)量檢測(cè)試題含解析
- 田陽(yáng)縣2025年小升初總復(fù)習(xí)數(shù)學(xué)測(cè)試題含解析
- 2025租房合同應(yīng)該注意的事情 資料
- 2025版標(biāo)準(zhǔn)貿(mào)易合同模板
- 2025裝卸設(shè)備維護(hù)保養(yǎng)承包合同范文
- 2025品牌連鎖店合同模板
- 2025年普法知識(shí)競(jìng)賽題庫(kù)及答案(共60題)
- 2025標(biāo)準(zhǔn)物業(yè)管理服務(wù)合同
- 2025年高考?xì)v史概括題解題策略
- 2025智能家居電器安裝工程合同范本
- 小學(xué)民族團(tuán)結(jié)工作計(jì)劃
- 2024年永康市第一人民醫(yī)院高層次衛(wèi)技人才招聘筆試歷年參考題庫(kù)頻考點(diǎn)附帶答案
- 2025年重慶市建筑安全員《A證》考試題庫(kù)及答案
- 國(guó)家安全教育大學(xué)生讀本教案第六章 堅(jiān)持以經(jīng)濟(jì)安全為基礎(chǔ)
- 2025年甘肅農(nóng)墾集團(tuán)招聘筆試參考題庫(kù)含答案解析
- 2024年01月湖南2024岳陽(yáng)市農(nóng)商銀行系統(tǒng)招考員工筆試歷年參考題庫(kù)附帶答案詳解
- 尿酸高的中醫(yī)治療
- 弘揚(yáng)法治精神構(gòu)建和諧校園
- 《制冷劑基本常識(shí)》課件
- 華中農(nóng)業(yè)大學(xué)《物聯(lián)網(wǎng)工程》2022-2023學(xué)年第一學(xué)期期末試卷
- 研發(fā)物料管理制度流程
評(píng)論
0/150
提交評(píng)論