一文带你迅速入门SprIngMVC,看这一篇就足够了!

news2024/11/16 12:04:07

0. 什么是SpringMVC

要知道什么是SpringMVC,我们首先得知道什么 MVC,MVC是软件工程中的一种架构模式,分为 Model、View、Control。它把软件系统分为模型、视图和控制器三个基本部分。
在这里插入图片描述

  • Model:模型,应用程序负责数据逻辑部分,在数据库中存取数据。
  • View:视图,应用程序中处理数据显示部分,是根据模型数据创建的。
  • Control:控制器,应用程序处理用户交互的部分,负责从视图读取数据,控制用户输入向模型发送数据。

MVC执行流程:
1. 用户请求先发给 Control
2. Control 将请求转发给 Model
3. Model 处理业务将数据返回给 Control
4. Control 将数据给 View 引擎
5. View 转换数据生成最终页面给用户

SpringMVC 是一个框架,是基于 Servlet API 构建的。

SpringMVC 和 MVC 的关系,MVC是一种思想,就像IOC一样;SpringMVC是具体的一种实现了MVC的模式(就像DI一样),并继承了Servlet API 的Web框架。

1. SprinMVC学什么?

要想快速上手 SpringMVC,只需要掌握三个功能:

  • 连接功能:将用户(浏览器)和 Java程序连接起来,让我们可以在浏览器输入一个网址就能调用我们的程序
  • 获取参数功能:当用户访问的时候,会携带一些参数,我们需要在程序中获取这些参数
  • 输出数据的功能:我们需要将用户需要的结果反馈给用户

1.1 实现连接功能

实现连接功能,我们最常用的请求方式就是 Get 请求和 Post 请求

1.11 @RequestMapping

@RequestMapping 是 Spring Web 程序中最常用到的注解之一,用户注册接口的路由映射。路由映射:当用户访问一个 url 时,将用户的请求对应到应用程序中的某个类的某个方法的过程。

  • 可以修饰类也可以修饰方法
    在这里插入图片描述
    当你成功启动项目是,如果需要访问的 getUserById这个方法的时候,在浏览器中输入 localhost:8080/user/getuserbyid。这里的端口号是默认的8080。

@RequestMapping是同时支持 GET 和 POST请求。

1.12 @GetMapping

只适用于 GET 请求
在这里插入图片描述

1.13 @PostMapping

只适用于POST请求
在这里插入图片描述

1.2 获取参数功能

1.21 获取单个参数

正确示例:
在这里插入图片描述


错误示例:
在这里插入图片描述
出现上述错误的时候,我们可以通过一个注解,就能解决 url 中参数的 key 和 方法中 形参名不一致导致的问题。 @RequestParam(“xxxx”)这个注解
在这里插入图片描述

注意点:使用了@RequestParam注解的参数必须设置值
在这里插入图片描述


1.22 获取多个参数

当获取多个参数的时候,顺序并不重要。
在这里插入图片描述

1.23 获取一个对象

在这里插入图片描述

1.24 获取一个 Json 对象(此时需要的注解是@RequestBody)

我们可以通过 Postman来传入一个 Json 格式的数据,在方法上的参数中,加上@RequestBody注解,表示我们获取的参数是 json 格式的数据。
在这里插入图片描述

1.25 获取URL中参数

可以使用注解@PathVariable,获取url地址中的参数
在这里插入图片描述
这里有个提示,如果你设置参数,就必须在前端传入,否则就会发生错误
在这里插入图片描述

1.26 上传文件(@RequestPart)

使用的@RequestPart注解,可以上传文件,可以参考以下代码

    @RequestMapping("/upload")
    public String upLoad(@RequestPart MultipartFile file) throws IOException {
        // 1.生成一个唯一的id | UUID = 全球唯一ID -> MAC + 随机种子 + 加密算法
        String name = UUID.randomUUID().toString().replace("-", "");
        // 2.得到源文件的后缀名
        name += (file.getOriginalFilename().
                substring(file.getOriginalFilename().lastIndexOf(".")));
        String path = "D:\\image\\" + name;
        // 保存文件
        file.transferTo(new File(path));
        return path;
    }

通过 Postman 测试,可以成功上传
在这里插入图片描述

1.27 获取Cookie(@CookieValue)

    @RequestMapping("getcookie")
    public String getCookie(@CookieValue(value = "java",required = false) String cookie){
        return cookie;
    }

在这里插入图片描述

1.28 获取Session(@SessionAttribute)

先设置一个Session

    private static String _SESSION_KEY = "SESSION_KEY";

   @RequestMapping("/set_sess")
    public String setSess(HttpServletRequest request) {
        HttpSession session = request.getSession();
        if (session != null) {
            session.setAttribute(_SESSION_KEY, "张三");
            return "session set success";
        } else {
            return "session set fail";
        }
    }

然后获取Session

    @RequestMapping("/get_sess")
    public String getSess(@SessionAttribute(required = false, value = "SESSION_KEY") String name) {
        return name;
    }

在这里插入图片描述

1.3 返回数据功能

1.31 非静态页面数据(text/html)

在上述中,我们返回的都是数据,可以看到我们加了一个 @ResponseBody,这个注解作用就是表示返回的是非静态页面的数据。
在这里插入图片描述

1.32 非静态页面数据(json)

在这里插入图片描述

1.32 静态页面数据


当需要返回的是静态页面的时候,就不需要加 @ResponseBody这个注解
在这里插入图片描述

2. foward vs redirect 区别

在返回数据的时候,不仅可以返回一个视图,还可以实现跳转,跳转的方式有两种:

  • forward : 请求转发
  • redirect:请求重定向

两者有什么区别呢?

    1. 请求转发是由服务器转发的;请求重定向是将请求重新定位到资源
    1. 请求转发地址不发生变化;请求重定向地址发生变化
    1. 请求转发由服务器转发,可能会造成原外部资源访问不到;请求重定向和访问新地址一样,不会出现这种情况

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SVN - 记录一下无法提交代码 提示:被锁定(locked)

今天遇到一个问题,svn 在提交代码的时候出现了svn is already locked,导致代码无法提交(commit)和更新(update) 主要报错如下: 解决方法: 然后点击 Clean up 选中一下选项&#xff…

人工智能巨头碰撞——埃隆·马斯克推出xAI挑战OpenAI的统治地位

目录 前言XAI 的推出什么是XAI?它将聚焦于什么? 一:“反AI斗士”马斯克进军AI,你怎么看?二:回顾上半年的“百模大战”,中国的AI产业怎么样了?三:AI大模型这把火&#xff…

算法通过村第二关-链表白银笔记

文章目录 再战链表|反转链表剑指 Offer II 024. 反转链表熟练掌握这两种解法建立头节点的解决思路不采用建立头节点的方法采用循环/递归的方式解决 总结 再战链表|反转链表 提示:多拿些酒来,因为生命只有乌有。 剑指 Offer II 024. 反转链表 如果不使用…

9个可用于图片转文本的最佳免费 OCR 软件

光学字符识别 (OCR) 软件可帮助将不可编辑的文档格式(例如 PDF、图像或纸质文档)转换为可编辑和可搜索的机器可读格式。 OCR 应用程序通常用于从 PDF 和图像中捕获文本,并将文本转换为可编辑格式,例如 Word、Excel 或纯文本文件。…

SpringBoot复习:(3)应用打包成jar包,清单文件里的主类是我们用@SpringBootApplication注解标记的类吗?

不是. MANIFEST.MF类似如下: Manifest-Version: 1.0 Spring-Boot-Classpath-Index: BOOT-INF/classpath.idx Spring-Boot-Layers-Index: BOOT-INF/layers.idx Start-Class: com.example.demo.DemoApplication Spring-Boot-Classes: BOOT-INF/classes/ Spring-Boot-…

DevOps-GitHub/GitLab

DevOps-GitHub/GitLab GitHub是一个开源代码托管平台。基于web的Git仓库,提供共有仓库和私有仓库(私有仓库收费)。 GitLab可以创建免费私有仓库。 GitHub 为了快速操作,这里对创建仓库以及注册不做说明。 首先再GitHub上创建一…

不用手动编程!ChatGPT帮你轻松实现单片机按键输入功能

从今年年初,OpenAI发布的ChatGPT已摧古拉朽之势席卷全球,短短两个月注册用户数就超过1亿人,是全世界增长速度最快的应用。很多人都说今年是AI元年,其实也是有一定道理的,之前的AI门槛相对较高,很多人没有机…

python使用CGI编程,网页写个标题

需要有个 Linux虚拟机,安装 apache, 本次使用 deepin v23,参考: sudo apt install apache2 #安装 apache2 systemctl start apache2 # 启动 apache2 sudo a2enmod cgi # 启用CGI模块 sudo mkdir /usr/lib/cgi-bin #创…

APT32组织针对我国关基单位攻击活动分析

事件背景 2022年5月,绿盟科技伏影实验室与运营能力中心梅花K战队共同于国家某关基单位发现异常外联IP,通过攻击活动中捕获的攻击流量分析,确认此次攻击活动是由境外APT组织APT32所发起。 绿盟科技伏影实验室与运营能力中心梅花K战队利用主机…

2 种方式查找极狐GitLab 容器镜像 Tag,几分钟快速构建私有化部署实例

目录 通过 Helm 命令查找 第1步:添加 Helm Chart 第2步:更新 Helm Chart 第3步:Helm search 查找过往 tag 通过 Omnibus package 来查 极狐GitLab 是一个一体化 DevOps 平台,其灵活的私有化部署方式(源代码安装、…

通识测试09缺陷和缺陷报告

缺陷和缺陷报告 缺陷的基本概述 缺陷的定义 缺陷的属性 正向的测试用例缺陷远高于反向的。 缺陷的类型 缺陷的生命周期 缺陷的识别 缺陷报告 缺陷报告 缺陷报告编写目的 需求、用例、bug的关系

Android触摸事件分发机制(一)

1. 简介 本文主要分享事件分发中的基本概念。 介绍负责参与分发事件的主要方法。 从这些方法的核心逻辑中,总结事件分发的规律。 2. 被分发的对象 被分发的对象是那些?被分发的对象是用户触摸屏幕而产生的点击事件,事件主要包括&#xff1…

人脸检测实战-insightface

目录 简介 一、InsightFace介绍 二、安装 三、快速体验 四、代码实战 1、人脸检测 2、人脸识别 五、代码及示例图片链接 简介 目前github有非常多的人脸识别开源项目,下面列出几个常用的开源项目: 1、deepface 2、CompreFace 3、face_recogn…

Moonbeam生态支持有哪些?

Moonbeam作为波卡生态中最活跃的底层公链之一,自上线以来就致力于构建生态,并通过XCM和GMP等技术实现了多链部署的愿景。通过举办针对不同主题的黑客松、建立生态增长基金、设计项目孵化计划和提供开发奖励等方式,Moonbeam持续推动链上生态的…

基于规则指导的知识图谱推理协作代理学习(2019)7.27

基于规则指导的知识图谱推理协作代理学习 摘要介绍问题和准备工作问题公式基于符号的方法基于游走的方法 RuleGuider模型架构实体代理策略网络 模型学习奖励设计训练过程 实验实验设置数据集实验结果消融研究人工评估 总结 摘要 基于 行走模型 是通过在提供可解释决策的同时实…

【C++】-多态的经典题目

💖作者:小树苗渴望变成参天大树🎈 🎉作者宣言:认真写好每一篇博客💤 🎊作者gitee:gitee✨ 💞作者专栏:C语言,数据结构初阶,Linux,C 动态规划算法🎄 如 果 你 …

解密C++多态机制:发挥对象的多样性,实现更加智能的程序设计

目录 一.多态1.多态的用处2.多态的实现3.虚函数4.override 和 final5.重载重写与重定义6.虚函数表 一.多态 1.多态的用处 众所周知C语言的三大特性:封装、多态、继承。其中多态就是去完成某个行为,但是会根据不同的对象产生不同的状态,所以…

Windows SMB 共享文件夹 排错指南

1 排错可能 是否系统名称为全英文格式 如果不是则 重命名 根据如下排错可能依次设置 1,在运行里面输入"secpol.msc"来启动本地安全设置,\ 然后选择本地策略–>安全选项 -->网络安全LAN 管理器身份验证级别,\ “安全设置”…

操作系统知识点总结

操作系统知识点总结: 第一章:操作系统概述 1.1操作系统的概念: ​ 操作系统是一种系统软件,与其他系统软件和应用软件不同,它有自己的基本特征。它的四大基本特征也就是并发,共享,虚拟,异步。 1.2操作系统的特征(四大…

前端开发信息套路:信息是如何传值

文章目录 前言信息组件化的难点:组件信息流通信息流通信息流通分类通知直接调用回调函数发布订阅全局缓存使用建议 总结 前言 作为一个写了好几个月的Uniapp小程序的打工狗,我总结了一下在前端中信息是如何传递的,得出了一个比较标准化的信息…