SpringBoot中的SpringJVM學習總結

MVC爲什麼

顧名思義MVC是M(model) V(view) C(controller)是一種軟件架構設計思想,將業務分層設計和實現。使程序具備更好的靈活性和可擴展性。html

圖片.png
結合操做的簡單實例來理解此圖像,能夠有更好的效果。
DispatcherServlet咱們叫它中央控制器,他比如大腦進行整個業務的操控。DispatcherServlet不是由咱們建立,而是由spring底層來建立。web

在咱們經過瀏覽器中輸入url進行訪問時圖片.png
DispatcherServlet會把url傳給RequestMapping,經過它內部存儲url與handler之間的映射關係,用DispatcherServlet傳來的url來尋找到對應handler並傳回DispatcherServlet。一樣RequestMapping也不是咱們而是由底層建立的。spring

DispatcherMapping將request傳給對應的Handler,這個Hanndler是須要要咱們本身去實現。json

package com.cy.pj.health.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller //bean 對象
public class TemplateController {//在spring mvc中這個對象稱之爲handler(處理器)
    @RequestMapping("doTemplateUI") // @RequestMapping用於定義url請求的映射
    public String doTemplateUI(){
        return "default";//view name (視圖名)
    }
}

@RequestMapper("abc")定義經過傳入abc來調用此方法。
所返回的值即是view name,講這個值返回給DispatcherServlet。瀏覽器

DispatcherServlet收到所返回的值後將其交給View Resovler架構

View Resovler一樣是由底層負責建立,咱們只須要在application.properties中添加咱們所學須要的配置mvc

spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.suffix=.html

View Resovler 增長前綴,後綴,數據。後返回DispatcherServlet。app

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>The  defalut page of templates </h1>
</body>
</html>

再由DispatherSerlvet響應給用戶ui

ModelAndView應用實例

package com.cy.pj.module.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class ModelViewController {
    @RequestMapping("/doModelAndView")
    public String doModelAndView(Model model) {
        model.addAttribute("username", "jason");
        model.addAttribute("state", true);
        return "default";
    }
}

處理完用戶請求後,直接將響應數據封裝到model中,而後和
view一塊兒封裝成ModelAndView對象返回給DispatcherServlet。
ps.model是底層建立的而且是用map來存儲數據。url

界面顯示代碼以下

<div>
    <ul>
        <li>username:[[${username}]]</li>
        <li>state:[[${state}]]</li>
    </ul>
</div>

Json

可是上面的ModelAndView這將數據和頁面綁定到一塊兒了,若是咱們只須要數據的話,那麼就要用到Json了

@RestController
public class JsonObjectController {

    @RequestMapping("/doConvertResponseToJson")
    public ResponseResult doConvertResponseToJson(){
        ResponseResult rs=new ResponseResult();
        rs.setCode(200);
        rs.setMessage("OK");
        return rs;
    }

咱們使用本身建立的類去封裝信息。
@RestController註解中包含
@Controller
@ResponseBody
使用這個註解之後,該類中的全部方法都不須要在額外的添加@ResponseBody註解

@ResponseBody註解做用在,將返回值轉成Json格式字符串返回。
new ObjectMapper().writeValueAsString(rs);//本身將對象轉換爲json字符串時,使用的就是這行代碼。

定義pojo對象,用於接受客戶端請求參數時咱們能夠直接接收
或者本身建立一個pojo對象

//http://localhost/doParam01?name=mvc
@RestController
public class ParamObjectController {
    //基於直接量參數來接收請求中的參數數據,咱們定義的方法參數名應與請求中的參數名相同
    @GetMapping("/doParam01")//這個註解描述的方法只能處理Get類型的請求
    //@ResponseBody
    //@RequestMapping(value="/doParam01",method = RequestMethod.GET)
    public String doMethodParam(String name){
        return "request params "+name;
    }
@GetMapping("/doParam02")
    public String doMethodParam(RequestParameter param){
        //當使用pojo對象做爲方法參數接收客戶端參數數據時,pojo對象中應該提供與客戶端參數名匹配的set方法
        return "request params "+param.toString();
    }

用map接收請求參數,必須使用@RequestParam對參數進行描述

@GetMapping("/doParam03")
   public String doMethodParam(@RequestParam  Map<String,Object> param){
        //當方法參數是map類型,並且但願基於map接收客戶端請求參數  
        //可是,使用map做爲方法參數接收客戶端請求數據不太嚴謹(客戶端能夠傳遞任意參數).
        return "request params "+param.toString();

    }
相關文章
相關標籤/搜索