javascript
SpringMVC小结
一放下就生疏,所以要溫故,所以要筆記。
?
Tip,多數(shù)情況下,SpringMVC建議單例執(zhí)行,Struts2建議多例執(zhí)行。
原因就在于Struts2使用屬性驅(qū)動或模型驅(qū)動,而SpringMVC則使用方法的形參接收參數(shù)。后者的方法在調(diào)用后數(shù)據(jù)就會銷毀。
?
前提一,SpringMVC的執(zhí)行流程:DispatcherServlet - HandlerMapping - HandlerAdapter - ViewResolver。
其實(shí)就是解析Url,調(diào)用合適的Handler,處理Handler的返回?cái)?shù)據(jù)(ModelAndView,查源碼可知其本質(zhì)仍是操作request和response)。
注意,SpringMVC的Handler又叫Controller,概念可類比Struts2的Action。
前提二,SpringMVC的使用有傳統(tǒng)代碼和注解兩種方式。兩種方式需要在xml中配置的HandlerMapping和HandlerAdapter是不同的。
前提三,SpringMVC可以開啟RESTful風(fēng)格訪問。
前提四,xml配置文件中的標(biāo)簽都有對應(yīng)的類或接口,所以如果不知道怎么配置,可以查找對應(yīng)的類或接口。
?
Handler(Controller)的實(shí)現(xiàn)方式:
①(非注解)實(shí)現(xiàn)Controller接口;
②(非注解)實(shí)現(xiàn)HttpRequestHandler接口;
③(注解)@Controller@RequestMapping@RequestParam@PathVariable等。
非注解方式需要實(shí)現(xiàn)接口的方法,每次實(shí)現(xiàn)都只能對應(yīng)一個(gè)Controller,不方便,僅作了解即可。
注解方式,靈活多變(方法有多種返回類型,方法返回的數(shù)據(jù)有多種操作方式),當(dāng)是最佳選擇。
?
Handler(Controller)中方法的形參類似Struts2中Action的屬性或模型,通過不同的形參可以注入不同的對象(如request,pojo等)。
如:
@RequestMapping(value = "/xxx", method = { RequestMethod.POST, RequestMethod.GET }) public String xxx(HttpServletRequest request) throws Exception {request.setAttribute("xxx", xxx);return "abc/xxx";// return "redirect:xxx.action"; //路徑是相對于當(dāng)前方法路徑的上一級路徑。// return "forward:xxx.action"; //路徑是相對于當(dāng)前方法路徑的上一級路徑。// 其實(shí)就是類內(nèi)的action。 }上面就是通過形參注入了request對象,從而可以在方法內(nèi)部操作該對象。
?
?
---------------------------------------------------------------------
SpringMVC已加入了RESTful支持。RESTful是面向資源的架構(gòu)思想,個(gè)人理解:對資源的訪問及處理是其重點(diǎn)。
SpringMVC通過以下三點(diǎn)來保證(個(gè)人理解):
??? 【】【】@ResponseBody使Controller【直接返回?cái)?shù)據(jù)】,而不是直接指向具體的視圖;同時(shí)通過MessageConverter和produces="text/plain;charset=UTF-8"可以返回各種格式的數(shù)據(jù)(XML,json,RSS,TEXT,字節(jié)流等)。
?? ?【】【】@ResponseBody就是對應(yīng)了HTTP協(xié)議里的響應(yīng)體!!!
?? ?【】【】ResponseEntity可以認(rèn)為是ResponseHeader+ResponseBody。
?? ?
?? ?以上三點(diǎn)(直接返回?cái)?shù)據(jù)而非頁面、對應(yīng)響應(yīng)體、響應(yīng)頭和響應(yīng)體),都是針對RESTful風(fēng)格所需。務(wù)必理解啊。
??? Controller方法直接返回ResponseEntity對象,@ResponseBody將該對象轉(zhuǎn)成符合格式的數(shù)據(jù),然后直接返回。
?
轉(zhuǎn)載于:https://www.cnblogs.com/larryzeal/p/5336042.html
總結(jié)
以上是生活随笔為你收集整理的SpringMVC小结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在线生成CSS3
- 下一篇: SpringMVC一例 是否需要重定向