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;@Controllerpublic 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了

@RestControllerpublic 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@RestControllerpublic 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();    }