SpringMVC知识图谱
- 概念:SpringMVC 是一种用于表现层的Web框架 
- 需要的包 - javax.servlet-api
- spring-webmvc
 
- 使用流程 - 定义 SpringMVC配置类 类似于Spring配置类
- 定义 Servlet容器配置类,用于启动容器时加载springmvc配置,设置springmvc的处理路径- 配置类需 继承 AbstractDispatcherServletInitializer	- 重写 加载springmvc配置的方法- 返回 AnnotationConfigWebApplicationContext
 
- 重写 springmvc处理路径的方法
- 重写 spring的配置方法
 
- 重写 加载springmvc配置的方法
 
- 配置类需 继承 AbstractDispatcherServletInitializer	
 
- 启动服务器初始化过程 - 服务器启动,执行ServletContainersInitConfig类,初始化web容器 
- 执行createServletApplicationContext方法,创建了WebApplicationContext对象 
- 加载SpringMvcConfig执行@ComponentScan加载对应的bean 
- 加载UserController,每个@RequestMapping的名称对应一个具体的方法 
- 执行getServletMappings方法,定义所有的请求都通过SpringMVC 
 
- 单次请求流程 - 单次请求过程 - 发送请求localhost/save 
- web容器发现所有请求都经过SpringMVC,将请求交给SpringMVC处理 
- 解析请求路径/save 
- 由/save匹配执行对应的方法save() 
- 执行save() 
- 检测到有@ResponseBody直接将save()方法的返回值作为响应体返回 
 
 
- 常用注解 - @EnableWebMvc- 开启自动转换json数据支持,需要导入Jakson包
- 根据类型匹配对应的转换器
 
- @Controller- 声明类为一个SpringMVC的控制器,同时也是一个Bean
 
- @RequestMapping- 设置请求访问路径
- 可以写在类或者方法上
 
- @ResponseBody- 设置响应内容为当前返回值,无需解析
 
- @RequestBody- 接收请求体里的内容,一般用于接收json
 
- @RequestParam- 映射请求参数和请求处理方法的参数,映射集合必加
- 用于接收url和表单的参数
 
- @DateTimeFormat- 用于接收日期 例如2001/10/9
 
 
- @EnableWebMvc
- 请求参数传递 - 请求参数自动转换映射是由Converter接口以及其实现类提供的
- 请求参数名与请求处理方法参数名相同时可自动映射- 如果不同 可以使用@RequestParam 指定请求参数的名
 
- 请求参数名与POJO实体类的属性名相同时可自动映射- 如果嵌套实体类,则请求参数名.xxx就映射到内嵌的实体中
 
- 请求参数名多个相同,请求处理方法可以用数组接收- 如果用List等集合接收则需要加@RequestParam
 
- 如果接收请求体里的参数,则需要在请求处理方法中添加@RequestBody,一般用于json
- 如果接收日期类型,默认请求为2001/10/9直接使用Date类接收,如果请求为2001-10-9则需要使用@DateTimeFormat
 
- 响应 - 响应类型自动转换是由HttpMessageConverter接口实现的
- 默认返回页面名
- 如果返回其他数据,可以使用@ResponseBody
 
- REST风格 - REST (Representational State Transfer) ,表现形式状态转换
- 即将请求路径转换为请求参数的风格
- 优点- 安全,隐藏资源的行为,无法通过地址得知何种操作
- 书写简化
 
- 行为动作- Get 查询
- Post 新增
- Put 修改
- Delete 删除
 
- 常用注解- @RestController- 表示一个类是REST风格的控制器
- 包括了@Controller 和 @ResponseBody
 
- @GetMapping- 只接受Get请求
 
- @PostMapping- 只接受Post请求
 
- @PutMapping- 只接受Put请求
 
- @DeleteMapping- 只接受Delete请求
 
- @PathVariable- 指明参数来自于路径
- /{id} 将请求路径变为请求参数,添加此注解
 
 
- @RestController
 
- WebMvcConfigurationSupport 类 - 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23- /** 解决跨域问题 **/ 
 void addCorsMappings(CorsRegistry registry) ;
 /** 添加拦截器 **/
 void addInterceptors(InterceptorRegistry registry);
 /** 视图跳转控制器 **/
 void addViewControllers(ViewControllerRegistry registry);
 /** 这里配置视图解析器 **/
 void configureViewResolvers(ViewResolverRegistry registry);
 /** 配置内容裁决的一些选项 **/
 void configureContentNegotiation(ContentNegotiationConfigurer configurer);
 /** 视图跳转控制器 **/
 void addViewControllers(ViewControllerRegistry registry);
 /** 静态资源处理 避免静态资源被拦截**/
 void addResourceHandlers(ResourceHandlerRegistry registry);
 /** 默认静态资源处理器 **/
 void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer);
- 异常处理器 - 用于拦截表现层出现的所有异常,统一处理
- @ControllerAdcice
- @RestControllerAdcice 表示类
- @ExceptionHandler 表示处理方法,指定处理的异常类型
- 异常处理方案- 项目异常分类- 业务异常 BusinessException- 规范用户行为异常
- 不规范用户行为异常
 
- 系统异常 SystemException- 可预计无法避免的异常
 
- 其他异常 Exception- 编程人员未预计到的异常
 
 
- 业务异常 BusinessException
- 自定义异常,包装,抛出
 
- 项目异常分类
 
- 拦截器 - (Interceptor )是一种动态拦截方法调用的机制
- 作用- 在指定方法(控制器)调用前后执行预先定义好的代码
- 阻止原方法的执行
 
- 制作拦截器- 实现HandlerIntercepter
- 重写 preHandler 控制器执行前
- 重写 postHandler 控制器执行后
- 重写 afterCompletion 请求完成后
 
- 配置拦截器- 或 继承 WebMvcConfigurationSupport 类
- 或 实现 WebMvcConfigurer 接口
- 重写addInterceptors方法,注册拦截器,配置拦截路径
 
- 拦截器参数- 基础参数- request 请求对象
- response 响应对象
- handler 拦截的方法(反射)
 
- posthandler- modelAndView 控制器返回的视图和模型
- exception 处理过程中的异常
 
 
- 基础参数
- 拦截器链- 配置多个拦截器时形成拦截器链
- 拦截器的配置顺序就是拦截器的运行顺序 - prehandler是顺序
- posthandler和afterCompletion 逆序
- prehandler返回false就会阻挡后面配置的拦截器
 
 
 
