摘要:關鍵注解的關鍵注解主要有其中主要是用于標記該類是一個控制器,用于指示的哪一個類或方法來處理請求動作,即用于標識具體的處理器。默認已經裝配了作為組件的實現類,而由使用,將請求信息轉換為對象。
關鍵注解
springmvc的關鍵注解主要有@Controller/@RequestMapping/@RequestParam/@PathVariable/@RequestHeader/@CookieValue/@SessionAttributes/@ModelAttribute
其中@Controller主要是用于標記該類是一個控制器,@RequestMapping用于指示spring的哪一個類或方法來處理請求動作,即用于標識具體的處理器。
每個請求處理方法可以有多個不同類型的參數,可以出現在請求處理方法中的參數類型有:HttpServletRequest/HttpServletResponse/HttpSession/WebRequest/NativeWebRequest/Locale/InputStream/OutputStream/Principal/Map/Model/ModelMap/RedirectAttributes/Errors/BindingResult/SessionStatus/UriComponentsBuilder等。舉例如下:若需要訪問HttpSession
@RequestMapping("") public String login(HttpSession session){....}
Model是一個Spring MVC類型,其中包含了Map對象用來存儲數據,如果方法中添加了Model參數,則每次調用請求處理方法時,SpringMVC都會創建model對象,并將其作為參數傳遞給方法。
如何將模型數據傳遞給控制器和視圖是Spring MVC的一項重要工作,Spring MVC主要提供了多種途徑,下面分類進行介紹:
1.Model和ModelMap: Spring MVC在內部使用了一個Model接口存儲數據模型數據,它的功能類似于Map接口,但是比map接口容易使用,而ModelMap接口實現了Map接口。Spring MVC在調用處理方法之前會創建一個隱含的模型對象,作為模型數據的存儲容器,如果處理方法的參數有Model或ModelMap類型,則Spring MVC會將隱含模型的引用傳遞給這些參數,在處理方法內部,開發者就可以通過這些參數來引用模型數據,當然也可以向模型中添加新的屬性。
2.ModelAndView :其和Model差不多,但是其不僅包含模型數據,還包含視圖信息,可以通過ModelAndView設置其視圖路徑:舉例如下:
@RequestMapping("") public ModelAndView login(ModelAndView mv){ mv.setViewName("視圖路徑"); return mv; }參數綁定
@RequestParam舉例如下:
注意:一旦使用了@RequestParam注解,就要求前臺必須傳遞@RequestParam要求的參數,否則后臺就不會響應
@RequestMapping("") public ModelAndView login(@RequestParam("loginname") String loginname, @RequestParam("password") String password){ .......... }
@PathVariable
用于獲取URL中的動態參數
URL:http://localhost:8080/pathtest/1 @RequestMapping("/pathtest/{userId}") public ModelAndView login(@PathVariable Integer userId){ .......... } //上例中userId就是動態參數
@RequestHeader
用于將請求頭中的信息映射到處理方法的參數中,舉例如下:
@RequestMapping("/pathtest") public ModelAndView login(@RequestHeader("User-Agent") String userAgent){ .......... }
@CookieValue
用于將請求的Cookie數據映射到功能處理的方法參數上。
@RequestMapping("/pathtest") public ModelAndView login(@CookieValue("JSESSIONID") String sessionId){ .......... }
@SessionAttribute
允許我們有選擇地指定Model中哪些屬性需要存儲到HttpSession對象中
注意@SeesionAttribute只能聲明在類上,不能聲明在方法上
@Controller @SessionAttribute("user") public class SessionController{......}@ModelAttribute
@ModelAttribute注解的方法,會在請求進入處理方法之前,先攔截請求,做過處理后再將請求轉發給具體的處理方法,舉例如下:
@Controller public class ModelAttributeController{ @ModelAttribute("loginname") public String userModel(RequestParam(loginname) String loginname){ //使用@ModelAttribute注釋的value屬性,來指定model屬性的名稱,model屬性的值就是方法的返回值 return loginname; } @RequestMapping("/login") public String loing1(){ return "result" } } 上例中,在請求進入login1方法之前,請求會先進入userModel方法 @Controller public class ModelAttributeController{ @ModelAttribute public String userModel(String loginname,Model model){ //model中將會存儲一個參數(String=loginname) return loginname; } @RequestMapping("/login") public String loing1(Model model){ return "result" } } @Controller public class ModelAttributeController{ @ModelAttribute("username") @RequestMapping("/login") public String loing1(Model model){ return "result" } } 上述示例中,@ModelAttribute和@RequestMapping同時注釋一個方法,loing1的返回值不再是視圖名稱,而是model的屬性值,視圖名稱是@RequestMapping的value值“login” @Controller public class ModelAttributeController{ @ModelAttribute("user") public User userModel5(){ .... } @RequestMapping("/login") public String login5(@ModelAttribute("user") User user){ return "result" } } //上例中userModel5(...)方法先于login5(...)方法調用,userModel5(...)方法會在Model中添加一個屬性,key是@ModelAttribute的值“user”,value是userModel5(...)方法的返回值。 login5(...)方法中的@ModelAttribute的意思是將Model中的user屬性賦值給login5(...)的方法參數。信息轉換
Spring3.0 新增加了一個重要信息轉換接口HttpMessageConverter
HttpMessageConverter接口的具體實現類有:StringHttpMessageConverter ,FormHttpMessageConverter ,XmlAwareFormHttpMessageConverter ,ResourceHttpMessageConverter ,SourceHttpMessageConverter ,ByteArrayHttpMessageConverter等。
RequestMappingHandlerAdapter可以默認已經安裝了幾個HttpMessageConverter,如果需要裝配其他類型的HttpMessageConverter,需要自定義一個RequestMappingHandlerAdapter,舉例如下:
Json數據轉換
......
如果要想使用SpringMVC處理JSON格式的數據,首先需要在RequestMappingAdapter上配置JSONX信息轉換器,如下所示:
......
text/html application/json
@Requestbody注解用于讀取Request請求中的body部分數據,使用系統默認配置的HttpMessageConverter進行解析,然后把相應的數據綁定到Controller中方法的參數上。當前臺頁面使用GET或POST方法提交數據時,數據編碼格式由請求頭的ContentType指定,可以分為以下幾種情況:
1.application/x-www-form-urlencoded,這種情況可以由@RequestBody處理也可以由其他注解處理;
2.multipart/form-data,@RequestBody不能處理這種格式;
3.application/json、application/xml等格式的數據,必須使用@RequestBody來處理;
在實際開發中可以使用@RequestBody注解很方便地接收JSON格式的數據,并將其轉換為對應的數據類型。@RequestBody的使用舉例如下:
@Controller public class JsonController{ @RequestMapping("/json") @ResponseBody public MaptestJson(@RequestBody Book book){....} }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/70502.html
摘要:現在給定一個項目的包結構在中有以下配置只掃描注解可以看出要把最后的包寫上,不能包含子包,所以不能寫成。 大家好,我是豬弟,豬在我心中從來不是蠢的代名詞,而是懶的代名詞,本次準備記錄一個在開發測試過程中遇到的問題,跟蹤了三天spring和第三方RPC組件的源碼,最終發現了問題是因為第三方組件沒有處理好而父子容器導致的,還有一個因素是spring注解掃描重疊。 Spring版本:4.3...
摘要:處理器是繼前端控制器的后端控制器,在的控制下對具體的用戶請求進行處理。由于涉及到具體的用戶業務請求,所以一般情況需要程序員根據業務需求開發。 1、mcv整體架構和流程 showImg(https://segmentfault.com/img/bV55Qq?w=860&h=406); 用戶發送請求至前端控制器 DispatcherServlet DispatcherServlet 收到...
摘要:入門筆記簡介是一種基于的實現了設計模式的請求驅動類型的輕量級框架,是系開源項目中的一個,和配合使用。配置在中需要添加使用的和映射規則。入門較快,而掌握起來相對較難。 SpringMVC入門筆記 1. 簡介 Spring MVC是一種基于Java的實現了Web MVC設計模式的請求驅動類型的輕量級Web框架 ,是Spring系開源項目中的一個,和IoC配合使用。通過策略接口,Spring...
摘要:第一次寫技術文章,主要內容是使用創建一個簡單的項目,如有操作或理解錯誤請務必指出,當謙虛學習。基本思想其實就是一個項目引用別的模塊包,最終項目被打成包發布。 第一次寫技術文章,主要內容是使用maven創建一個簡單的SpringMVC WEB 項目,如有操作或理解錯誤請務必指出,當謙虛學習。做這一次的工作主要是因為想加強一下自己對Spring Web 項目的理解,因為平時都是直接寫業務代...
摘要:配置和編碼格式使用提供過濾器處理字符編碼。請求從不改變資源的狀態,無副作用。中添加,采用默認配置已經足夠面對大多數場景注入參考鏈接手把手教你整合最優雅框架我的編碼習慣接口定義設計最佳實踐 創建項目 打開IDEA -> Create New Project勾選Create from archetypeshowImg(https://segmentfault.com/img/bV5tS4?...
閱讀 2893·2021-09-22 15:20
閱讀 2965·2021-09-22 15:19
閱讀 3466·2021-09-22 15:15
閱讀 2397·2021-09-08 09:35
閱讀 2382·2019-08-30 15:44
閱讀 3014·2019-08-30 10:50
閱讀 3736·2019-08-29 16:25
閱讀 1593·2019-08-26 13:55