深入學習SpringMVC以及學習總結

b10l07發表於2018-08-30

一、優點:

1.SpringMVC簡化web程式開發;

2.SpringMVC效率很好(單例模式);

3.SpringMVC提供了大量擴充套件點,方便程式設計師自定義功能;

13465705-06b18f0d9141864f.png!web

①.DispatcherServlet:核心控制器(springMVC的心臟)中轉作用;

②.HandlerMapping:對映處理器(處理請求,找到對應的Handler);

③.HandlerAdapter:處理器適配,(Handler實現有兩種方法,所以必須適配時候才能執行);

④.Handler:(Controller層):處理器

⑤.ViewResolver:檢視解析器    通過檢視的名稱,解析具體的檢視物件(jsp檔案);

⑥.View:具體的檢視技術進行渲染;

二、使用SpringMVC

新增依賴    IOC+AOPorg.springframeworkspring-webmvc${spring.version}此處版本可以根據需要選擇配置    1.配置核心控制器  (web.xml)springMVCorg.springframework.web.servlet.DispatcherServlet1springMVC/2. springMVC的配置檔案            預設在WEB-INF/servlet名稱-servlet.xml    springMVC-servlet.xml

三、基於註解方式使用SpringMVC

1.新增依賴    IOC+AOPorg.springframeworkspring-webmvc${spring.version}此處版本可以根據需要選擇2.配置DispatcherServlet    1.配置核心控制器  (web.xml)springMVCorg.springframework.web.servlet.DispatcherServlet1springMVC/3.SpringMVC的配置檔案(自定義配置檔案)    需要在servlet中新增一個引數contextConfigLocationclasspath:spring-mvc.xml以上配置中:可以採用替代我們的第2、3步配置

四、靜態資源配置

1.如果DispatcherServlet配置了url-pattern '/' ,那麼靜態資源放在webapp下也訪問不到,DispatcherServlet覆蓋了Tomcat提供的用於訪問靜態資源的servlet(DefaultServlrt);

可以用去開啟靜態資源訪問方式;

①.只能訪問webapp下的靜態資源;

②.和tomcat耦合(和伺服器耦合);

2.springMVC提供靜態資源訪問:

五、直接跳轉頁面

等同於:

@RequestMapping("/showRegister")publicString showRegister(){return"register";    }

六、常用註解

@Controller//將一個類對映為Controller層@RestController//將一個類對映為Controller層(方法返回的都是資料模型)@RequestMapping//將一個方法對映到URL上@GetMapping//將一個方法對映到URL上(只能為Get請求)@PostMapping//將一個方法對映到URL上(只能為Post請求)@RequestParam//將請求引數封裝到方法引數上@RequestHeader//將請求頭部封裝到方法引數上@CookieValue//將Cookie封裝到方法引數上@PathVariable//將URL中的值封裝到方法引數上@RequestBody//將請求體(POST請求)中的值封裝到方法引數上@ModelAttrubite//將請求引數封裝為物件(在請求作用域中,引數和方法級別)@SessionAttributes//將請求引數封裝為物件(在Session作用域中,類級別)@Valid//後臺校驗@InitBinder//(Spring2.5及之前版本會使用)@ResponseBody//將方法返回值寫入到ResponseBody中@ExceptionHandler//同一異常處理  @ControllerAdvice//Controller的通知

七、Controller層方法的寫法

1.方法的返回值ModelAndView模型和檢視String檢視        字串-->檢視名forward:url-->轉發redirect:url-->重定向void檢視(用於請求url為檢視名稱)Object模型2.URL的寫法    @RequestMapping()        可以新增在類上-->表示包的概念,訪問這個類下的所有的方法都需要新增一個字首1.直接寫URL如@RequestMapping("/m1")2.ant風格        *        單層路徑        **      多層路徑        ?        單個字元3.rest風格        {name}        {name:正規表示式}@RequestMapping(path={"/url1","/url2"})@RequestMapping(path="/url",method=RequestMethod.POST)//method指定請求方式@RequestMapping(path="/url",params={"name"})//表示該請求必須帶一個name的引數 @RequestMapping(path="/url",headers={"User-Agent"})//表示該請求必須帶一個頭部資訊User-Agent(瀏覽器資訊)

八、Controller層方法引數

*1.JAVAEE主鍵HttpServletRequest/HttpServletResponseHttpSession2.IO流InputStreamOutputStreamReaderWriter3.Spring元件SessionStatusWebRequestNativeWebRequest*4.自定義型別  如User(請求引數中的key需要和物件中的setter方法一致)*5.獲取錯誤資訊Errors/BindingResult*6.用於傳遞資料ModelMapModelMap*7.基本型別和字串型別            預設來源請求引數 (@RequestParam)            如果想要引數來源於請求頭部  可以使用@RequestHeader如果想要引數來源於cookie可以使用@CookieValue如果想要引數來源於URL可以使用註解@PathVariable如果想要引數來源於請求體      可以使用註解@RequestBody

九、資料轉換

方案一:spring2.5及之前版本使用1.需要在Controller新增一個方法,方法採用@InitBinder2.這個方法需要一個引數DataBinder3.DataBinder.registerCustomEditor(Class clazz,PropertyEditor propEditor>)    方案二:(只能做字串到其他型別的轉換)        Formatter1.實現介面Formtter2.註冊到IOC容器中- 管理系統中formatter                                                                  - 將該coversion交個springMVC使用        方法三:(能做任意型別到其他型別的轉換)        Converter1.實現介面Converter2.註冊到IOC容器中

十、統一異常處理

1.編寫一個類        編寫方法@ExceptionHandler(Exception.class)publicString exception(Exception ex){return"500";        }2.這個類上新增一個@ControllerAdvice

十一、方法返回json以及xml資料格式

1.方法的返回值為Object,方法需要註解@ResponseBody2.需要新增一個方法返回值的轉換器(使用的是jackson)3.提供json處理包com.fasterxml.jackson.corejackson-corecom.fasterxml.jackson.corejackson-databind使用gson    1.將訊息轉換器換為2.將json處理的依賴修改為com.google.code.gsongson使用fastjson    1.將訊息轉換器換為2.將json處理的依賴包com.alibabafastjson如果想要返回為xml1.方法返回Object,需要註解@ResponseBody 還需要在@RequestMapping(produces="application/xml")2.需要新增訊息轉換器(這個轉換需要在json轉換器的前面)3.需要新增一個依賴org.springframeworkspring-oxm注意:如果配置了json轉換器,這個時候以前返回為String的方法,返回的時候會預設新增一對引號。    可以在訊息轉換器中新增一個字串的轉換器(這個轉換需要在json轉換器的前面)

十二、自定義訊息轉換器

1.繼承抽象類AbstractHttpMessageConverter    2.將訊息轉換器配置到SpringMVC中

十三、攔截器

1.實現介面  HandlerInterceptor/WebRequestInterceptor    preHandler        在handler方法之前呼叫            返回值表示true,不攔截false, 攔截(不進入handler方法)      postHandler        在handler方法之後呼叫    afterCompleition  在handler方法完成之後2.配置    在mvc的配置檔案中1.表示攔截系統中所有的請求    2.只需要攔截某些URL            3.排除一些url               

十四、檔案上傳下載

1.jsp需要二進位制提交        enctype="multipart/form-data"2.Controller方法需要引數接收,引數的型別CommonsMultipartFile3.需要檔案上傳的解析器4.需要新增依賴commons-fileuploadcommons-fileuploadcommons-fileupload檔案下載    PS:只要mvc最後url是帶字尾的,SpringMVC會將其擷取掉。  //告訴瀏覽器拿到資源不要開啟,下載        response.addHeader("Content-Disposition","attachment;filename="+fileNam

如果你現在在JAVA這條路上掙扎,也想在IT行業拿高薪,可以參加我們的訓練營課程,選擇最適合自己的課程學習,技術大牛親授,7個月後,進入名企拿高薪。我們的課程內容有:Java工程化、高效能及分散式、高效能、深入淺出。高架構。效能調優、Spring,MyBatis,Netty原始碼分析和大資料等多個知識點。如果你想拿高薪的,想學習的,想就業前景好的,想跟別人競爭能取得優勢的,想進阿里面試但擔心面試不過的,你都可以來,q群號為:855355016