乐趣区

关于springboot:SpringBoot中的SpringJVM学习总结

MVC 为何

顾名思义 MVC 是 M(model) V(view) C(controller)是一种软件架构设计思维,将业务分层设计和实现。使程序具备更好的灵活性和可扩展性。


联合操作的简略实例来了解此图像,能够有更好的成果。
DispatcherServlet 咱们叫它地方控制器,他好比大脑进行整个业务的操控。DispatcherServlet 不是由咱们创立,而是由 spring 底层来创立。

在咱们通过浏览器中输出 url 进行拜访时
DispatcherServlet 会把 url 传给 RequestMapping, 通过它外部存储 url 与 handler 之间的映射关系,用 DispatcherServlet 传来的 url 来寻找到对应 handler 并传回 DispatcherServlet。同样 RequestMapping 也不是咱们而是由底层创立的。

DispatcherMapping 将 request 传给对应的 Handler,这个 Hanndler 是须要要咱们本人去实现。

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 中增加咱们所学须要的配置

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

View Resovler 减少前缀, 后缀, 数据。后返回 DispatcherServlet。

<!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 响应给用户

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 来存储数据。

界面显示代码如下

<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();}
退出移动版