深入學習SpringMVC以及學習總結
一、優點:
1.SpringMVC簡化web程式開發;
2.SpringMVC效率很好(單例模式);
3.SpringMVC提供了大量擴充套件點,方便程式設計師自定義功能;
①.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
相關文章
- 深入學習SpringMVCSpringMVC
- 深入學習之連結與總結
- promise以及async、await學習總結PromiseAI
- MySQL深入研究--學習總結(1)MySql
- MySQL深入研究--學習總結(4)MySql
- MySQL深入研究--學習總結(2)MySql
- MySQL深入研究--學習總結(3)MySql
- MySQL深入研究--學習總結(5)MySql
- 深入分散式快取 — 學習總結分散式快取
- SpringMvc學習SpringMVC
- 學習總結
- Elasticsearch 一些命令彙總 以及學習總結Elasticsearch
- MYSQL學習總結MySql
- 近期學習總結
- KUDU學習總結
- CompletableFuture學習總結
- SpringCloud 學習總結SpringGCCloud
- awk 學習總結
- MyBatis 學習總結MyBatis
- Maven學習總結Maven
- Ajax學習總結
- JVM學習總結JVM
- mysqlimport學習總結MySqlImport
- WorkFlow學習總結
- JNI 學習總結
- SVG學習總結SVG
- 【TS】學習總結
- Kafka 總結學習Kafka
- Typescript學習總結TypeScript
- python學習總結Python
- Oracle學習總結Oracle
- redis學習總結Redis
- ConstraintLayout 學習總結AI
- BOM學習總結
- tkinter學習總結
- vue學習總結Vue
- HSF學習總結
- HTML學習總結HTML