SpringMVC

1.web层 - 代替Servlet(接收请求、处理请求、做出响应)

2.作用
  • 做出响应

    • 页面跳转 - 返回字符串 - 默认转发

      • forward:/xxx/xxx

      • redirect:/xxx/xxx

    • 页面跳转 - 返回ModelAndView

    • 页面跳转 - 使用ServletAPI

    • 响应数据 - 设置响应正文

      • response - 流

      • 返回字符串 + @ResponseBody

    • 响应数据 - 返回JSON

      • 返回方法必须是复杂类型

      • @ResponseBody @RestController(=@Controller + @ResponseBody)

  • 获取请求

    • 获取基本类型参数

      • 请求参数参数名和@Controller方法的参数名保持一致

      • @RequestParam

    • 获取对象类型参数:请求参数参数名和对象属性名保持一致

    • 获取JSON

      • JSON的key和对象属性名保持一致

      • 对象要使用@RequestBody

  • 统一异常处理

  • 参数校验

  • 拦截器 - 登陆验证

3.配置
  • lombok

  • spring web

4.注解

1) @Controller:放在类上,表示这是一个控制器类,实例化对象!

2) @RequestMapping("/test"):可以放在类和方法上,用来设置路径

  • 方法的路径:类的路径 + 方法的路径

    • 如果类没有路径,方法路径就是方法路径

    • 方法如果希望被外界访问,必须设置路径

  • 属性

    • value

      • 指定类或方法的地址,可以配置多个值

      • @RequestMapping如果没有指定属性,则()中的值就是value给的

    • mathod

      • 指定方法能够接收的请求方式

      • 不指定就表示任何请求都能接收

3) @ResponseBody :将方法返回的数据作为响应体进行响应 - 将方法返回的数据作为响应内容(JSON字符串返回前端)发送给浏览器而不是页面跳转

如果方法返回的是对象,将数据转换成JSON发送给浏览器

4)@RestController:= 1+3,放在类上,表示控制器类,且类中方法都是JSON

5)限制地址接收方式

  • @GetMapping:限制只接收get请求

  • @PostMapping:限制只接收post请求

6)@RequestBody:将请求中的JSON转换为Java对象

@RequestParam(name="???"):参数绑定

7)@DeleteMapping

5.MVC运行流程
6.组件简介
  • 前端控制器

  • 处理器映射器

  • 处理器适配器

  • 处理器Controller

  • 视图解析器

  • 试图

7.转发和重定向
  • 重定向

    java 复制代码
         return "redirect:/jsp/success.jsp";
  • 转发

    java 复制代码
     return "forward:/jsp/success.jsp";
8.视图解析器配置
java 复制代码
 # 前缀
 spring.mvc.view.prefix=/a/
 # 后缀
 spring.mvc.view.suffix=.html
9.获取请求
  • restful风格的API:url+请求方式

    • get 查询 /dept @GetMapping

    • post 新增 /dept @PostMapping

    • delete 删除 /dept @DeleteMapping

    • put 修改 /dept @PutMapping

  • 获取Servlet相关API:写参数上(?????)

10.统一异常处理

---- 自定义异常处理器并使用

  • 控制器内部异常处理 - 只能处理某个Controller自己的异常

  • 全局异常处理

11.发送ajax请求
  • 如果没有设置copntentType,contentType的默认值是ap

plication/x-www-fprm-urlencoded,这个时候ajax发送的不是JSON数据,而是模拟了form表单提交

  • 如果ajax请求要发送JSON,contentType要设置为"application /json'charest=utf-8",data中发送的数据要是JSON字符串
12.参数校验
  • 引入依赖:如果Springboot版本大于2.3.x,则需要手动引入依赖

    java 复制代码
     <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-validation</artifactId>
     </dependency>
  • 参数校验未通过的统一异常处理

  • RequestBody和form表单参数校验:给实体类加上@Validated注解

  • requestParamPathVariable参数校验:必须在Controller类上标注**@Validated**注解,并在参数上声明约束注解

  • 参数校验 - 特殊情况:实体类参数中有对象属性,如何校验对象中的属性 - 在该属性上加@Valid注解

  • 校验规则分组:?????????讲些啥??

13.热部署
  • 热:无需重启就能让修改后的功能生效

  • 配置:见教程

    • IDEA配置

    • SpringBoot配置

相关推荐
爱奥尼欧16 分钟前
10.C++ string 实现详解
java·开发语言·c++
小飞学编程...17 分钟前
【equals 、Comparable、Comparator 三者的区别】
java·python
骇客野人26 分钟前
Java分布式任务调度方案(完整落地指南)
java·开发语言·分布式
JacksonMx31 分钟前
Spring @Async 坑点 + 改造方案
java·开发语言
Dovis(誓平步青云)1 小时前
牛奶不能减成负数:冰箱库存的筛选、去重与不可变更新
android·java·开发语言
SWAGGY..2 小时前
【C++初阶】:(15)模板进阶--从非类型参数到模板特化与分离编译
java·服务器·前端
肠畔码农2 小时前
深度解密 Redis 核心引擎:从 MULTI/EXEC 事务机制到 EVAL 脚本的原子性演进
数据库·redis·junit
楠楠子呀2 小时前
独立站聊天转化全链路:从二维码引流到数据复盘
java·javascript·数据仓库·python·c#·自动化·etl
yurenpai(27届找实习中)2 小时前
从零读懂AI智能客服(二):Java 多模块项目如何协作:Maven 依赖、Spring 注入与运行时装配
java·spring·maven
有来技术2 小时前
youlai-boot 实战:MinIO 停止维护,Docker 迁移 RustFS 完整记录
java·后端·docker