SpringMVC筆記2解析_第1頁
SpringMVC筆記2解析_第2頁
已閱讀5頁,還剩30頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、Springmv(高級知識復(fù)習(xí):SpringmvCSpringmvC 匡架:DispatcherServlet前端控制器:接受request,返回responseHandlerMapping處理器映射器:根據(jù)url查找Handler(可以通過xml配置,注解方式)HandlerAdapter處理器適配器:根據(jù)特定規(guī)則去執(zhí)行Handler,編寫Handler時需要按照HandlerAdapter的要求去編寫。Han dler處理器(后端控制器):需要程序員去編寫,常用注解開 發(fā)方式。Handler處理器執(zhí)行后結(jié)果是ModelAndView,具體開發(fā)時Handler返回方法值類型包括:ModelA

2、ndView、String(邏輯視圖名) 、void(通 過在Handler形參中添加request和response,類似原始servlet開發(fā) 方式:注意:可以通過制定response響應(yīng)的結(jié)果類型實現(xiàn)json數(shù)據(jù) 輸出。)View resolver視圖解析器: 根據(jù)邏輯視圖名生成真正的視圖 (在springmvc中使用View對象表示)View視圖:jsp頁面,僅是數(shù)據(jù)展示,沒有業(yè)務(wù)邏輯。注解開發(fā):使用注解方式的處理器映射器和適配器:在實際開發(fā)中,使用代替上邊處理器映 射器和適配器配置。controller注解必須要加,作用:標(biāo)識類是一個Handler處理器。requestMapping

3、注解必須要加,作用:1、對url和Handler的方法進(jìn)行映射。2、可以窄化請求映射,設(shè)置Handler的根路徑,url就是跟路 徑+子路勁請求方式。3、可以限制http請求的方法映射成功后,springmvc框架生成一個Handler對象,對象中只包 括一個映射成功的method。注解開發(fā)中參數(shù)綁定:將request請求過來的Key/value的數(shù)據(jù)(理解一個串),通過轉(zhuǎn) 換(參數(shù)綁定的一部分),將key/value串轉(zhuǎn)換成形參,將轉(zhuǎn)換后的結(jié) 果傳給形參(整個參數(shù)綁定過程。)Sprin gmvc所支持參數(shù)綁定:1、默認(rèn)支持很多類型:HttpServletRequest、response se

4、ssionmodel/modelMap(將模型數(shù)據(jù)填充到request域)2、支持簡單數(shù)據(jù)類型:整型、字符串、日期。只要保證request請求的參數(shù)名和形參名一致,自動綁定成功。如果request請求的參數(shù)名和形參名不一致,可以使用requestParam(指定request請求的參數(shù)名,requestParam加載形參的前邊。)3、支持pojo類型只要保證request請求的參數(shù)名和pojo中的屬性名一致,自 動將request請求參數(shù)設(shè)置到pojo屬性中。注意:形參中即有pojo類型又有簡單類型,參數(shù)綁定互不 影響。自定義參數(shù)綁定:日期類型綁定自定義:定義的Converterv源類型,目標(biāo)

5、類型接口實現(xiàn)類,比如:ConvertervString,Date示:將請求的日期數(shù)據(jù)串轉(zhuǎn)換成java中的日期類型。注意:要轉(zhuǎn)換的目標(biāo)類型一定要和接受的pojo中的屬性類型一致。將定義的Converter實現(xiàn)類注入到處理器適配器中。Springmvc和struts2的區(qū)別:Springmvc面向方法開發(fā)(更接近service接口的開發(fā)方式),struts2面向類開發(fā)。Springmvc可以單例開發(fā),struts2只能多例開發(fā)。1.課程安排上午:在商品查詢和商品修改功能案例驅(qū)動下進(jìn)行學(xué)習(xí):包裝類型pojo參數(shù)綁定(掌握)。集合類型的參數(shù)綁定:數(shù)組、list、map.商品修改添加校驗,學(xué)習(xí)sprin

6、gmvc提供校驗validation(使用的是hibernate校驗框架)數(shù)據(jù)回顯統(tǒng)一異常處理(掌握)下午:上傳圖片json數(shù)據(jù)交互RESTfu皮持?jǐn)r截器2.包 裝類型 pojo 參數(shù)綁定2.1 需求商品查詢controller方法中實現(xiàn)商品查詢條件傳入。2.2 實現(xiàn)方法第一種方法:在形參中添加HttpServletRequest參數(shù),通過request接受查詢條件參數(shù)。第二種方法:在形參中讓包裝類型的pojo接收查詢條件參數(shù)。 分析:頁面?zhèn)鲄⒌奶攸c:復(fù)雜,多樣性。條件包括:用戶賬號、商品 編號、訂單信息。 。 。 。如果將用戶賬號、商品編號、訂單信息等放在簡單pojo(屬性是簡單 類型)中,

7、pojo類屬性比較多,比較亂。建議使用包裝類型的pojo,pojo屬性是pojo。2.3頁面參數(shù)和 controller 方法形參定義頁面參數(shù):商品名稱:注意:itemsCustom和包裝pojo中的屬性一致即可。Controller方法形參:public ModelAndView queryItems(HttpServletRequest request, ItemsQueryVo itemsQueryVo) throwsExceptionpublic class ItemsQueryVo / /商品借息private Items items;/為了系袋可擴(kuò)展性,對原始生平的M進(jìn)牡 Jpri

8、vate ItemsCustom LtemsCustom;3. 集合類型綁定3.1 數(shù)組綁定3.1.1 需求商品批量刪除,用戶在頁面選擇多個商品,批量刪除3.1.2 表現(xiàn)層實現(xiàn)關(guān)鍵:將頁面選擇(多選)的商品id,傳到controller方法的形參, 方法形參使用數(shù)組接受頁面請求的多個的商品的id。controller方法定義:/批重刪除商品信息RequestMapping(/deletItems) public String dele七“七ems( In七E名頁面定義:iteui5=-,$itemsLi5t nvar=uitem_input typ=irchckboxR!n白 e“value=

9、r,$iteniid Sitem-name pricemt format Date value=w$item.createtimeupatt er n=iryyyy - MM- dd WH; w;55-7 item.detail Exceptionthrows傑改3.2 list 綁定3.2.1 需求通常在需要批量提交數(shù)據(jù)時,將提交的數(shù)據(jù)綁定到listvpoj o中,比如:成績錄入(錄入多門課成績,批量提交),本例子需求:批量商 品修改,在頁面輸入多個商品信息,將多個商品信息提交到controller方法中。3.2.2 表現(xiàn)層實現(xiàn)controller方法定義:1、進(jìn)入批量商品修改頁面(頁面樣式

10、參考商品列表實現(xiàn))2、批量修改商品提交使用List接收頁面提交的批量數(shù)據(jù),通過包裝pojo接收,在包裝pojo中定義list屬性public class ItemsQueryVo /商品信息private Items items j為了系統(tǒng)可擴(kuò)展性,對原貽生感的四進(jìn)行擴(kuò)展prixm七e ItEinsCus七om i七EIDSCUS七om;/批里商品信息private List itemsList;)7批葩改商品握交通過工七頤叫汕斶刪比里提冊兩吊信息*特兩品信息存他到itenisQueryVoitemsListlt.public StringeditltemsAllSubmit(rtemsQue

11、ryVo itemsQueryVoJthraws Exception!peturn success1;頁面定義:ttr斤性中的pojoeoff性名4. springmvc 校驗4.1 校驗理解項目中,通常使用較多的是前端的校驗,比如頁面中js校驗。對于安全要求較高點建議在服務(wù)端進(jìn)行校驗。服務(wù)端校驗:控制層controller:校驗頁面請求的參數(shù)的合法性。在服務(wù)端控制 層controller校驗,不區(qū)分客戶端類型(瀏覽器、手機客戶端、遠(yuǎn)程tdxinput ndme=JtdXlnipmt irianie=lL inptj七namc=,rvalu= cfmt : f-oraa七c valLAB= $

12、it皤-cro-ata-timo- 1detail /X/td調(diào)用)業(yè)務(wù)層servic(使用較多):主要校驗關(guān)鍵業(yè)務(wù)參數(shù),僅限于service接口中使用的參數(shù)。持久層dao: 般是不校驗的。4.2springmvc 校驗需求Springmvc使用hibernate的校驗框架validation(和hibernate沒有任何關(guān)系)校驗思路:頁面提交請求的參數(shù),請求到controller方法中,使用validation進(jìn)行校驗。如果校驗出錯,將錯誤信息展現(xiàn)到頁面上。具體需求:商品修改、添加校驗(校驗商品名稱長度,生成日期的非空校驗), 如果校驗出錯,在商品修改頁面顯示錯誤信息。4.3 環(huán)境準(zhǔn)備Hi

13、bernate 的校驗框架 validation 所需要的 jar 包hitn&te-validator-4. 3. D. Final, jir嚴(yán)i1.0. CH2. jar vd.i Jaticn-ipi-!. 0 0. GA j ar4.4 配置校驗器t-寸離按您便用的溺文件,在立件中碗校臉雷逞憶卻 嫻|祥指宦貝僻認(rèn)便用以世莎籍-約下的巾H曲七駒駅乩甲卯打廿吊 -校驗皚逞信艇蠱交伴- bean id= mes SGgeSowrce rclass= *porg. spriflg/raiateworhcontextstrppwt. ft&loadabLeWesourreflud

14、IeHessageSource柑(-OX件名一 property nemie =Hbas encesclassipath:Cu s t ot Va 1 i d a t i onMe s sages t猶交件備碼IS武一 A!-時資煉袁件內(nèi)吝緩存時聞 里拉訕、|1/ f ha Sin 卞4.5 校驗器注入到處理器適配器中4.6 在 pojo 中添加校驗規(guī)則在 ItemsCustom.java 中添加校驗規(guī)則:public class Items private Tn七eger id;/校驗容稱在1到了薦符中間/message是梶示校驗出錯顯示的信息(fflSize(mLn=ljmessage二i

15、tems * name * length.error0)private 5七ring name;private Float price;private String pic;豐空鮭Not Nul 1 ( message=items. creat etime. isNpll) private Date crea七EtimiE;validator=ffv/atidc?tor 4.7 CustomValidationMperties在 CustomValidationMperties 中配置校驗錯誤信息:戟忝加校驗錯誤提交信息itemsname -lengt

16、h ,error=請輸入1到宜符的商品名稱items * createtime* isNUlUK輸入商品的生廬日期4.8 捕獲校驗錯誤信息RequestMapping(r7editItemsSulbmit、public String editItemsSubiiiit(HttpServ let Request req ue s t j I n t ege r idValidated ItemsCustom itemsCustoimji. BindingResult bind in gResult) throws Exception 在需要校驗的pojo前邊添加Validated,在需要校驗的p

17、ojo后邊添 加Bin di ngResult接受校驗出錯信息。注意:Validated和Bin di ngResult是配對出現(xiàn),并且形參順序是固定 的(一前一后)4.9 在頁面中顯示校驗錯誤信息在 controller 中將錯誤信息傳到頁面即可。Req u es tMa pping /edit Item s Submit allErrors = bindingFtesult, get凸llErborsO ;for(ObjectError objettError:前出t呂誤信息Sy st em. ob t. pri n t lri (ob jec t E r ror. get Def sui

18、t Message ();/Fr錯誤信medel.addAttribute(allErTOPS, allError5)/岀轄垂新郢苗品 f 屢改貢面return匚七包皿乞/電ditTtemE;頁面顯示錯誤信息:J $ error * defaultMessage4.10 分組校驗4.10.1 需求在pojo中定義校驗規(guī)則,而pojo是被多個controller所共用,當(dāng)不同的controller方法對同一個pojo進(jìn)行校驗,但是每個controller方法 需要不同的校驗。解決辦法:定義多個校驗分組(其實就是一個java接口),分組中定義有哪些規(guī) 則每個controller方法使用不同的校驗分

19、組。4.10.2 校驗分組public interface ValidGroupl /接口中不需要定文任何方法,僅是對不同的校驗規(guī)則進(jìn)行分組/此分組只校驗商品名稱長度4.10.3 在校驗分組規(guī)則中添加分組校驗名稱在1到弓蔣蒔中同/message是提示校驗劌邏示的潔息/groups:此樓瞪爾于哪牛分弟,邑rou“可以走義豹吩組Size(nnin=lJDnax=30Jmessage=, items* name* lengths error11Jgroups=ValidGroupl - class)4.10.4 在 controller 方法使用指定分組的校驗商品肯懇辭栓交在講朋綁職加茵邊潭加彈他

20、Hdated.在爲(wèi)要帕的 6!虹沁物 BindingResult bindingResuItW 按釀出鉗信蟲 /sig:iVa 1 id a t ed-lflBi n d i ngRe su It bindingResult是配對岀 Bb # 且開維 U 貯:?E 崖的前一居)F “111】“仆心1打bp.p 1 y“55. 數(shù)據(jù)回顯5.1 什么數(shù)據(jù)回顯提交后,如果出現(xiàn)錯誤,將剛才提交的數(shù)據(jù)回顯到剛才的提交頁面。5.2 pojo 數(shù)據(jù)回顯方法1. springmvc默認(rèn)對pojo數(shù)據(jù)進(jìn)行回顯Pojo數(shù)據(jù)傳入controller方法后,springmvc自動將pojo數(shù)據(jù)放到request域中,

21、key等于pojo類型(首字母小寫)使用ModelAttribute指定回顯到頁面在request中的key2. ModelAttribute還可以將方法的返回值傳到頁面在商品查詢列表頁面,通過商品類型查詢商品信息。在controller中定義商品類型查詢方法,最終將商品類型傳到頁面/商品分類/IgnLtyp芳表示最終將方法返回值就在requ亡s t中的ky iSModelAtt ribute ( itemtypes)public N1ap gatltemTypes() Map itemTypes = new HashMap(); iteTypes.put(-101,數(shù)H);itemTypes

22、. put(11102,璋嬰);return itemTypes* 頁面上可以得到 itemsTypes 數(shù)據(jù)商品類型;_$itemtype . value /selec3.使用最簡單方法使用model,可以不用ModelAttribute/獲取校蛻蠟渓信息if (bindingResult.hasErrors 0) /輸出錯渓信息List allErrors = bindingResult.呂et:Al丄Errci芻();for (ObjectError object Error ; allErrors) /輸出錯誤信息System,out,println(obje匚七廣0”.冴tDe于);

23、/將錯慄信息悟到頁面model *addAttribute(allErrorsallErrors);/可以直接使用model將提交pg? jg回顯到頁面model. addAttribute(itemsT,titemsCustom);Il出錯垂新到商品僮改頁面return * items/edi七工七ems ;5.3 簡單類型數(shù)據(jù)回顯使用最簡單方法使用modelmodel.addAttribute(id, id);6. 異常處理6.1 異常處理思路系統(tǒng)中異常包括兩類:預(yù)期異常和運行時異常RuntimeException,前者通過捕獲異常從而獲取異常信息,后者主要通過規(guī)范代碼開發(fā)、測試通過手段減

24、少運行時異常的發(fā)生。系統(tǒng)的 dao、service、controller 出現(xiàn)都通過 throws Exception 向上拋出,最后由 springmvc 前端控制器交由異常處理器進(jìn)行異常處理,如下圖:客戶端Con troller00Servicedfl異常Dao請求.J異常Excepti onResolver異常處理器異常Sprin gmvcDispatcherServletSprinmvc提供全局異常處理器(一個系統(tǒng)只有一個異常處理器) 進(jìn)行 統(tǒng)一異常處理。6.2 自定義異常類對不同的異常類型定義異常類,繼承Exception不Iitle; Customtxception*Descrip

25、tion :針對預(yù)期的異常需宴在程序中犧出此類的異常/*Company: www.ltcast,com*author傳智-瑯青*date 2015-4-1411: 52: 92*version 10*/public cl$5 CustomException extends Exception /異當(dāng)信息public St ring messagepublic CustomException(String message)super(message); this.message = messagejpublic St ring getMessage() return message;public

26、 void setklessage(String message) this.message = messagej6.3 全局異常處理器思路:系統(tǒng)遇到異常,在程序中手動跑出,dao 拋給 service,service 拋給 controller,controller拋給前端控制器,前端控制器調(diào)用全局異常處理器。全局異常處理器處理思路:解析出異常類型如果該異常類型是系統(tǒng)自定義的異常,直接取出異常信息,在錯誤頁面顯示。如果該異常類型不是系統(tǒng)自定義的異常,構(gòu)造一個自定義的異常類型(信息為“未 知錯誤”)Springmvc 提供一個 HandlerException Resolver 接口publi

27、c class CustomExceptionResalver implements HandlerExceptionResolver overridepublic ModelAndView resolveExceptiQrt(HttpServletRequest request, HttpServletResponse responsejObject handlerj Exception ex) CustomException customException=null;if(ex instanceof CustomExceptionX customExeeption=(CustomExcep

28、tionelse customException=new CustomException(類曜);/指定錯誤佶息5tring message=customExcepticn getMessage()jModelAndView modelAndView=new ModelAndView();/將錯謀信息慢到頁而modelAndVi.ddCbject(messageN, messagG)/轉(zhuǎn)到帶誤更面model And View* setViewName ( error )return modelAndView;6.4 錯誤頁面 6.5 在 springmvc.xml中配置全局異常處理器!-全局異

29、當(dāng)處律器只要實現(xiàn)Handle rExcept ionResolver接口就是全局異常處理1器6.6 異常測試在 controller、service、dao 中任意一處需要手動跑出異常。如果是程序中手動拋出的異常,在錯誤頁面中顯示自定義的異常信息,常說明是一個運行時異常,在跑出頁面只顯示“未知錯誤”如果不是手動跑出異在商品修改的controller方法中跑出異常I /墮nutiipu丄丄LI巴RJtU豆丙額1A1且,殳U示丄U棗烈涼冃宦八,怕詞HA1且科彫釘沖疋9 public Stringedititems(Model model,(Request Pa ram (value二* idrt3

30、r equired = true ) Integer it ems_id) throws Exception /調(diào)用serviceig商品id査詢商品信息ItemsCustom itemsCustom = itemsService findltemsByld(items_id);判斷商品是晉為空,根據(jù)i出殳有査邨倆品幗出異當(dāng),提示用戶商品信息不存在iF (itemsCustom = null) th row new Cu stomExc ept ion(修改的商品信息不存在!);在service借口中跑出異常:Overid已public ItemsCustom findltemsById(In

31、teger id) throw* Exceptiun Items items = ltemsMapper.selectByPrimaryKey(id);|if (items=:null)電IIEW忤輕w總ption(世枚的陶品信見蘋存柱!如果與業(yè)務(wù)功能相關(guān)的異常,建議在service中拋出異常與業(yè)務(wù)功能沒有關(guān)系的異常,建議在controller中拋出。上邊的功能,建議在service中拋出異常7. 上傳圖片7.1 需求在修改商品的頁面,添加上傳商品圖片功能。7.2 springmvc中對多部件類型解析在頁面 form 中提交 enctype= multipart/form-data 的數(shù)據(jù)時,

32、需要 springmvc 對 multipart 類 型的數(shù)據(jù)進(jìn)行解析。在 springmvc.xml 中配置 multipart 類型解析器 !-文件上馬-f dm id=,rmu L tipartResoL verJclass= org. springfromeLork. web. muLtipart .commons .CommonsMuLtipartResoLveryS242SB07.3 加入上傳圖片的 jar上邊的解析內(nèi)部使用下邊的jar 包進(jìn)行圖片上傳Oi.cons- f i 1 eupl o* 1f2 jarcommons-1o一2. 4. jM-7.4 創(chuàng)建圖片虛擬目錄存儲圖片

33、通過圖形界面配置:也可以直接修改 tomcat 的配置在 conf/server.xml 文件,添加虛擬目錄:注意:在圖片虛擬目錄中,一定要講圖片目錄分級創(chuàng)建(提高 照日期(年、月、日)進(jìn)行分級創(chuàng)建。F*thI &ciren.t BaseHoduleI Auto Ihlcidl /pieF: & il 201ipr:!-112(10utjt* j.n5pwc_nyb ! jirkers Trperties Strtrs胡io 性能),一般我們米用按=0皐通hlbifkua4 tL* Yt UadulE on Ltds sETVEF.唐hula* l-fLo-ldailg 4ri

34、fthlAd.CaarelJThii t j StarchIicincnt ffewt- |7tnp虛池目錄對應(yīng)的物理目錄酬目錄7.5 上傳圖片代碼7.5.1 頁面 input type=name=7.5.2controller 方法修改:商品修改 controller 方法iRequestMapping( /editlt emsSubmit)public String editltemsSubmit(Model modeljHttpServletRequest request,Integer id,ModelAttribute(items1*) Validated(value =Multip

35、artFile k/接收商品囹片)throws Exception String ori.getOri 呂 inmlFiLwneEw);/tm片if(itms_pic!=null 盟riglndlFilena(ne!=null & originalFilname.lngthf )0)/存帕國片的擁誣胳徑String pic_path =HF : develppuplciClJteipp,hjf/m圖片習(xí)稀String neMFileName = UUID randonrUUID() + originalF ilsnani. substring (originaLFilenania. l

36、a&tlrF lie newF lie = nw File(pic_path + newFilehlame);f/將內(nèi)存中的數(shù)框?qū)懭腽Pit&ms_picJtrBrtsferTo(n&NFil&);F /珞新圄片名昭到it em sC us ton中it&fflsCustom .setPicfnewFismc)sValidGr8 json 數(shù)據(jù)交互8.1 為什么要進(jìn)行 json 數(shù)據(jù)交互Json 數(shù)據(jù)格式在接口調(diào)用中、html 頁面中較為常用,json 格式比較簡單,解析比較方便。比如:webservice 接口,傳輸 json 數(shù)據(jù)。8.2 sprin

37、gmvc 進(jìn)行 json 交互1、請求json,輸出json,要求請求的是json串,所以在前段頁面 中需要將請求的內(nèi)容轉(zhuǎn)成json,不太方便。2、請求key/value、輸出json,此方法較為常用。8.3 環(huán)境準(zhǔn)備8.3.1 加載 json 串的 jar 包Springmvc 中使用 jackson 的包進(jìn)行 json 轉(zhuǎn)換(requestBody 和responseBody 使用下邊的 包進(jìn)行 json轉(zhuǎn)換),如下:恫jacksocoreaElL 9. 11. jar -磯j ackzon-mapp&r-asl-l. 9. IL jar8 3 2 配置 json 轉(zhuǎn)換器在注解適配

38、器中加入messageCo nverters注意:如果使用 vmvc:annotation-driven /則不用定義上邊的內(nèi)容。8.4 json 交互測試8.4.1 輸入 json 串,輸出是 json 串841.1jsp頁面使用 jquery 的 ajax 提交 json 串,對輸出的 json 結(jié)果進(jìn)行解析。請求json,輸出是jsonfunction requestJson()$.ajax(type:posturl:r$pageConext.request.contextPath /requestJson.action13con七電門七Type:application/jsonjcha

39、rsetutf-8/數(shù)據(jù)格武是j son串*商品信息dataifnane*:手機”3price-:999success : f unction (data) :咀回j mon結(jié)畀alert(data); con troller諳求嚴(yán)卑(兩品信息h輸出;U癒X商品信息)/Req uestB ody將諳求的商品信息的j急逐孵轉(zhuǎn)成itemsCust口曬勺釁/Re sponse Body將it emsCustCJIT轎咸j.寶P叮輸出Req ue stMa ppi ng (11/ request Json)public. ResponsBody ItemsCus七口皿request J

40、son (RquestBody工七七oin i t emsCust om)/ResponseBodyitemgCiJS七crm成j號q口輸屮|return itemsCus七cini;841.3測試結(jié)果8.4.2 輸入 key/value,輸出是 json 串842.1 jsp頁面使用 jquery 的 ajax 提交 key/value 串,對輸出的 json 結(jié)果進(jìn)行解析。/ifjKkey/valuef輸出是jwon function response!son()$-ajax(type:post*url:1$pageContext. request一contextPaizh /respon

41、seZJson - action11/tlRlkey/valueiafflacDntentTypei ED臧USfc Ikey/value /conizEirtTypE:1application/json; charset=utf-8 f臼日七日:手機艮pice=999)success:function(data)/返回j呂on結(jié)果alert(data)j); con trolleri青求dy/glu,jdijsonRequestMapping(/response!son)publ iu j)ftespo nmeBody ItemsCustom response son (I t

42、emsCustom itemsCustom)/RespQnseBodyiternsCustonjLSontti return itemsCustom;842.3測試Refe renhttp:/lo ca Ihost:g rnvc_nrybati312 0間s o nTest.甬pPrsgmai no-cacheContent-Type: application/x*wv;omvurlencad&d: charset=llTF*fiContent-Length: 21Connection:k&ep-aliveCacheXontrok no-cacheAccept-Langjage

43、: 2h-cn,zti;q=0.B,en-us;q=0.5,en;q=G.3Accept-Encodmg: gzip, deflateAccept:*/*岌送CookieJSESSIONID: 6066142CCA6D803GDBE17755A11F4F6佶求主體name=手坨iprice=9SSr響應(yīng)頭A113msTransfer-Encodings chunkedSe rve r:Apach e-Coyote/1.1Date:Tue, 14 Apr 2015 03:02:31 GMTC ontenMype:自pplicatio n/json; ch自rset=UTF9 RESTfu 皮持9

44、.1 什么是 RESTfulRESTful 架構(gòu),就是目前最流行的一種互聯(lián)網(wǎng)軟件架構(gòu)。他結(jié)構(gòu)清晰,符合標(biāo)準(zhǔn)、易于理解、擴(kuò)展方便,所以正得到越來越多網(wǎng)站的采用。RESTful (即 Representational State Transfer 的縮寫)其實是一個開發(fā)理念,是對http 的很好的詮釋。1、對 url 進(jìn)行規(guī)范,寫 RESTful 格式的 url非 REST 的 url: http:/./queryltems.action?id=001 &type=OOUser-AgentAijnsX-Requested-With: XMLHtipRequestMozilla/5.0 (W

45、indows NT 61; WOWfi4; rv:34 0)Gecko/2C1001C1 Firefox/34.0Tr:nul.Fame了手機Tprioe:999Q pic:REST 的 url 風(fēng)格:http:/./itmes/ 001 特點:url 簡潔,將參數(shù)通過 url 傳到服務(wù)器。2、 http 的方法規(guī)范不管是刪除、添加、更新,使用的url 是一致的,如果進(jìn)行刪除,需要設(shè)置http 的方法為delete,同理添加。3、 對 http 的 contentType 規(guī)范請求時指定 contentType,要 json 數(shù)據(jù),設(shè)置成 json 格式的 type9.2 REST 的例子9.

46、2.1 需求查詢商品信息,返回 json 數(shù)據(jù)。9.2.2 controller定義方法,進(jìn)行 url 映射使用 REST 風(fēng)格的 url,將查詢商品信息的 id 傳入 controller輸出 json 使用ResponseBody 將 java 對象輸出 json。/査詢鬲品信自/辻酊理讓叩口呂里邊的id表肅占誼苻.通迥審Pmth也皿命“痢站苻中的珈/如杲占愴符中的窯稱和形橙啟一致,柱PathVariabl亡可以革托寶容樹Requ estMapping (* / items View/)public ResponseBody ItemsCustom itemsView(9PatHVaria

47、blefid11) Integer idjthrows Exception/iSH servic eEEiSS品信息ItemsCustGRi itemsCustom = iternsService*findltemsIByld(id);return itemsCtistom;RequestMapping(value= / itemsView/id) : XXX占位符,請求的 URL 可以是“ /viewItems/1 ”或/viewItems/2 ”,通過在方法中使用PathVariable 獲取XXX中的XXX變量。PathVariable 用于將請求 UR 中的模板變量映射到功能處理方法的

48、參數(shù)上。如果 RequestMapping 中表示為/ itemsView/id , id 和形參名稱一致,PathVariable不用指定名稱。9.2.3 REST 方法的前端控制器配置在 web.xml 中配置 sp r i ng m v c_r e s t org - sPringf ramework, webservletDispatcherServlet!- contextConfigLocationBJSspringmvctjQOWS件配畫務(wù)關(guān)験射器適即器等割=ontextConfigcontextConfigLocat ioncla5 5path: Siprdng/spFingi

49、mvfEXEIX/PB廠Em vadiiES|pringmvc_rest /9.3 對靜態(tài)資源的解析配置前端控制器的url-parttern 中指定/,對靜態(tài)資源的解析出現(xiàn)問題1: tp二二HiQCAlnoR宅二宅二BOEO/目目;parin.滬用匕滬用匕_ 7ba七七i a;1203 J j旦旦/ jqiim巧巧l 1 - 4. 4- in-SRj Status report在 springmvc.xml 中添加靜態(tài)資源解析方法。 cssimg、 kmvc: resources 1 ocation =M/img/,rmapping=,f/wg/*/10.攔截器10.1 攔截定義定義攔截器,實

50、現(xiàn) Handlerlnterceptor 接口,接口中提供三個方法。訪l可最參火孤官方站點新手上路常用網(wǎng)址1S 41public class HandlerInterceptor1 implements HandlerInterceptor / 進(jìn)入 Handler 方法之前執(zhí)行/ 用于身份認(rèn)證、身份授權(quán)/ 比如身份認(rèn)證, 如果認(rèn)證通過表示當(dāng)前用戶沒有登陸,需要此方法攔截不再向下執(zhí)行 Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Objecthandler)

51、throws Exception /return false 表示攔截,不向下執(zhí)行/return true 表示放行return false;/ 進(jìn)入 Handler 方法之后,返回 modelAndView 之前執(zhí)行/ 應(yīng)用場景從 modelAndView 出發(fā):將公用的模型數(shù)據(jù) (比如菜單導(dǎo)航 )在這里傳到視圖, 也可以在這里統(tǒng)一指定視圖Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,ModelAndView modelAndVie

52、w) throws Exception / 執(zhí)行 Handler 完成執(zhí)行此方法/ 應(yīng)用場景:統(tǒng)一異常處理,統(tǒng)一日志處理Overridepublic void afterCompletion(HttpServletRequest request,HttpServletResponse response, Object handler, Exception ex) throws Exception 10.2攔截器配置10.2.1 針對 HandlerMapping 配置Springmvc 攔截器對 HandlerMapping 進(jìn)行攔截設(shè)置,如果在某個 HandlerMapping 中配置攔截,

53、經(jīng)過該 HandlerMapping 映射成功的 handler 最終會使用該攔截器” vproperty n ame=i nterceptors bean id =handlerlnterceptor1class =spri ngmvc.i ntercapter.Ha ndlerl nterceptor1bea n class =spri ngmvc.i ntercapter.Ha ndlerl nterceptor2般不推薦使用。10.2.2 類似全局的攔截器Springmvc 配置類似全局的攔截器,springmvc 框架將配置的類似全局的攔截器注入到每個HandlerMapping 中

54、。/*示所割感:垃活子卩卅徑-bean class=*cn. itccjst. ssm. interceptor. Handlerlnterceptorl,rX/bean id =ha ndlerl nterceptor2/10.3.2 編寫兩個攔截器曰-田CH.iwse. inter ceptorHandler Inter cep tori. javKandl er lilt er c ep t or 2. i av a10.3.3 兩個攔截器都放行Han dlerl nterceptorl.preHa ndleHandlerlnterceptor2.preHa ndleHandlerlnt

55、erceptor2.postHa ndleHan dlerl nterceptorl.postHa ndleHandlerlnterceptor2.afterCompleti onHan dlerl nterceptorl.afterCompleti on總結(jié):preHandle方法按順序執(zhí)行,postHandle和afterCompletion按攔截器配置的逆向順序執(zhí)行。10.3.4 攔截器 1 放行,攔截器 2 不放行Han dlerl nterceptorl.preHa ndleHandlerlnterceptor2.preHa ndleHan dlerl nterceptorl.afterCompleti on總結(jié):攔截器1放行,攔截器2preHandle才會執(zhí)行。攔截器2preHandle不放行,攔截器2 postHan

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論