1.SpringMvc是什麼前端
Spring Web MVC是一種基於Java的實現了Web MVC設計模式的請求驅動類型的輕量級Web框架,即便用了MVC架構模式的思想,將web層進行職責解耦,基於請求驅動指的就是使用請求-響應模型,框 架的目的就是幫助咱們簡化開發,Spring Web MVC也是要簡化咱們平常Web開發的。java
Spring Web MVC也是服務到工做者模式的實現,但進行可優化。前端控制器是DispatcherServlet;
應用控制器其實拆爲處理器映射器(Handler Mapping)進行處理器管理和視圖解析器(View Resolver)進行視圖管理;頁面控制器/動做/處理器爲Controller接口(僅包含ModelAndView handleRequest(request, response)
方法)的實現(也能夠是任何的POJO類);支持本地化(Locale)解析、主題(Theme)解析及文件上傳等;提供了很是靈活的數據驗證、格式化和數據綁定機制;提供了強大的約定大於配置(慣例優先原則)的契約式編程支持。
2.Spring Web MVC 能幹什麼
web
√讓咱們能很是簡單的設計出乾淨的Web層和薄薄的Web層;spring
√進行更簡潔的Web層的開發;編程
√天生與Spring框架集成(如IoC容器、AOP等);設計模式
√提供強大的約定大於配置的契約式編程支持;瀏覽器
√能簡單的進行Web層的單元測試;服務器
√支持靈活的URL到頁面控制器的映射;session
√很是容易與其餘視圖技術集成,如Velocity、Thymeleaf、FreeMarker等等,由於模型數據不放在特定的API裏,而是放在一個Model裏(Map
數據結構實現,所以很容易被其餘框架使用);數據結構
√很是靈活的數據驗證、格式化和數據綁定機制,能使用任何對象進行數據綁定,沒必要實現特定框架的API;
√提供一套強大的JSP標籤庫,簡化JSP開發;
√支持靈活的本地化、主題等解析;
√更加簡單的異常處理;
√對靜態資源的支持;
√支持Restful風格。
3.Spring Web MVC 核心架構
核心架構的具體流程步驟以下:
一、 首先用戶發送請求——>DispatcherServlet,前端控制器收到請求後本身不進行處理,而是委託給其餘的解析器進行處理,做爲統一訪問點,進行全局的流程控制;
二、 DispatcherServlet——>HandlerMapping, HandlerMapping將會把請求映射爲HandlerExecutionChain對象(包含一個Handler處理器(頁面控制器)對象、多個 HandlerInterceptor攔截器)對象,經過這種策略模式,很容 易添加新的映射策略;
三、 DispatcherServlet——>HandlerAdapter,HandlerAdapter將會把處理器包裝爲適配器,從而支持多種類型的處理器,即適配器設計模式的應用,從而很容易支持不少類型的處理器;
四、 HandlerAdapter——>處理器功能處理方法的調用,HandlerAdapter將會根據適配的結果調用真正的處理器的功能處理方法,完成功能處理;並返回一個ModelAndView對象(包含模型數據、邏輯視圖名);
五、 ModelAndView的邏輯視圖名——> ViewResolver, ViewResolver將把邏輯視圖名解析爲具體的View,經過這種策略模式,很容易更換其餘視圖技術;
六、 View——>渲染,View會根據傳進來的Model模型數據進行渲染,此處的Model實際是一個Map數據結構,所以很容易支持其餘視圖技術;
七、返回控制權給DispatcherServlet,由DispatcherServlet返回響應給用戶,到此一個流程結束。
4.SpringBoot對SpringMvc簡單使用
1.建立一個Springboot項目(省略)
2.添加maven庫
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
3.在使用方法前加入@Controller 控制器註解
@Controller public class DemoApplication { }
4.使用@RequestMapping註解 映射Url訪問地址
@RequestMapping("/") public String tohome(Model model, RedirectAttributes redirectAttributes){ model.addAttribute("test","帶參數訪問成功"); //redirectAttributes.addFlashAttribute("test","帶參數跳轉到控制器成功"); return "index"; }
5.映射多個請求地址
@RequestMapping(value={"index","index1"},method = RequestMethod.GET)
6.使用RESTful url風格
@RequestMapping("index/{id}") public String doIndex(@PathVariable("id") Integer id, Model model){ model.addAttribute("id",id); return "index"; }
7.解決rest返回@ResponseBody亂碼
在使用SpringMvc的時候,須要使用 Rest ,最簡單的方法是將 @Controller改成@RestController,還能夠在 @RequestMapping下面添加@ResponseBody註解。不過有時候使用@ResponseBody時候會出現亂碼問題。
解決方法:
在@RequestMapping 註解上添加 produces = MediaType.APPLICATION_JSON_VALUE+";charset=UTF-8" 屬性值
或者將方法返回值改爲Object
8.重定向(redirect)和轉發(forward)
forward是服務器請求資源,服務器直接訪問目標地址的URL,把那個URL的響應內容讀取過來,而後把這些內容再發給瀏覽器.瀏覽器根本不知道服務器發送的內容從哪裏來的,因此它的地址欄仍是原來的地址.(攜帶參數)
redirect是服務端根據邏輯,發送一個狀態碼,告訴瀏覽器從新去請求那個地址.因此地址欄顯示的是新的URL.(不攜帶參數,能夠本身拼接url參數)
1:使用ModelAndView對象轉發或者重定向
return new ModelAndView("redirect:/index");
2:直接返回String 轉發或者重定向
return "forward:/index";
3:forward攜帶參數
model.addAttribute("test","帶參數訪問成功"); return "forward:/index";
@RequestMapping("/index") public String formHome(Model model,RedirectAttributes redirectAttributes){ //model.addAttribute("test","帶參數訪問成功");//從上面的方法轉發過來 等於隱式的把test參數放在 Model裏 return "index"; }
在index方法裏想獲取放在model裏的test 使用 request.getAttribute("test");
4:redirect攜帶參數
@RequestMapping("/") public String tohome(RedirectAttributes redirectAttributes){ redirectAttributes.addFlashAttribute("test","帶參數跳轉到控制器成功"); return "redirect:/index"; }
@RequestMapping("/index") public String formHome(Model model,RedirectAttributes redirectAttributes){ //隱式的取session裏的test參數放在Model裏 return "index"; }
5.跳轉到外部url
return 「redirect:http://www.baidu.com」;
6.在沒有RequestMapping的方法中使用獲取request對象
HttpServletRequest request1 = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();