java課件是非常優(yōu)秀的框架由其在3 0發(fā)布后_第1頁
java課件是非常優(yōu)秀的框架由其在3 0發(fā)布后_第2頁
java課件是非常優(yōu)秀的框架由其在3 0發(fā)布后_第3頁
java課件是非常優(yōu)秀的框架由其在3 0發(fā)布后_第4頁
java課件是非常優(yōu)秀的框架由其在3 0發(fā)布后_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

SpringMVC4.0–1、前SpringMVC是非常優(yōu)秀的MVC框架由其是在3.0版本發(fā)布后現(xiàn)在有越來越多的團隊選擇了SpringMVC了。SpringMVC結構簡單,應了那句話簡單就是美,而且他強大不失靈活,性能也很優(yōu)秀。的是采用了值棧OGNL表達式struts2庫等會導致應用的性能下降Struts2的多層器多實例actionSpringMVC1、SpringMVCStruts2,Struts22、SpringMVC很容易就可以寫出性能優(yōu)秀的程序,Struts2要處處才可以寫出性能優(yōu)秀的程3、SpringMVC的靈活是你無法想像的,Spring的擴展性有口皆碑,Spring3MVC當然也不會,不會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ā)到目標Controller(我們寫的Action)來處理。“某某規(guī)則”:是根據(jù)你使用了哪個HandlerMap接口的實現(xiàn)類的不同而不同。<web-<servlet-map<url-pattern>*form</url-<url-pattern>*form</url-pattern>會*form結尾的請求名字來區(qū)分的。每一個DispatcherServlet有自己的WebApplicationContext上下文對象。同時保存的ServletContext中和Request對象中,關于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結尾。不會影響靜態(tài)文件3、/,例如:/user/add,弊端:對jpg,js,css靜態(tài)文件的也被不能正常顯示。后面有解決辦法4、/*,可以走到Action中,但轉發(fā)到jsp時再次被,不能到jsp7、雙親上下文的說如果你使用了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名稱當一個Request對象產(chǎn)生時,會把這個WebApplicationContext上下文保存在Request對象中,key是DispatcherServlet.class.getName()+ SpringApplicationContext實例可以被限制在不同的作用域(scope)webMVCDispatcherServletWebApplicationContextcontextWebApplicationContext的所有beanservlet實例自己使用的屬性??偨Y:不使用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ù)擴展名來選擇視圖解釋類的邏輯<!--器--<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)更加詳細的配置,比用mvc:更好一些,這要看個人的--><!--<beanap"/>--<!--<bean

/>--由于寫了/以后,對靜態(tài)資源導入不成功,所以可以使用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組件 泛指組件,當不好歸類時.@RequestMap("/")請求映射@Resource用于注入,j2ee)默認按名稱裝配,@Resource(name="beanName")@Autowired用于注入,(sr提供的)默認按類型裝配@Transactional(rollbackFor={Exception.class}) 設定bean<mvc:annotation-driven是一種簡寫形式,完全可以手動配置替代這種簡寫形式,簡寫形式可以讓初學都快速應用默認配置方案。<mvc:annotation-driven/>會自動RequestMapHandlerMap與RequestMapHandlerAdapter兩個bean,是springMVC為@Controllers分發(fā)請求所必須的。并提供了:數(shù)據(jù)綁定支持,@NumberFormatannotation支持,@DateTimeFormat支持,@Valid后面,我們處理響應ajax請求時,就使用到了對json<mvc:interceptors/>是一種簡寫形式。通過看前面的大圖,知道,我們可以配置多個HandlerMap<mvc:interceptors/>會為每一個HandlerMap,注入一個器。其實我們也可以手動配置為每個HandlerMap注入一個器<mvc:default-servlet-handler/>Servlet<mvcresourcesmap="/images/**"location="/images/"cache- "/>匹配URLURL被當做靜態(tài)資源,由Spring讀出到內存中再響應http9、如何到靜態(tài)的文件,如如何你的DispatcherServlet*.do這樣的URL,就不存在不到靜態(tài)資源的問題。如果你目的:可以正常靜態(tài)文件,不要找不到靜態(tài)文件報404。方案一:激活Tomcat的defaultServlet來處理靜<servlet-map<servlet-map<servlet-map,要寫在DispatcherServlet的前面,讓defaultServlet先,這個就不會進入Spring了性能是最好的,Tomcat,JettyJBossandGlassFishServletdefault"AppEngine默認Servlet的名字--"_ah_default"Resin默認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轉到ResourceHttpRequestHandler處理并返回,所以就支持classpath ,jar包內靜態(tài)資源的.另外需要注意的一點是,不要對SimpleUrlHandlerMap設置defaultHandler.因為對staticuridefaultHandler就是否則無法處理staticresources如到SimpleUrlHandlerMap上<property<property<entry<property對所有css<entry

方案<mvc:default-servlet-Xml會把"/**"url,到SimpleUrlHandlerMap的urlMap中,把對靜態(tài)資源的由HandlerMap轉到org.springframework.web.servletresource.DefaultServletHttpRequestHandler處理并返回.DefaultServletHttpRequestHandlerServlet補充說明:多個HandlerMap的執(zhí)行順序問題DefaultAnnotationHandlerMap的order屬性值是<mvcresources/>自動的SimpleUrlHandlerMap的order屬性值是<mvc:default-servlet-handler/>自動的SimpleUrlHandlerMap的order屬性值是spring會先執(zhí)行order值比較小的。當一個a.jpg圖片文件時,先通過DefaultAnnotationHandlerMap來找處理器,一定是找不到的,我們沒有叫a.jpg的Action。再按order值升序找,由于最后一個SimpleUrlHandlerMap是匹配"/**"的,所以一定會匹配上,再響應。一個,還要走層層匹配。真不知性能如何?改天做一下壓力測試,與Apache。最后再說明一下,如何你的DispatcherServlet*.do這樣的URL,就不存上述問題了。10、請求如何映射到具體的Action中的方方案一:基于xml配置映射,可以利用SimpleUrlHandlerMap、BeanNameUrlHandlerMap進行Xmlap"/>以上都可以注入interceptors,實現(xià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中,可以進行編碼、安全控制等處理;在postHandleModelAndView; pletion中,可以根據(jù)ex是否為null判斷是否發(fā)生了異常,進行日志記錄。參數(shù)中的Objecthandler是下一個器。12、如何使用器自定義一個器,要實現(xiàn)HandlerInterceptor接口JavapublicclassMyInteceptorimplementsHandlerInterceptor}SpringMVC并沒有總的器,不能對所有的請求進行前后SpringMVC的器是屬于HandlerMap級別的可以有多個HandlerMap每個可以有自己的器當一個請求按Order值從小到大,順序執(zhí)行HandlerMap接口的實現(xiàn)類時,哪一個先有返回,那就可以結束了,后面的HandlerMap就不走了,本道工序就完成了。就轉到下一道工序了。器會在什么時候執(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,所以就沒有機會再給它注入interceptors屬性,就無法指定攔當然我們可以通過人工配置上面的兩個Bean<mvc:annotation-driven,就可以給interceptors性注入器了13、如何實現(xiàn)全局的異常處springMVCXml<!--總錯誤處理 <property<property<property這里主要的類是SimpleMapExceptionResolver類,和他的父類 HandlerExceptionResolver類。HandlerExceptionResolver接口,寫一個自己的異常處理程序。spring通過SimpleMapExceptionResolver我們可以將不同的異常映射到不同的jsp頁面(通exceptionMaps屬性的配置拋出的異常在exceptionMaps中沒有對應的映射,則Spring將用此默認配置顯示異常信息。注意這里配置的異常顯示界面均僅包括主文件名,至于文件路徑和后綴已經(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)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論