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接口
相关推荐
海兰1 小时前
【开篇】Spring AI、OpenClaw 和Hermes
java·人工智能·spring·spring ai
love530love1 小时前
如何在 Google Chrome 中强制开启 Gemini AI 侧边栏(完整图文教程)
前端·人工智能·chrome·windows
光影少年1 小时前
对typescript开发框架的理解?
前端·javascript·typescript
2401_882273721 小时前
pattern属性在旧版Android浏览器无效怎么办_手动验证补充【操作】
jvm·数据库·python
跨境数据猎手1 小时前
反向海淘代购系统:1688 / 淘宝自动代采 + API 同步(附可用源码)
前端
bzmK1DTbd1 小时前
微服务架构设计:Spring Cloud Gateway与Nacos集成
java·spring·微服务
上弦月-编程1 小时前
指针编程:高效内存管理核心
java·数据结构·算法
罗超驿1 小时前
双指针算法经典案例:LeetCode 283. 移动零(Java详解)
java·算法·leetcode
xieliyu.1 小时前
Java手搓数据结构:栈与队列模拟实现
java·数据结构·学习