springMVC小结

发布于:2022-11-29 ⋅ 阅读:(205) ⋅ 点赞:(0)

注解

  • @Controller

在这里插入图片描述

  • @RequestMapping
    在这里插入图片描述
  • @ResponseBody

在这里插入图片描述
在这里插入图片描述

  • @ComponentScan
    在这里插入图片描述

  • @RequestParam
    在这里插入图片描述

  • @EnableWebMvc
    -
    注意:SpringMVC的配置类把@EnableWebMvc当做标配配置上去,不要省略

  • @RequestBody
    在这里插入图片描述
    @RequestBody与@RequestParam区别
    区别:

  • @RequestParam用于接收url地址传参,表单传参【application/x-www-formurlencoded】

  • @RequestBody用于接收json数据【application/json】

  • @DateTimeFormat
    在这里插入图片描述

  • @PathVariable
    在这里插入图片描述
    关于接收参数,我们学过三个注解@RequestBody、@RequestParam、@PathVariable,这三个注解之间的区别和应用分别是什么?
    区别:

  • @RequestParam用于接收url地址传参或表单传参

  • @RequestBody用于接收json数据

  • @PathVariable用于接收路径参数,使用{参数名称}描述路径参数
    应用:

  • 后期开发中,发送请求参数超过1个时,以json格式为主,@RequestBody应用较广

  • 如果发送非json格式数据,选用@RequestParam接收请求参数

  • 采用RESTful进行开发,当参数数量较少时,例如1个,可以采用@PathVariable接收请求路径变量,通常用于传递id值

  • @RestController
    在这里插入图片描述

  • @GetMapping @PostMapping @PutMapping @DeleteMapping
    在这里插入图片描述

  • @RestControllerAdvice
    在这里插入图片描述
    此注解自带@ResponseBody注解与@Component注解,具备对应的功能
    在这里插入图片描述

  • @ExceptionHandler
    在这里插入图片描述
    此类方法可以根据处理的异常不同,制作多个方法分别处理对应的异常

SpringMVC

springmvc运行机制

  • 客户端发送请求到达中央控制器DispatcherServlet

  • 由中央控制器负责解析整个SpringMVC的运行流程

  • 当中央控制器接收到请求之后,会将请求先交给HandlerMapping进行处理

  • HandlerMapping负责解析整个SpringMVC的业务流程,将请求分发给合适的处理器

  • 处理完成之后将处理的结果返回给中央控制器

  • 中央控制器将处理结果交给HandlerAdapter

  • 由HandlerAdapter负责适配不同类型的处理器,找到对应的Handler进行处理

  • Handler负责处理核心业务逻辑并返回响应的视图与模型 将响应结果封装成一个对象,ModelAndView

  • ModelAndView负责处理模型与视图 最终会将ModelAndView交给中央控制器 中央控制器将结果交给ViewResolver

  • ViewResolver负责解析响应结果,将其解析为具体的视图技术 根据解析结果找到View,由View使用具体的视图技术来进行具体的实现

  • 最终将处理完成的结果返回给中央控制器 由中央控制器将结果返回给客户端 最终在客户端生成对应的效果

在这里插入图片描述

  • 一次性工作
    1、创建工程,设置服务器,加载工程
    2、导入坐标
    3、创建web容器启动类,加载SpringMVC配置,并设置SpringMVC请求拦截路径
    4、SpringMVC核心配置类(设置配置类,扫描controller包,加载Controller控制器bean)
  • 多次工作
    1、定义处理请求的控制器类
    2、定义处理请求的控制器方法,并配置映射路径(@RequestMapping)与返回json数据(@ResponseBody)

将SpringMVC的使用过程总共分两个阶段来分析,分别是启动服务器初始化过程和单次请求过程

启动服务器初始化过程
在这里插入图片描述
在这里插入图片描述
单次请求过程
在这里插入图片描述

spring和springMVC分别管理的bean
在这里插入图片描述

  • SpringMVC加载其相关bean(表现层bean),也就是controller包下的类
  • Spring控制的bean
    业务bean(Service)
    功能bean(DataSource,SqlSessionFactoryBean,MapperScannerConfigurer等)

因为功能不同,如何避免Spring错误加载到SpringMVC的bean?

  • 加载Spring控制的bean的时候排除掉SpringMVC控制的bean

  • 方式一:Spring加载的bean设定扫描范围为精准范围,例如service包、dao包等
    在这里插入图片描述

  • 方式二:Spring加载的bean设定扫描范围为com.itheima,排除掉controller包中的bean
    在这里插入图片描述

  • 方式三:不区分Spring与SpringMVC的环境,加载到同一个环境中[了解即可]

有了Spring的配置类,要想在tomcat服务器启动将其加载,我们需要修改 ServletContainersInitConfig
在这里插入图片描述
对于上述的配置方式,Spring还提供了一种更简单的配置方式,可以不用再去创建
AnnotationConfigWebApplicationContext对象,不用手动register对应的配置类,如何实现?
在这里插入图片描述
在这里插入图片描述

形参与地址参数名不一致该如何解决

  • 解决方案:使用**@RequestParam**注解
    在这里插入图片描述

POJO参数:请求参数名与形参对象属性名相同,定义POJO类型形参即可接收参数
在这里插入图片描述
在这里插入图片描述

嵌套POJO参数:请求参数名与形参对象属性名相同,按照对象层次结构关系即可接收嵌套POJO属性参数
在这里插入图片描述

数组参数:请求参数名与形参对象属性名相同且请求参数为多个,定义数组类型即可接收参数发送请求和参数:
在这里插入图片描述
在这里插入图片描述

集合参数:同名请求参数可以使用@RequestParam注解映射到对应名称的集合对象中作为数据
在这里插入图片描述
对于JSON数据类型,我们常见的有三种:

  • json普通数组([“value1”,“value2”,“value3”,…])
  • json对象({key1:value1,key2:value2,…})
  • json对象数组([{key1:value1,…},{key2:value2,…}])
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
JSON对象数据
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
JSON对象数组
在这里插入图片描述
在这里插入图片描述
SpringMVC接收JSON数据的实现步骤为:

  • (1)导入jackson包
  • (2)使用PostMan发送JSON数据
  • (3)开启SpringMVC注解驱动,在配置类上添加@EnableWebMvc注解
  • (4)Controller方法的参数前添加@RequestBody注解

日期类型参数传递

  • 需要使用@DateTimeFormat
    在这里插入图片描述
    携带时间的日期
    在这里插入图片描述
    在这里插入图片描述

对于响应,主要就包含两部分内容:

  • 响应页面
  • 响应数据
    文本数据
    json数据

响应页面
在这里插入图片描述

返回文本数据
在这里插入图片描述
响应POJO对象
在这里插入图片描述
返回值为实体类对象,设置返回值为实体类类型,即可实现返回对应对象的json数据,需要依赖@ResponseBody注解和@EnableWebMvc注解

响应POJO集合对象
在这里插入图片描述
SpringMVC为什么会拦截静态资源呢?
在这里插入图片描述

SpringMVC需要将静态资源进行放行。
在这里插入图片描述
该配置类是在config目录下,SpringMVC扫描的是controller包,所以该配置类还未生效,要想生效需要将SpringMvcConfig配置类进行修改
在这里插入图片描述

拦截器

拦截器(Interceptor)是一种动态拦截方法调用的机制,在SpringMVC中动态拦截控制器方法的执行

作用:

  • 在指定的方法调用前后执行预先设定的代码
  • 阻止原始方法的执行
  • 总结:拦截器就是用来做增强

拦截流程
在这里插入图片描述
当有拦截器后,请求会先进入preHandle方法,如果方法返回true,则放行继续执行后面的handle[controller的方法]和后面的方法。如果返回false,则直接跳过后面方法的执行

多个拦截器如何工作
在这里插入图片描述

Rest风格

  • (Representational State Transfer),表现形式状态转换,它是一种软件架构风格
  • 根据REST风格对资源进行访问称为RESTful
  • REST的优点有:
    1、隐藏资源的访问行为,无法通过地址得知对资源是何种操作
    2、书写简化
    在这里插入图片描述
    如何携带数据参数
  • 修改@RequestMapping的value属性,将其中修改为/users/{id},目的是和路径匹配
  • 在方法的形参前添加@PathVariable注解
    在这里插入图片描述
    如果方法形参的名称和路径{}中的值不一致,该怎么办?
    在这里插入图片描述
    如果有多个参数需要传递该如何编写
    在这里插入图片描述
    Rest小结
  • (1)设定Http请求动作(动词)
@RequestMapping(value="",method = RequestMethod.POST|GET|PUT|DELETE)
  • (2)设定请求参数(路径变量)
@RequestMapping(value="/users/{id}",method = RequestMethod.DELETE)
@ReponseBody
public String delete(@PathVariable Integer id){
}

RESTful快速开发
在这里插入图片描述
在这里插入图片描述

本文含有隐藏内容,请 开通VIP 后查看