核心架构的具体流程步骤如下:
上述流程只是核心流程,这里我们再补充一些其它组件:
Spring进阶 - SpringMVC实现原理之DispatcherServlet的初始化过程
Spring进阶 - SpringMVC实现原理之DispatcherServlet处理请求的过程
mvc是一种设计模式(设计模式就是日常开发中编写代码的一种好的方法和经验的总结)。模型(model)-视图(view)-控制器(controller),三层架构的设计模式。用于实现前端页面的展现与后端业务数据处理的分离。
mvc设计模式的好处
a. 分层设计,实现了业务系统各个组件之间的解耦,有利于业务系统的可扩展性,可维护性。
b.有利于系统的并行开发,提升开发效率。
注意:由于form表单不支持put和delete方式提交,所以需要一些方法去解决;
@Pathvariable、@RequestHeader、@RequestParam、@CookieValue、@RequestBody、@RequestAttribute、@MatrixVariable 矩阵变量
If the method parameter is Map<String, String>
then the map is populated with all path variable
names and values.(map可以取到所有的参数。)
文档:
If the method parameter is Map<String, String>, MultiValueMap<String, String>, or HttpHeaders then the map is populated with all header names and values.
map可以取到所有的参数
@RequestParam
获取参数,用于非rest风格 ,可以指定默认值
也可以使用map取到所有参数。
@CookieValue
获取cookie
@RequestBody
获取请求体 (只有post才有请求体)
@RequestAttribute
获取request域属性。 可用于转发的时候,携带参数
Springboot默认禁用了矩阵变量功能!!!
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Override
public void configurePathMatch(PathMatchConfigurer configurer) {
UrlPathHelper urlPathHelper = new UrlPathHelper();
//开启矩阵变量功能
urlPathHelper.setRemoveSemicolonContent(false);
configurer.setUrlPathHelper(urlPathHelper);
}
}
url路径:
http://localhost:8080/cars/sell;low=34;brand=byd;brand=haha
结果:
{"path":"sell","low":34,"brand":["byd","haha"]}
测试二
:
@GetMapping("/boss/{bossId}/{empId}")
@ResponseBody
public Map boss(@MatrixVariable(value = "age", pathVar = "bossId") Integer bossAge,
@MatrixVariable(value = "age", pathVar = "empId") Integer empAge) {
Map<String, Object> map = new HashMap<>();
map.put("bossAge", bossAge);
map.put("empAge", empAge);
return map;
}
url路径:
http://localhost:8080/boss/1;age=20/2;age=10
结果:
{"bossAge":20,"empAge":10}
RequestMapping注解有六个属性 | |
---|---|
value | 指定请求的实际地址,指定的地址可以是URI Template 模式 |
method | 指定请求的method类型, GET、POST、PUT、DELETE等; |
consumes | 指定处理请求的提交内容类型(Content-Type),例如application/json,text/html; |
produces | 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回; |
params | 指定request中必须包含某些参数值是,才让该方法处理。 |
headers | 指定request中必须包含某些指定的header值,才能让该方法处理请求。 |
作用: 该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。
使用时机:返回的数据不是html标签的页面,而是其他某种格式的数据时(如json、xml等)使用;