顾名思义MVC是M(model) V(view) C(controller)是一种软件架构设计思想,将业务分层设计和实现。使程序具备更好的灵活性和可扩展性。html
结合操做的简单实例来理解此图像,能够有更好的效果。
DispatcherServlet咱们叫它中央控制器,他比如大脑进行整个业务的操控。DispatcherServlet不是由咱们建立,而是由spring底层来建立。web
在咱们经过浏览器中输入url进行访问时
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
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>
可是上面的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(); }