SpringMVC(SpringMVC简介、请求与响应(请求映射路径、请求参数、日期类型参数传递、响应json数据))

1.SpringMVC概述

  • Spring 是父框架、基础容器;SpringMVC 是 Spring 的一个子模块,专做 Web 层控制。SpringMVC 离不开 Spring,但 Spring 可以独立存在。
  • SpringMVC技术与Servlet技术功能等同,均属于web层开发技术
  • SpringMVc是一种基于Java实现MVc模型的轻量级Web框架
  • 优点
    • 使用简单,开发便捷(相比于Servlet)
    • 灵活性强

1.SpringMVC是一种表现层框架技术

2.SpringMVC用于进行表现层功能开发

2.SpringMVC入门案例

①:使用SpringMVC技术需要先导入SpringMVC坐标与Servlet坐标

②:创建SpringMVC控制器类(等同于Servlet功能)

③:初始化SpringMVC环境(同Spring环境),设定SpringMVC加载对应的bean

④:初始化Servlet容器,加载SpringMVC环境,并设置SpringMVC技术处理的请求

  • 名称:@Controller
  • 类型:类注解
  • 位置:SpringMVC控制器类定义上方
  • 作用:设定SpringMVC的核心控制器bean
  • 范例:
  • 名称:@RequestMapping
  • 类型:方法注解
  • 位置:SpringMVC控制器方法定义上方
  • 作用:设置当前控制器方法请求访问路径
  • 范例:
  • 相关属性:
    • value(默认):请求访问路径
  • 名称:@ResponseBody
  • 类型:方法注解
  • 位置:SpringMVC控制器方法定义上方
  • 作用:设置当前控制器方法响应内容为当前返回值,无需解析
  • 范例:


SpringMVC入门程序开发总结(1+N)

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

AbstractDispatcherServletInitializer类是SpringMvc提供的快速初始化Web3.0容器的抽象类

  • AbstractDispatcherServletInitializer提供三个接口方法供用户实现
  • createServletApplicationContext()方法,创建Servlet容器时,加载SpringMVc对应的bean并放入WebApplicationContext对象范围中,而webApplicationContext的作用范围为ServletContext范围,即整个web容器范围
  • getServletMappings()方法,设定SpringMVc对应的请求映射路径,设置为/表示拦截所有请求,任意请求都将转入到SpringMVc进行处理
  • createRootApplicationContext()方法,如果创建Servlet容器时需要加载非SpringMVc对应的bean,使用当前方法进行使用方式同createServletApplicationContext()

3.入门案例工作流程分析

启动服务器初始化过程

1.服务器启动,执行ServletContainersInitConfig类,初始化web容器

2.执行createServletApplicationContext方法,创建了WebApplicationContext对象

  1. 加载SpringMvcConfig

4.执行@ComponentScan加载对应的bean

5.加载UserController,每个@RequestMapping的名称对应一个具体的方法

ServletContext

6.执行getServletMappings方法,定义所有的请求都通过SpringMVC

单次请求过程

1.发送请求localhost/save

2.web容器发现所有请求都经过SpringMVC,将请求交给SpringMVC处理

3.解析请求路径/save

4.由/save匹配执行对应的方法save()

5.执行save()

6.检测到有@ResponseBody直接将save()方法的返回值作为响应求体返回给请求方

4.Bean加载控制

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

加载Spring控制的bean的时候,排除掉SpringMVc控制的bean

Controller加载控制与业务bean加载控制

  • SpringMVc相关bean(表现层bean)
  • Spring控制的bean
    • 业务bean (Service)
    • 功能bean(DataSource等)
  • SpringMVc相关bean加载控制
    • SpringMvc加载的bean对应的包均在com.itheima.controller包内
  • Spring相关bean加载控制
    • 方式一:Spring加载的bean设定扫描范围为com.itheima,排除掉controller包内的bean
    • 方式二:Spring加载的bean设定扫描范围为精准范围,例如service包、dao包等
    • 方式三:不区分Spring与SpringMVC的环境,加载到同一个环境中
  • 名称:@ComponentScan
  • 类型:类注解
  • 范例:
  • 属性
    • excludeFilters:排除扫描路径中加载的bean,需要指定类别(type)与具体项(classes)
    • includeFilters:加载指定的bean,需要指定类别(type)与具体项(classes)
  • bean的加载格式
  • 简化开发

5.PostMan介绍

PostMan简介

  • Postman是一款功能强大的网页调试与发送网页HTTP请求的chrome插件
  • 作用:常用于进行接口测试
  • 特征
  • 简单
  • 实用
  • 美观
  • 大方

PostMan基本使用

  • 注册登录
  • 创建工作空间/进入工作空间
  • 发起请求测试结果

6.设置请求映射路径

1.团队多人开发,每人设置不同的请求路径,冲突问题如何解决?

设置模块名作为请求路径前缀

请求映射路径

  • 名称:@RequestMapping
  • 类型:方法注解 类注解
  • 位置:SpringMVc控制器方法定义上方
  • 作用:设置当前控制器方法请求访问路径,如果设置在类上统一设置当前控制器方法请求访问路径前缀
  • 范例:
  • 属性
    • value(默认):请求访问路径,或访问路径前缀

7.get请求与post请求普通参数

Get请求传参

  • 普通参数:url地址传参,地址参数名与形参变量名相同,定义形参即可接收参数

Post请求参数

  • 普通参数:form表单post请求传参,表单参数名与形参变量名相同,定义形参即可接收参数

Post请求中文乱码处理

  • 为web容器添加过滤器并指定字符集,Spring-web包中提供了专用的字符过滤器

8.五种类型参数传递

请求参数

  • 参数种类
    • 普通参数
    • POJO类型参数
    • 嵌套POJO类型参数
    • 数组类型参数
    • 集合类型参数

名称:@RequestParam

类型:形参注解

位置:SpringMVc控制器方法形参定义前面

作用:绑定请求参数与处理器方法形参间的关系

范例:

参数:

required:是否为必传参数

defaultValue:参数默认值

  • POJO参数:请求参数名与形参对象属性名相同,定义POJO类型形参即可接收参数
  • 嵌套POJO参数:POJO对象中包含POJO对象
  • 嵌套POJO参数:请求参数名与形参对象属性名相同,按照对象层次结构关系即可接收嵌套POJO属性参数
  • 数组参数:请求参数名与形参对象属性名相同且请求参数为多个,定义数组类型形参即可接收参数
  • 集合保存普通参数:请求参数名与形参集合对象名相同且请求参数为多个,@RequestParam绑定参数关系

9.json数据传递参数

请求参数(传递json数据)

  • json数组
  • json对象(POJO)
  • json数组(POJO)

①:添加json数据转换相关坐标

②:设置发送json数据(请求body中添加json数据)

③:开启自动转换json数据的支持

注意事项:

@EnableWebMvc注解功能强大,该注解整合了多个功能,此处仅使用其中一部分功能,即json数据进行自动类型转换

④:设置接收json数据

名称:@EnableWebMvc

类型:配置类注解

位置:SpringMVC配置类定义上方

作用:开启SpringMVC多项辅助功能

范例:

名称:@RequestBody

类型:形参注解

位置:SpringMVc控制器方法形参定义前面

作用:将请求中请求体所包含的数据传递给请求参数,此注解一个处理器方法只能使用一次

范例:

  • POJO集合参数:json数组数据与集合泛型属性名相同,定义List类型形参即可接收参数

@RequestBody与@RequestParam区别

  • 区别
    • @RequestParam用于接收url地址传参,表单传参【application/x-www-form-urlencoded】
    • @RequestBody用于接收json数据【application/json】
  • 应用
    • 后期开发中,发送json格式数据为主,@RequestBody应用较广
    • 如果发送非json格式数据,选用@RequestParam接收请求参数

10.日期类型参数传递

  • 日期类型数据基于系统不同格式也不尽相同
    • 2088-08-18
    • 2088/08/18
    • 08/18/2088
  • 接收形参时,根据不同的日期格式设置不同的接收方式

名称:@DateTimeFormat

类型:形参注解

位置:SpringMVc控制器方法形参前面

作用:设定日期时间型数据格式

范例:

  • 属性:pattern:日期时间格式字符串

类型转换器

  • Converter接口
    • 请求参数年龄数据(String-->Integer)
    • 日期格式转换(String-->Date)
  • @EnableWebMvc功能之一:根据类型匹配对应的类型转换器

11.响应

  • 响应页面

  • 响应数据

    • 文本数据
    • json数据
  • 响应文本数据(了解)

  • 响应json数据(对象转json)
  • 响应json数据(对象集合转json数组)

名称:@ResponseBody

类型:方法注解

位置:SpringMVc控制器方法定义上方

作用:设置当前控制器方法响应内容为当前返回值,无需解析

范例:

  • HttpMessageConverter接口
相关推荐
YOU OU4 小时前
Redis基础常识与命令
数据库·redis·缓存
腻害兔4 小时前
【若依项目-产品经理视角】深度拆解 RuoYi-Vue-Pro 商城模块:从商品管理到交易引擎,50 张表撑起一整套电商系统
java·大数据·vue.js·产品经理·ai编程
不好听6134 小时前
从一行 JSX 到屏幕像素:前端开发者必须懂的浏览器渲染管线
前端
恒拓高科WorkPlus4 小时前
企业级内网即时通讯建设模型:BeeWorks内网IM四层架构
前端
码智社5 小时前
AES加密原理详解及Java实现加解密实战
java·开发语言
前端小李子5 小时前
前端环境变量裸奔?我用 EnvShield 给它穿了件防弹衣
前端
youtootech5 小时前
HarmonyOS《柚兔学伴》项目实战25-我的页面、Web 嵌入与项目总结
前端·华为·harmonyos
小林ixn6 小时前
从零到一理解 React 父子组件通信:手写一个 Todo 应用带你彻底搞懂单向数据流
前端·javascript·react.js
萧瑟余晖6 小时前
JDK 26 新特性详解
java·开发语言
Database_Cool_6 小时前
OLTP 和 OLAP 区别详解:分析型数据库和事务型数据库怎么选(附阿里云 AnalyticDB MySQL 选型指南)
数据库·mysql·阿里云