




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
SpringMVC背景介Spring框架提供了構(gòu)建Web應(yīng)用程序的全功能MVC模塊。使用Spring可插入的MVCSpringWebStrutsWeb框架。通Spring(JSP)技術(shù)、Velocity、Tiles、iTextPOI。SpringMVC框架并不知道使用的視圖,所JSP技術(shù)。SpringMVC分離了控制器、模型對(duì)象、分派器以及處理開發(fā)效率上,基本正好相反。值得強(qiáng)調(diào)的是,springmvcstruts2Spring3MVC1、Spring3MVCStruts2,Struts2用不上的多余功2、Spring3MVC很容易就可以寫出性能優(yōu)秀的程序,Struts2要處處才可以寫出性能優(yōu)秀的程序(MVC部分)環(huán)境搭建第一步:導(dǎo)入spring/libs/jar包第二步:配置請(qǐng)求分發(fā)器DispatcherServlet>>第三步:在classpath下建立一個(gè)spring- 配置文<?xml<?xmlversion="1.0"encoding="UTF-<beans""""<ponent-scanbase-第四步:導(dǎo)入日志環(huán)境 ,并添加perties配置文##LicensedtotheApacheSoftwareFoundation(ASF)underoneor#contributorlicenseagreements.SeetheNOTICEfiledistributed#thisworkforadditionalinformationregardingcopyright#TheASFlicensesthisfiletoYouundertheApacheLicense,Version#(the"License");youmaynotusethisfileexceptincompliance#theLicense.YoumayobtainacopyoftheLicense##Unlessrequiredbyapplicablelaworagreedtoinwriting,software#distributedundertheLicenseisdistributedonan"ASIS"BASIS,#WITHOUTWARRANTIESORCONDITIONSOFANYKIND,eitherexpress#SeetheLicenseforthespecificlanguage erningpermissionsand#limitationsundertheLicense.#Anexamplelog4jconfigurationfilethatoutputsto#outputinformationconsistsofrelativetime,loglevel,#name,loggername,nesteddiagnosticcontextandthemessagein##Forthegeneralsyntaxofpropertybasedconfigurationfilessee#documenationoflog4j.rootLogger=DEBUG,#A1issettobeaConsoleAppenderwhichoutputstoSystem.out.#A1usesPatternLayout.##Theconversionpatternusesformatspecifiers.Youmightwant#changethepatternanwatchtheoutputformatchange.log4j.appender.A1.layout.ConversionPattern=%-4r%-5p[%t]%37c%3x-#Inthisexample,wearenotreallyinterestedinINNERloopor#messages.Seetheeffectsmentingandchangingthe#thefollowing#.apache.log4j.examples.SortAlgo.INNER=WARN#.apache.log4j.examples.SortAlgo.SWAP=WARN第五步:編寫一個(gè) 發(fā)送請(qǐng)求項(xiàng)目名 publicclassDemoController public return}}SpringMVC3.0深DispatchServlet內(nèi)部,通過HandleMap檢查這個(gè)url有沒有對(duì)應(yīng)的Controller。如果Controller。ControllerController執(zhí)行完畢后,如果返回字符串,則ViewResolver將字符串轉(zhuǎn)化成相應(yīng)的視圖ModelAndView對(duì)象,該對(duì)象本身就包含了視圖對(duì)象信息。討論HandlerMap起到了什么作用?? 如果你學(xué)過struts2是否記得有一ActionMap呢spring3.0jarspringaopspringasm字節(jié)碼生IOCIOCspring的springwebmvc<filter-name>CharacterEncodingFilter</filter-<init-<param-name>encoding</param-<param-value>utf-8</param-</init-<filter-><filter-name>CharacterEncodingFilter</filter-<url-pattern>/*</url-</filter->@ControllerStruts1一樣,SpringControllerSingleton的。這就意味著會(huì)被多個(gè)請(qǐng)求線程共spring3.0中,通過@controllerclasscontroller ponent-scanbase-packagepackageimportimportimport;importpublicclassUserControllerprivateUserServicepublicStringreg(Stringuname) return}publicUserServicegetUserService()return}publicvoidsetUserService(UserServiceuserService)this.userService=}}publicStringreg5(@RequestParam("name")Stringmap)return}publicStringreg4(ModelMapmap){ map.addAttribute("u","uuuu");//將u放入request作用域中,這樣return}} publicclassUserController這個(gè)注解可以跟@SessionAttributesModelMap中屬性的值通packageimportimportimportimportorg.springframework.web.bind.annotation.ModelAttribute;importorg.springframework.web.bind.annotation.RequestMap importorg.springframework.web.bind.annotation.SessionAttributes; publicclassUserController publicStringreg4(ModelMapmap) return} publicStringreg5(@ModelAttribute("u")Stringuname,ModelMapmap){ return}}ControllerController}returnpublicStringreg4(ModelMapmap)packagepackageimportimportimportimportimportimport;publicclassUserControllerpublicStringreg4(ModelMapmap)returnreturn"forward:user.do?method=reg5"return"redirect:user.do?method=reg5";//return";//}publicStringreg5(Stringuname,ModelMapmap)return}}}p:prefix="/WEB-INF/jsp/"<propertyname="viewClass"value="org.springframework.web.servlet.view.JstlView"/>request對(duì)象、sessionpublicclassUserControllerpublicStringreg2(Stringuname,HttpServletRequestreq,ModelMapreq.setAttribute("a","aa");req.getSession().setAttribute("b","bb");return}}}map的實(shí)現(xiàn),可以在其中存放屬性,作用域同request。下面這個(gè)示例,我們可以在packagepackageimportimportimport;;publicclassUserControllerextendsMultiActionControllerpublicStringreg(Stringuname,ModelMapmap){map.put("a","aaa");return}}<%@<%@pagelanguage="java"import="java.util.*"<%@taglibprefix="c"/jsp/jstl/core"<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01<c:outModelAndViewModelAndViewModel代表模型,View代表視圖。即,這個(gè)類把要顯示的數(shù)據(jù)到了Model屬性中,要跳轉(zhuǎn)的視圖信息到了view屬性。我們看一下ModelAndView的部分源碼,即可知其中關(guān)系:publicpublicclassModelAndView/**ViewinstanceorviewnameStringprivateObject/**ModelMapprivateModelMap*Indicateswhetherornotthisinstancehasbeenclearedwithacallto{@link#clear()}.privatebooleancleared=Defaultconstructorforbean-styleusage:populatingpropertiesinsteadofpassinginconstructor@see@seepublicModelAndView()}ConvenientconstructorwhenthereisnomodeldatatoCanalsobeusedinconjunction@paramviewNamenameoftheViewtorender,tobebytheDispatcherServlet's@seepublicModelAndView(StringviewName)this.view=}ConvenientconstructorwhenthereisnomodeldatatoCanalsobeusedinconjunction@param@paramviewViewobjectto@seepublicModelAndView(Viewview)this.view=}CreatesnewModelAndViewgivenaviewnameanda@paramviewNamenameoftheViewtorender,tobebytheDispatcherServlet's@parammodelMapofmodelnames(Strings)tomodel(Objects).Modelentriesmaynotbe<code>null</code>,modelMapmaybe<code>null</code>ifthereisnomodelpublicModelAndView(StringviewName,Map<String,?>model)this.view=if(model!=null){}}*CreatesnewModelAndViewgivenaViewobjectanda*<emphasis>Note:dmodeldataiscopiedinto*storageofthisclass.Youshouldnotconsiderto Mapaftersupplyingittothis@paramviewViewobjectto@parammodelMapofmodelnames(Strings)tomodel(Objects).Modelentriesmaynotbe<code>null</code>,modelMapmaybe<code>null</code>ifthereisnomodelpublicModelAndView(Viewview,Map<String,?>model)this.view=if(model!=null){}}Convenientconstructortotakeasinglemodel@paramviewNamenameoftheViewtorender,tobebytheDispatcherServlet's@parammodelNamenameofthesingleentryinthe@parammodelObjectthesinglemodelpublicModelAndView(StringviewName,StringmodelName,ObjectmodelObject){this.view=viewName;addObject(modelName,modelObject);}Convenientconstructortotakeasinglemodel@paramviewViewobjectto@parammodelNamenameofthesingleentryinthe@parammodelObjectthesinglemodelpublicModelAndView(Viewview,StringmodelName,ObjectmodelObject){this.view=view;addObject(modelName,modelObject);}SetaviewnameforthisModelAndView,toberesolvedDispatcherServletviaaViewResolver.Willoverridepre-existingviewnameorpublicvoidsetViewName(StringviewName)this.view=}ReturntheviewnametoberesolvedbytheviaaViewResolver,or<code>null</code>ifweareusingaViewobject.publicpublicStringgetViewName()return(this.viewinstanceofString?this.view:}SetaViewobjectforthisModelAndView.Willoverridepre-existingviewnameorpublicvoidsetView(Viewview)this.view=}ReturntheViewobject,or<code>null</code>ifweareusingaviewnametoberesolvedbytheDispatcherServletviaapublicViewgetView()return(this.viewinstanceofView?(View)this.view}Indicatewhetherornotthis<code>ModelAndView</code>hasaview,eitherasaviewnameorasadirect{@linkView}publicbooleanhasView()return(this.view!=}Returnwhetherweuseaviewreference,iftheviewhasbeenspecifiedviaanametoberesolvedbytheDispatcherServletviaapublicbooleanisReference()return(this.viewinstanceof}Returnthemodelmap.MayreturnCalledbyDispatcherServletforevaluationoftheprotectedMap<String,Object>getModelInternal()return}Returntheunderlying<code>ModelMap</code>instance(never<code>null</code>).publicModelMapgetModelMap()if(this.model==null)thisthis.model=new}return}Returnthemodelmap.NeverreturnsTobecalledbyapplicationcodeformodifyingthepublicMap<String,Object>getModel()return}Addanattributetothe@paramattributeNamenameoftheobjecttoaddtothe@paramattributeValueobjecttoaddtothemodel@seeModelMap#addAttribute(String,@seepublicModelAndViewaddObject(StringattributeName,ObjectattributeValue){return}Addanattributetothemodelusingparametername@paramattributeValuetheobjecttoaddtothemodel(never<code>null</code>)@see@seepublicModelAndViewaddObject(ObjectattributeValue){return}AddallattributescontainedintheprovidedMaptothe@parammodelMapaMapofattributeName->attributeValue@see@seepublicModelAndViewaddAllObjects(Map<String,?>modelMap){return}ClearClearthestateofthisModelAndViewTheobjectwillbeempty<p>CanbeusedtosuppressrenderingofagivenModelAndViewobjectinthe<code>postHandle</code>methodofa@see@seepublicvoidclear(){this.view=null;this.model=null;this.cleared=true;}ReturnwhetherthisModelAndViewobjectisi.e.whetheritdoesnotholdanyviewanddoesnotcontainamodel.publicbooleanisEmpty()return(this.view==null&&}ReturnwhetherthisModelAndViewobjectisemptyasaresultofacallto{@link#clear}i.e.whetheritdoesnotholdanyviewanddoescontaina<p>Returns<code>false</code>ifanyadditionalstatewasaddedtotheinstance<strong>after</strong>thecallto{@link@seepublicbooleanwasCleared()return(this.cleared&&}ReturndiagnosticinformationaboutthismodelandpublicStringtoString()StringBuildersb=newStringBuilder("ModelAndView:if(isReference())sb.append("referencetoviewwithname}elsesb.append("materializedViewis}sb.append(";modelisreturn}}packageimportimport import;import publicclassUserControllerextendsMultiActionController publicModelAndViewreg(StringModelAndViewmv=new mv.setView(newUseru=newUser(); 寫的類名”mv.addObject("a",return}}<%@pagelanguage="java"import="java.util.*"<%@taglibprefix="c" /jsp/jstl/core"<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01spring3.0mvcspring使用 mons下得上傳組件,因此,我們需要引入兩個(gè)jar包<beanResolver"<propertyname="defaultEncodingvalue="gbk"(ISO-8859-1)--<propertyname="maxInMemorySizevalue="10240"最大內(nèi)存大小(10240)--><propertyname="uploadTempDirvalue="/upload/"上傳后的名(WebUtils#TEMP_DIR_CONTEXT_ATTRIBUTE)--><propertyname="maxUploadSizevalue="-1"最大文件大小,-1為無限止(-1)--><%@<%@pagelanguage="java"import="java.util.*"<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01<formaction="upload.do"method="post"enctype="multipart/form-<inputtype="text"name="name"<inputtype="file"name="file"<inputtype="submit"packagepackageimportimportimportimportimportorg.springframework.web.bind.annotation.RequestMap importorg.springframework.web.bind.annotation.RequestMethod;importorg.springframework.web.bind.annotation.RequestParam;importimportpublicvoidsetServletContext(ServletContextcontext){ =context;} (value="/upload.do",method=if(!file.isEmpty())Stringpath= StringfileName=StringfileType=fileName.substring(fileName.lastIndexOf("."));Filefile2newFile(path,newDate().getTimefileType新建一個(gè)文件try{);//}catch(Exceptione)}returnreturn}}}upload_ok.jsp<%@<%@pagelanguage="java"import="java.util.*"<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01<%@<%@pagelanguage="java"import="java.util.*"<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01發(fā)布項(xiàng)目,運(yùn)試: ajax請(qǐng) in;charset=utf-public@ResponseBodyfindById(IntegerUseruser=new//這里可以使用gsonreturn"{id:1,name:'小嘎return}json格式的數(shù)據(jù)<script<scriptvarvarfunctiontest(){}}returnnull; public testAdd(@RequestBodyUser<buttononclick="test();"}自動(dòng)轉(zhuǎn)換json為響應(yīng)內(nèi)容checkName(StringSpringSpring<mvc:annotation-driven></mvc:annotation-項(xiàng)目下要加入jacksonjarjackson-all-}return// po--Useruser=newSpring中的定義spring器兩種基本方注意:參數(shù)中的Objecthandler是下一個(gè)器 (HttpServletRequestrequest,HttpServletResponseresponse,Objecthandler)throwsExceptiontrueaction。 (HttpServletRequestrequest,HttpServletResponseresponse,Objecthandler,ModelAndViewmodelAndView)throwsExceptionpublicvoid pletion(HttpServletRequestrequest,HttpServletResponseresponse,Objecthandler,Exceptionex)throwsExceptionex是否為空,來進(jìn)行相spring框架從而到了這個(gè)方法中。 packagepackageimportimportimportimportimportpublic
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 文具安全教案課件
- 印刷業(yè)互聯(lián)網(wǎng)+與融合發(fā)展考核試卷
- 冷藏車運(yùn)輸企業(yè)風(fēng)險(xiǎn)管理與內(nèi)部控制系統(tǒng)考核試卷
- 天然氣藏動(dòng)態(tài)模擬與預(yù)測(cè)考核試卷
- 影視錄放設(shè)備顯示技術(shù)考核試卷
- 文化藝術(shù)與城市品牌建設(shè)考核試卷
- 木片干燥技術(shù)與木材應(yīng)力釋放考核試卷
- 健身器材行業(yè)企業(yè)文化建設(shè)與品牌形象提升考核試卷
- 保險(xiǎn)業(yè)與新能源保險(xiǎn)市場(chǎng)的機(jī)遇與挑戰(zhàn)應(yīng)對(duì)策略案例分析考核試卷
- 制糖業(yè)的可持續(xù)發(fā)展評(píng)估考核試卷
- 《多樣的中國民間美術(shù)》課件 2024-2025學(xué)年人美版(2024)初中美術(shù)七年級(jí)下冊(cè)
- 家政講師培訓(xùn)課件
- 2025年中國春節(jié)檔市場(chǎng)報(bào)告-拓普數(shù)據(jù)-
- 2025年山西省太原市衛(wèi)健委直屬單位招聘522人歷年高頻重點(diǎn)模擬試卷提升(共500題附帶答案詳解)
- GB/T 44679-2024叉車禁用與報(bào)廢技術(shù)規(guī)范
- GB∕T 28610-2020 甲基乙烯基硅橡膠
- 4.昆蟲備忘錄 課件(共15張PPT)
- DB37∕T 5191-2021 高延性混凝土加固技術(shù)規(guī)程
- 軟壓光機(jī)計(jì)算說明
- 森林防火安全責(zé)任書(施工隊(duì)用)
- 水庫應(yīng)急搶險(xiǎn)與典型案例分析
評(píng)論
0/150
提交評(píng)論