Spring MVC 簡介前端
Spring Web MVC處理請求的流程 具體執行步驟以下:java
首先用戶發送請求----->前端控制器,前端控制器根據請求信息(如URL)來決定選擇哪個頁面控制器進行處理並把請求委託給它,即之前的控制器的控制邏輯部分;圖2-1中的一、2步驟;web
頁面控制器接收到請求後,進行功能處理,首先須要收集和綁定請求參數到一個對象,這個對象在Spring Web MVC中叫命令對象,並進行驗證,而後將命令對象委託給業務對象進行處理;處理完畢後返回一個ModelAndView(模型數據和邏輯視圖名);圖2-1中的三、四、5步驟;spring
前端控制器收回控制權,而後根據返回的邏輯視圖名,選擇相應的視圖進行渲染,並把模型數據傳入以便視圖渲染;圖2-1中的步驟六、7;編程
前端控制器再次收回控制權,將響應返回給用戶,圖2-1中的步驟8;至此整個結束 json
Spring MVC的優點服務器
清晰的角色劃分:前端控制器(DispatcherServlet)、請求處處理器映射(HandlerMapping)、處理器適配器(HandlerAdapter)、視圖解析器(ViewResolver)、處理器或頁面控制器(Controller)、驗證器( Validator)、命令對象(Command 請求參數綁定到的對象就叫命令對象)、表單對象(Form Object 提供給表單展現和提交到的對象就叫表單對象)。架構
分工明確,並且擴展點至關靈活,能夠很容易擴展,雖然幾乎不須要;app
因爲命令對象就是一個POJO,無需繼承框架特定API,可使用命令對象直接做爲業務對象;框架
和Spring 其餘框架無縫集成,是其它Web框架所不具有的;
可適配,經過HandlerAdapter能夠支持任意的類做爲處理器;
可定製性,HandlerMapping、ViewResolver等可以很是簡單的定製;
功能強大的數據驗證、格式化、綁定機制;
利用Spring提供的Mock對象可以很是簡單的進行Web層單元測試;
本地化、主題的解析的支持,使咱們更容易進行國際化和主題的切換。
強大的JSP標籤庫,使JSP編寫更容易。
………………還有好比RESTful風格的支持、簡單的文件上傳、約定大於配置的契約式編程支持、基於註解的零配置支持等等。
Spring MVC的經常使用註解
Spring MVC 基本配置 Spring MVC的定製配置須要咱們的配置類集成一個WebMvcConfigurerAdapter類,並在此類使用@EnableWebMvc註解,來開啓Spring MVC的配置支持.
Spring MVC 靜態資源配置 Spring Boot默認的靜態資源配置 若是須要直接訪問靜態資源,能夠在咱們的配置類中重寫 addResourceHandlers方法
快捷的ViewController 無需作任何業務處理,只是簡單的頁面轉向,可使用addViewControllers方法來實現.
package com.wangge.buzmgt.config; import com.wangge.json.JSONFormatMethodProcessor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.converter.ByteArrayHttpMessageConverter; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.converter.ResourceHttpMessageConverter; import org.springframework.http.converter.StringHttpMessageConverter; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; import org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter; import org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter; import org.springframework.http.converter.xml.SourceHttpMessageConverter; import org.springframework.web.method.support.HandlerMethodReturnValueHandler; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; import java.util.ArrayList; import java.util.List; @Configuration @EnableWebMvc public class WebMvcConfig extends WebMvcConfigurerAdapter { @Override public void addViewControllers (ViewControllerRegistry registry) { registry.addViewController ("/").setViewName ("index"); registry.addViewController ("/left").setViewName ("left"); } @Override public void addReturnValueHandlers (List<HandlerMethodReturnValueHandler> returnValueHandlers) { returnValueHandlers.add (new JSONFormatMethodProcessor (messageConverter ())); } private List<HttpMessageConverter<?>> messageConverter () { List<HttpMessageConverter<?>> converters = new ArrayList<> (); converters.add (new ByteArrayHttpMessageConverter ()); converters.add (new StringHttpMessageConverter ()); converters.add (new ResourceHttpMessageConverter ()); converters.add (new SourceHttpMessageConverter<> ()); converters.add (new AllEncompassingFormHttpMessageConverter ()); converters.add (new Jaxb2RootElementHttpMessageConverter ()); converters.add (new MappingJackson2HttpMessageConverter ()); return converters; } @Override public void addResourceHandlers (ResourceHandlerRegistry registry) { registry.addResourceHandler ("/static/**").addResourceLocations ("classpath:/static/"); } }
其中 addResourceLocations 指的是文件放置的目錄,addResourceHandler指的是對外暴露的訪問路徑.