Spring Boot 中使用 Spring MVC基础

Spring MVC基础

  • 一、控制器 controller
    • 1.定制控制器的方法
      • (1)接收请求
      • (2)接收请求参数
      • (3)返回值
  • 二、模型 Modle
  • 三、视图 View
  • 四、总结


  • Spring MVC 是非常著名的 Web 应用框架,现在的大多数 Web 项目都采用 Spring MVC。它与 Spring 有着紧密的关系。是 Spring 框架中的模块,专注 Web 应用,能够使用 Spring 提供的强大功能,IOC、AOP等。
  • Spring MVC 框架底层是基于 Servlct 技术。遵循 Servlet 规范,Web 组件 Servlet 、Filter、Listener在 Spring MVC 中都能使用。同时 Spring MVC 也是基于 MVC 架构模式的,职责分离,每个组件只负责自己的功能,组件解耦。
  • Spring Boot 的自动配置按约定编程极大简化,提高了 Web 应用的开发效率。

一、控制器 controller

  • 控制器是一种由 Spring 管理的 Bean 对象,赋予角色是“控制器”。作用是处理请求,接收浏览器发送过来的参数,将数据或视图应答给浏览器或者客户端 App等
  • 创建一个控制器对象:创建普通 Java 类,其中定义 public 方法。类上注解 @Controller或者@RestController。
    • @Controller和@RestController注解的区别:

      • @RestController包含了@Controller的功能,同时加入了@ResponseBody的注解。
      • 表示当前控制器类中的方法,都会默认加入@ResponseBody的功能。方法的返回值是数据可以通过 HttpServletResponse 输出给浏览器。
      @Target({ElementType.TYPE})
      @Retention(RetentionPolicy.RUNTIME)
      @Documented
      @Controller
      @ResponseBody
      public @interface RestController {@AliasFor(annotation = Controller.class)String value() default "";
      }
      
    • @Controller注解有@Component的功能,控制器类对象是Spring容器管理的。

      @Target({ElementType.TYPE})
      @Retention(RetentionPolicy.RUNTIME)
      @Documented
      @Component
      public @interface Controller {@AliasFor(annotation = Component.class)String value() default "";
      }
      

1.定制控制器的方法

  • Controller 类中的方法处理对应 URI 的请求,一个(或多个)URI 请求交给一个方法处理。就是一个普通的方法,方法有参数,返回值。方法上面加入@RequestMapping,说明这个 URI 由这个方法处理。
    在这里插入图片描述

(1)接收请求

  • @RequestMapping:用于将 Web 请求映射到控制器类的方法。此方法处理请求。可用作在类上或方法上。在类上和方法上同时使用。重要的属性如下:
    • Value:别名 path 表示请求的 URI,在类和方法上同时使用 value,方法上的继承类上的 value。
    • method:请求方式,支持 GET、POST、HEAD、OPTIONS、PUT、PATCH、DELETE、TRACE。
      • 值为:RequestMethod[] method(),RquestMethod 是 enum 类型。
  • 快捷注解:
    • @GetMapping: 表示 get 请求方式的@RequestMapping
    • @PostMapping:表示 post 请求方式的@RequestMapping
    • @PutMapping:表示 put 请求方式的@RequestMapping
    • @DeleteMapping: 表示 delete 请求方式的@RequestMapping
  • Spring MVC 支持多种策略,匹配请求路径到控制器方法。AntPathMatcher、PathPatternParser。Spring Boot3默认使用的是 PathPatterParser 策略。
  • 可以通过 spring.mvc.pathmatch.matching-strategy 配置项来设置匹配的策略。
  • PathPatternParser 中有关URI的定义:
    • 通配符:
      • ?:一个字符
      • *:0个或多个字符。在一段路径中匹配字符。(不能匹配 /)
      • **:匹配0个或多个路径段。(相当于所有)
      • 正则表达式:支持正则表达式
    • RESTFul 的支持路径变量
      • {变量名}
      • {myname:[a-z]+}:正则匹配 a-z 的多个字符,路径变量名称”myname“。结合@PathVariable(“myname”)使用。
      • {*myname}:匹配多个路径一直到 URI 结尾。
        在这里插入图片描述
        • 注意:@GetMapping(“/user/{*id}/{*data}”)是无效的,{*XXX}后面不能再有匹配规则了。
      • 当不使用通配符的时候,那么就是一个URI对应一个请求,实际项目中一般都是这样的。
        在这里插入图片描述

(2)接收请求参数

  • 用户在浏览器中点击按钮,会发送一个请求给服务器,其中包含让服务器程序需要做什么的参数。这些参数发送给控制器方法。控制器方法的形参列表接收请求参数。
  • 解析参数需要的值,SpringMVC 中专门有一个接口来干这个事,这个接口就是:(处理器方法参数解析器)HandlerMethodArgumentResolver,就是解析请求得到 Controller 方法的参数的值。
  • 控制器方法参数类型看官方文档 ====> https://docs.spring.io/spring-framework/reference/web/webmvc/mvc-controller/ann-methods/arguments.html
  • 常见的接收请求参数的方法:
    • ① 请求参数与形参一一对应,适用于简单类型。比如 String、int、double等。适用于参数个数比较少的情况。

      • 前端传递过来的参数都是字符串类型的。类型的转化是由 SpringMVC 框架来完成的,如果类型转化失败会报错的。
        在这里插入图片描述
    • ② 对象类型,控制器方法参数是对象,请求的多个参数名与属性名相对应。
      在这里插入图片描述

    • ③ @RequestParam 注解,把请求中的指定名称的参数传递给控制器中的形参赋值。(将查询参数,form 表单数据解析到方法参数,解析 multipart 文件上传)。

      • @RequestParam 注解的 value 属性值没有对应的参数值则会直接报 400 错误,因为 required 属性默认为 true ,如果加上 required=false ,没对应上则不会报错,而是获取值为 null 。
      // @RequestParam 注解源码
      @Target({ElementType.PARAMETER})
      @Retention(RetentionPolicy.RUNTIME)
      @Documented
      public @interface RequestParam {@AliasFor("name")String value() default "";  //请求参数中的名称@AliasFor("value")String name() default "";boolean required() default true;  //请求参数中是否必须提供此参数String defaultValue() default "\n\t\t\n\t\t\n\ue000\ue001\ue002\n\t\t\t\t\n";
      }
      

      在这里插入图片描述

    • ④ HttpServletRequest 使用 request 对象就收参数,request.getParameter(“XXX”)获取对应的值,原始的 JavaWeb 中的方式。
      在这里插入图片描述

    • ⑤ RequestBody注解,接收前端传递的Json格式参数。(接收请求体中的 json 数据)。
      在这里插入图片描述

    • ⑥ @RequestHeader,从请求 header 中获取某些值。
      在这里插入图片描述

    • ⑦ 数组参数接收多个值。
      在这里插入图片描述

(3)返回值

  • ① 不使用 @ResponseBody的 String 返回值,返回的是一个页面视图。
    在这里插入图片描述
  • ② 使用 @ResponseBody的 String 返回值,返回的是一个字符串。
    在这里插入图片描述
  • ③ ModelAndView 返回值,返回的是一个视图其中包含数据。(最后数据都是放到 Request 中的)
    在这里插入图片描述
  • ④ 返回自定义的对像,默认的返回格式是json字符串(有jackson工具)
    在这里插入图片描述
  • ⑤ 返回 Map,默认的返回格式是json字符串(有jackson工具)
    在这里插入图片描述
  • ⑥ ResponseEntity:包含数据和自定义的HttpStatus Code。(默认转为json格式的字符串)
    在这里插入图片描述

二、模型 Modle

  • 在许多实际项目需求中,后台要从控制层直接返回前端所需要的数据,这时 Model 大家族就派上用场了。
  • Model Spring MVC 中的 ”M“,是用来传输数据的。从控制层直接返回数据给前端。内置的 JSP,模板技术能够展现 Model 中存储的数据。
  • Model 可以是承载数据的,也可以是处理具体业务的类,这些都是指 Spring MVC 中的Model。

三、视图 View

  • Spring MVC 中的 View(视图)用于展示数据的,视图技术的使用是可插拔的。无论选择使用 thymleaf、jsp 还是其他技术,classpath 有 jar 就能使用视图了。开发者主要就是更改配置。SpringBoot3 不推荐使用 FreeMarker、JSP 这些了。建议使用 Thymeleaf。
  • org.springframework.web.servlet.View 视图的接口,实现此类的都是视图类,视图类作为 Bean 被 Spring 管理。当然这些都不需要开发者编写代码。
  • Spring MVC 的 View(视图)与控制器方法的返回值有关。
  • @ResponseBody,@RestController 适合前后端分离项目
    • String:表示返回一个字符串。
    • Object//map:如果有 Jackson 库,将其转为 Json 字符串。
  • spring.thymeleaf.prefix = classpath:/templates/ =====> thymeleaf 页面视图默认存放的位置。
  • spring.thtmeleaf.suffix = .html ===⇒ thymeleaf 页面视图默认的后缀名。

四、总结

  • SpringMVC 处理请求都是围绕着控制器的方法的。
    • public 方法。
    • 方法名称自定义。
    • 方法的形参表示接收的请求参数。
      • 逐一按名称对应接收参数。String name, Integer age。
      • 使用自定义对象,接收多个参数。User(name ,age, sex)。
      • 接收json,使用@RequestBody注解,加上自定义对象。(也可以接收请求体中的json数据)
      • 使用Reader、InputStream作为参数,读取Post请求体中的内容。
      • 使用HttpServletRequest作为参数,调用getParameter()方法接收参数。
      • 数组参数Integer[] id。
      • @RequestParam
      • @RequestHeader
    • 控制器方法的返回值,表示给请求方的相应。响应内容。
      • String,表示视图页面(xxxx.html …),没有使用@ResonseBody。
      • ModelAndView:是数据和视图的结合体,包含了数据和视图。
      • 自定义对象:默认将自定义对象转为json格式,输出给浏览器。
      • ResponseEntity:包含数据和自定义的HttpStatus Code。
      • Map:默认将key和Value转为json字符串。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/248468.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mac安装及配置MySql及图形化工具MySQLworkbench安装

Mac下载配置MySql mysql下载及安装 下载地址:https://dev.mysql.com/downloads/mysql/ 根据自己电脑确定下载x86还是ARM版本的 如果不确定,可以查看自己电脑版本,终端输入命令 uname -a 点击Download下载,可跳过登录注册&…

Tensorflow2.0笔记 - Tensor的限值clip操作

本笔记主要记录使用maximum/minimum,clip_by_value和clip_by_norm来进行张量值的限值操作。 import tensorflow as tf import numpy as nptf.__version__#maximum/minimumz做上下界的限值 tensor tf.random.shuffle(tf.range(10)) print(tensor)#maximum(x, y, nameNone) #对…

Qt6入门教程 14:QToolButton

目录 一.简介 二.常用接口 1.void setMenu(QMenu * menu) 2.void setPopupMode(ToolButtonPopupMode mode) 3.void setToolButtonStyle(Qt::ToolButtonStyle style) 4.void setArrowType(Qt::ArrowType type) 5.void setDefaultAction(QAction * action) 三.实战演练 1…

基于Prompt Learning的信息抽取

PTR: Prompt Tuning with Rules for Text Classification 清华;liuzhiyuan;通过规则制定subpromptRelation Extraction as Open-book Examination: Retrieval-enhanced Prompt Tuning Relation Extraction as Open-book Examination: Retrieval-enhance…

spring boot 使用 Kafka

一、Kafka作为消息队列的好处 高吞吐量:Kafka能够处理大规模的数据流,并支持高吞吐量的消息传输。 持久性:Kafka将消息持久化到磁盘上,保证了消息不会因为系统故障而丢失。 分布式:Kafka是一个分布式系统&#xff0c…

比Filebeat更强大的日志收集工具-Fluent bit的http插件实战

文章目录 1.前言2. fluent bit http插件配置以及参数详解3. Http 接口服务3.1 开发Http 接口服务3.2 重启fluent bit向http web服务发送数据 1.前言 Fluent Bit 的 HTTP 插件提供了一种灵活而通用的机制,可用于将日志数据 从各种环境中传输到指定的远程服务器&#…

C++核心编程:类和对象 笔记

4.类和对象 C面向对象的三大特性为:封装,继承,多态C认为万事万物都皆为对象,对象上有其属性和行为 例如: 人可以作为对象,属性有姓名、年龄、身高、体重...,行为有走、跑、跳、说话...车可以作为对象,属性有轮胎、方向盘、车灯…

力扣hot100 子集 回溯 超简洁

Problem: 78. 子集 文章目录 思路复杂度Code 思路 &#x1f468;‍&#x1f3eb; 参考题解 复杂度 时间复杂度: 添加时间复杂度, 示例&#xff1a; O ( n ) O(n) O(n) 空间复杂度: 添加空间复杂度, 示例&#xff1a; O ( n ) O(n) O(n) Code class Solution {List<Li…

设计模式之框架源码剖析(实战+图解)

Java设计模式 1&#xff0c;概述 随着软件开发人员人数的增多&#xff0c;一些公司急需一些高端人才。作为一个高端人才&#xff0c;设计面向对象软件是必不可少的能力&#xff0c;而软件设计是需要很深的功力&#xff0c;设计模式就要求你必须掌握。 2&#xff0c;本章特色…

[GN] 设计模式——面向对象设计原则概述

文章目录 面向对象设计原则概述单一职责原则开闭原则里氏代换原则依赖倒转原则接口隔离原则合成复用原则迪米特法则 总结 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 面向对象设计原则概述 单一职责原则 一个类只负责一个功能领域中的相应职责 类…

C#,数据检索算法之三元搜索(Ternary Search)的源代码

数据检索算法是指从数据集合&#xff08;数组、表、哈希表等&#xff09;中检索指定的数据项。 数据检索算法是所有算法的基础算法之一。 本文发布 三元搜索&#xff08;Ternary Search&#xff09;的源代码。 1 文本格式 using System; namespace Legalsoft.Truffer.Algo…

【Java异常处理与try-catch-finally】

Java异常处理与try-catch-finally try块是被监视的代码块&#xff0c;可能会发生异常的地方。当try块中的代码抛出了异常&#xff0c;程序会立即转入catch块&#xff0c;catch块根据捕获的异常类型进行处理。 Java异常处理是一种机制&#xff0c;用于捕获并处理在程序执行过程中…

flutter module打包成framework引入原生工程

Flutter - 将 Flutter 集成到现有项目&#xff08;iOS - Framework篇&#xff09; 本篇文章大幅参考了 caijinglong 大佬的总结文章&#xff1a; 把flutter作为framework添加到已存在的iOS中[1] 用 Flutter 来开发&#xff0c;从来都不可能是新开的一个纯 Flutter 项目&#xf…

基于JavaWeb开发的礼品商贸服务平台【附源码】

基于JavaWeb开发的礼品商贸服务平台【附源码】 &#x1f345; 作者主页 央顺技术团队 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; &#x1f345; 文末获取源码联系方式 &#x1f4dd; &#x1f345; 查看下方微信号获取联系方式 承接各种定制系统 &#…

内网安全:NTLM-Relay

目录 NTLM认证过程以及攻击面 NTLM Relay攻击 NTLM攻击总结 实验环境说明 域横向移动&#xff1a;NTLM中继攻击 攻击条件 实战一&#xff1a;NTLM中继攻击-CS转发上线MSF 原理示意图 一. CS代理转发 二. MSF架设路由 三. 适用smb_relay模块进行中继攻击 域横向移动…

JavaWeb,Vue的学习(下)

Router路由 路由&#xff08;Router&#xff09;简介 定义&#xff1a;路由就是根据不同的 URL 地址展示不同的内容或页面。通俗理解&#xff1a;路由就像是一个地图&#xff0c;我们要去不同的地方&#xff0c;需要通过不同的路线进行导航。 路由的作用 单页应用程序&…

【Java程序设计】【C00184】基于SSM的旅游网站管理系统(论文+PPT)

基于SSM的旅游网站管理系统&#xff08;论文PPT&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于ssm的旅游网站管理系统 本系统分为前台用户、后台管理员2个功能模块。 前台用户&#xff1a;当游客打开系统的网址后&#xff0c;首先看到的就是首…

手机屏幕生产厂污废水处理需要哪些工艺设备

随着手机行业的快速发展&#xff0c;手机屏幕生产厂的规模也越来越大&#xff0c;但同时也带来了大量的污废水排放问题。为了保护环境和人类的健康&#xff0c;手机屏幕生产厂需要采取适当的工艺设备来处理污废水。本文将介绍手机屏幕生产厂污废水处理所需的工艺设备。 首先&am…

LeetCode —— 43. 字符串相乘

&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️Take your time ! &#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️…

OpenCV 2 - 矩阵的掩膜操作

1知识点 1-1 CV_Assert(myImage.depth() == CV_8U); 确保输入图像是无符号字符类型,若该函数括号内的表达式为false,则会抛出一个错误。 1-2 Mat.ptr(int i = 0); 获取像素矩阵的指针,索引 i 表示第几行,从0开始计行数。 1-3 const uchar* current = mylmage.ptr(row); 获得…