执行流程:
- 用户发出请求 然乎通过url到达相关的控制器
- 处理器映射器(HandlerMapping)根据请求的url查找handler,
- HanderExecution为具体的handler,主要就是根据url找到控制器,然后解析后的信息再传给DispatcherServlet
- 处理器适配器(handlerAdapter),按照特定的规则执行handler
- Handler让具体的controller去执行
- Controller将具体的执行信息返回给处理器适配器 如:ModelAndView
- 处理器适配器将 视图 再给DispatcherServlet 然后DispatcherServlet 调用视图解析器来解析处理器适配器传递的视图
- 视图解析器再将解析过的视图传给DispatcherServlet 然后调用具体的视图
MVC 主要做的事情:
- 将url映射到Java类或者方法
- 封装用户提交的数据
- 处理请求 调用相关的业务处理 封装响应数据
- 将响应的数据渲染.jsp/html等表示层数据
在Spring MVC框架当中,Controller替代Servlet担负控制器的职能,
M:指model:模型层,指工程当中的Java Bean,作用是处理数据
Java Bean分两类:
一类是实体类Bean:专门存储业务数据的
一类为业务处理Bean:指Servlet或Dao对象,专门处理业务逻辑和数据
V:View,视图层指项目当中的html或jsp等页面,作用是与用户进程交互,展示数据
C:Contoller,控制层,指工程当中的servlet,作用是接受请求和响应数据
@RestController是一个组合注释,它本身是元注释的,@Controller并@ResponseBody指示一个控制器,其每个方法都继承类型级别的@ResponseBody注释,因此直接写入响应正文而不是视图分辨率并使用 HTML 模板呈现。
捕获的 URI 变量可以使用@PathVariable 默认支持简单类型(int、long、Date等)例如
@Controller
@RequestMapping("/owners/{ownerId}")
public class OwnerController {
@GetMapping("/pets/{petId}")
public Pet findPet(@PathVariable Long ownerId, @PathVariable Long petId){
// ...
}
@RequestMapping的属性的子集(或全部)
@GetMapping、@PostMapping、@PutMapping、@DeleteMapping和@PatchMapping是组合注释的示例。提供它们是因为,可以说,大多数控制器方法应该映射到特定的 HTTP 方法,而不是 using @RequestMapping,默认情况下,它匹配所有 HTTP 方法。
@RequestParam注解将 Servlet 请求参数(即查询参数或表单数据)绑定到控制器中的方法参数,用@RequestParam绑定petId
@Controller
@RequestMapping("/pets")
public class EditPetForm {
// ...
@GetMapping
public String setupForm(@RequestParam("petId") int petId, Model model) {
Pet pet = this.clinic.loadPet(petId);
model.addAttribute("pet", pet);
return "petForm";
}
// ...
}