SpringMVC是什么?
SpringMVC是一个Spring框架的一个模块
Spring WebMVC是基于Servlet API构建的原始Web框架
从一开始就包含在Spring框架中
SpringMVC是基于一个mvc设计模式的web框架
DispatcherServlet:前端控制器,不用程序员编写,springmvc提供
HandlerMapping:处理器映射器,负责查找处理请求的Handler,不用程序员编写,springmvc提供
HandlerAdapter:处理器适配器,负责调用对应Handler的功能方法处理器请求,不用程序员编写,spring提供。
Handler:处理器(后端控制器),负责真正处理请求的类,需要程序员编写,编程时通常会将Handler叫做Controller(控制器)
ModelAndView:模型数据域逻辑视图的综合体,不需要程序员编写,springmvc提供
ViewResolver:视图解析器,负责将逻辑视图解析成真正的视图
真正的视图=前缀+逻辑视图名+后缀
不需要程序员编写,springmvc提供
View:视图,程序员要编写。视图可以jsp、html等。
整个流程如下:
1.浏览器发送请求,DispatcherServlet中央处理器接收之后,发给HandlerMapping
2.发给HandlerMapping后,HandlerMapping进行处理,处理出需要哪种处理器,然后返回拦截器和处理器3.然后DispatcherServlet中央处理器将Handler给HandlerAdapter给HandlerAdapter,让HandlerAdapter调用对应Handler的功能方法处理器请求,返回一个ModelAndView
4.DispatcherServlet中央处理器将ModelAndView传给ViewResolver视图解析器,将逻辑视图解析成真正的视图之后,返回View
5.将View进行视图渲染,传给游览器。
主要的模块
DispatcherServlet
所有请求的人口
- Controller
定义了每个请求如何处理 - xxxResolver
• ViewResolver
视图解析器
• HandlerExceptionResolver
异常解析器
• MultipartResolver
文件上传解析器 - HandlerMapping
处理请求如何映射到Controller上面
SpringMVC常用注解
- @Controller
定义了一个控制器 - @RestController
@RestController是@Controller和@ResponseBody的结合体,只能注解类,return返回的值将被转换成json,字符串除外,直接写入HTTP相应体返回到页面中 - @RequestMapping
定义的Controller 处理哪一些请求,可以指定URL的path等等 - @GetMapping / @PostMapping
处理get/post请求 - @PutMapping / @DeleteMapping
处理Put/Delete请求 - @RequestBody / @ResponseBody / @ResponseStatus
分别对应到请求的报文体和我的响应的报文体,另外,ResponseStatus 可以指定我们请求返回的响应码
例子代码
@Controller
@RequestMapping("/coffee")
public class CoffeeController {
@Autowired
private CoffeeService coffeeService;
@GetMapping("/")
@ResponseBody
public List<Coffee> getAll() {
return coffeeService.getAllCoffee();
}
}
@RestController
@RequestMapping("/order")
@Slf4j
public class CoffeeOrderController {
@Autowired
private CoffeeOrderService orderService;
@Autowired
private CoffeeService coffeeService;
@PostMapping("/")
@ResponseStatus(HttpStatus.CREATED)
public CoffeeOrder create(@RequestBody NewOrderRequest newOrder) {
log.info("Receive new Order {}", newOrder);
Coffee[] coffeeList = coffeeService.getCoffeeByName(newOrder.getItems())
.toArray(new Coffee[]{});
return orderService.createOrder(newOrder.getCustomer(), coffeeList);
}
}
@Getter
@Setter
@ToString
public class NewOrderRequest {
private String customer;
private List<String> items;
}
@SpringBootApplication
@EnableJpaRepositories
@EnableCaching
public class WaiterServiceApplication {
public static void main(String[] args) {
SpringApplication.run(WaiterServiceApplication.class,args);
}
}
大致代码与原来的一样。执行,程序之后,我们用postman测试,测试案例如下:
查询咖啡:
查询结果以json格式输出
创建订单:
查询结果以json格式输出