Model-View-Controller,一種軟件設計思想,將軟件分爲三層:模型層、視圖層、控制層。

深入學習SpringMVC框架以及個人學習總結


模型層:負責處理具體的業務。

視圖層:與用戶交互的界面。

控制層:將請求分發給指定的業務邏輯。

Spring MVC是Spring對MVC思想的一種實現,建立在Spring核心功能之上,功能強大,使用方便。

SpringMVC框架的優勢

1)SpringMVC簡化web程序開發;

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

3)SpringMVC提供了大量擴展點,方便程序員自定義功能;

深入學習SpringMVC框架以及個人學習總結


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

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

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

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

⑤.ViewResolver:視圖解析器 通過視圖的名稱,解析具體的視圖對象(jsp文件);

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

使用SpringMVC框架

添加依賴

IOC+AOP

org.springframework spring-webmvc ${spring.version}


配置

1.配置核心控制器 (web.xml)

springMVC org.springframework.web.servlet.DispatcherServlet 1 springMVC /


2. springMVC的配置文件

默認在WEB-INF/servlet名稱-servlet.xml,如springMVC-servlet.xml文件


3.配置HandlerAdapter


4.配置Handler


5.視圖解析器


6.使用具體的視圖技術渲染


基於註解方式使用SpringMVC

添加依賴

IOC+AOP

org.springframework spring-webmvc ${spring.version}


可以採用替代上述“使用SpringMVC框架->配置”項的配置內容。

靜態資源配置

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

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

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

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

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

直接跳轉頁面


等同於:

@RequestMapping("/showRegister")public String 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.JAVA EE主鍵

HttpServletRequest/HttpServletResponseHttpSession


2.IO流

InputStreamOutputStreamReaderWriter

3.Spring組件

SessionStatusWebRequestNativeWebRequest


4.自定義類型,如User (請求參數中的key需要和對象中的setter方法一致)

5.獲取錯誤信息,Errors/BindingResult

6.用於傳遞數據,Model Map ModelMap

7.基本類型和字符串類型

默認來源請求參數 (@RequestParam)

如果想要參數來源於請求頭部可以使用@RequestHeader

如果想要參數來源於cookie可以使用@CookieValue

如果想要參數來源於URL可以使用註解@PathVariable

如果想要參數來源於請求體可以使用註解@RequestBody

數據轉換

方案一:spring2.5及之前版本使用

1.需要在Controller添加一個方法,方法採用@InitBinder

2.這個方法需要一個參數DataBinder

3.DataBinder.registerCustomEditor(Class> clazz,PropertyEditor propEditor>)

方案二:(只能做字符串到其他類型的轉換)

Formatter

1.實現接口Formtter

2.註冊到IOC容器中

- 管理系統中formatter


- 將該coversion交個springMVC使用


方法三:(能做任意類型到其他類型的轉換)

Converter

1.實現接口Converter

2.註冊到IOC容器中

統一異常處理

1.編寫一個類,編寫方法

@ExceptionHandler(Exception.class)public String exception(Exception ex){ return "500";}


2.這個類上添加一個@ControllerAdvice

方法返回json以及xml數據格式

1.方法的返回值爲Object,方法需要註解@ResponseBody

2.需要添加一個方法返回值的轉換器(使用的是jackson)


3.提供json處理包

com.fasterxml.jackson.core jackson-core com.fasterxml.jackson.core jackson-databind


使用gson

1.將消息轉換器換爲


2.將json處理的依賴修改爲

com.google.code.gson gson


使用fastjson

1.將消息轉換器換爲


2.將json處理的依賴包

com.alibaba fastjson


返回xml數據

1.方法返回Object,需要註解@ResponseBody,還需要在@RequestMapping(produces="application/xml")

2.需要添加消息轉換器(這個轉換需要在json轉換器的前面)


3.需要添加一個依賴

org.springframework spring-oxm

注意:如果配置了json轉換器,這個時候以前返回爲String的方法,返回的時候會默認添加一對引號。

可以在消息轉換器中添加一個字符串的轉換器(這個轉換需要在json轉換器的前面)


自定義消息轉換器

1.繼承抽象類AbstractHttpMessageConverter

2.將消息轉換器配置到SpringMVC中


攔截器

實現接口

HandlerInterceptor/WebRequestInterceptor

preHandler 在handler方法之前調用。返回值表示true,不攔截false, 攔截(不進入handler方法)

postHandler 在handler方法之後調用

afterCompleition 在handler方法完成之後

配置

在mvc的配置文件中

1.表示攔截系統中所有的請求


2.只需要攔截某些URL


3.排除一些url


文件上傳下載

1.jsp需要二進制提交

enctype="multipart/form-data"

2.Controller方法需要參數接收,參數的類型CommonsMultipartFile

3.需要文件上傳的解析器


4.需要添加依賴commons-fileupload

commons-fileupload commons-fileupload


文件下載

PS:只要mvc最後url是帶後綴的,SpringMVC會將其截取掉。

//告訴瀏覽器拿到資源不要打開,下載

response.addHeader("Content-Disposition","attachment;filename="+fileName);


作者:MrXiaoAndDonghttps://www.cnblogs.com/MrXiaoAndDong/p/SpringMVC.html
相關文章