SpringMVC---详细介绍+使用

文章目录

  • 什么是SpringMVC?
  • 使用SpringMVC
    • SpringMVC创建和连接
      • 创建
      • 连接
        • @RequestMapping的基础使用
    • 获取参数
    • 返回数据
      • 返回静态页面
      • 返回非页面的普通数据(text/html)
      • 返回JSON对象
      • 请求转发或者请求重定向

什么是SpringMVC?

SpringMVC它的正式名称是“Spring Web MVC”,是一个基于Servlet API构建的原始Web框架。MVC是Model View Controller 的缩写,它是软件工程中的一种软件架构模型,把软件系统分为模型、视图和控制器三部分。MVC是一种思想,而SpringMVC是对MVC思想的具体实现。

我们要学习SpringMVC是因为绝大多数Java项目都是基于Spring(SpringBoot)的,而Spring的核心就是SpringMVC。我们学习SpringMVC主要学习下面介绍的三个方面:

  • 连接的功能:将⽤户(浏览器)和 Java 程序连接起来,也就是访问⼀个地址能够调⽤到我们的Spring 程序。
  • 获取参数的功能:⽤户访问的时候会带⼀些参数,在程序中要想办法获取到参数。
  • 输出数据的功能:执⾏了业务逻辑之后,要把程序执⾏的结果返回给⽤户。

使用SpringMVC

SpringMVC创建和连接

创建

在这里插入图片描述

连接

@Controller  //让spring框架启动时就加载类
@ResponseBody    //返回非页面数据
@RequestMapping("/user")
// 可以把@Controller和@ResponseBody两个注解合并为一个@RestController注解
public class UserController {
    @RequestMapping("/sayHi")
    public String sayHi() {
        return "hi,spring mvc";
    }

}

注:

  1. 我们要创建一个类来做路由映射,借此建立起浏览器页面与后端程序的连接
  2. @RequestMapping是被用来做接口的路由映射的,当用户访问某一个url时,会将用户的请求对应到程序中的某个类的某个方法上。
@RequestMapping的基础使用
	//接收GET请求的三种方法
    //方法一
    @RequestMapping("/sayHi")
    //方法二
    @RequestMapping(value = "/sayHi",method = RequestMethod.GET)
    //方法三
    @GetMapping("/sayHi")
    //接收POST请求的三种方法
    //方法一
    @RequestMapping("/sayHi")
    //方法二
    @RequestMapping(value = "/sayHi",method = RequestMethod.POST)
    //方法三
    @PostMapping("sayHi")

注:

  1. @RequestMapping即可以修饰类也可以修饰方法。当修饰类和方法的时候,访问的地址是类+方法;当 url 路径唯一时可以只修饰方法,访问的地址是方法。
  2. @RequestMapping即可以用来接收 Get请求 也可以用来接收 Post请求。
  3. 接收 Get请求 和接收 Post请求分别有三种方法,上面的代码示例已经给出。

获取参数

我们对十一种传来的参数的类型进行处理:传递单参数、传递对象、传递多个参数、参数重命名、传递JSON对象、直接从 url 中传递参数、上传文件、得到Cookie、得到header、设置session、读取session。

由于篇幅太长,单独总结为一篇博客大家点击此链接查看!详细介绍+代码演示SpringMVC获取参数的十一种方法

返回数据

  1. 在返回前端静态页面时,不需要加上@ResponseBody注解;在返回前端普通数据时,要加上@ResponseBody注解。

  2. @ResponseBody返回的值如果是字符,将转化成 text/html;如果是对象,将转化成 application/json。

  3. @ResponseBody即可以修饰类也可以修饰方法,修饰类表示类中的所有方法都会返回 html 或者 json

返回静态页面

//返回前端一个静态的页面   需要多添加一个依赖  然后设置配置文件
@Controller
@RequestMapping("/toFront")
public class FrontController {
    @RequestMapping("/front")
    public Object toFront(){
        return "front.html";
    }
}

在这里插入图片描述

返回非页面的普通数据(text/html)

//返回非页面的普通数据
@Controller
@ResponseBody
@RequestMapping("/p")
public class ResponseController {
    @RequestMapping("/index")
    public String index(){
        return "index.html";
    }
}

返回JSON对象

@RestController
@RequestMapping("/retJson")
public class JsonController {
    @RequestMapping("/respJson")
    public HashMap<String,String> retJson(){
        //注 HashMap的key不能相同  相同时下一次插入的值会替换掉上一次的值  使HashMap中只有一个值
        HashMap<String,String> hashMap = new HashMap<>();
        hashMap.put("say1","hello");
        hashMap.put("say2","hi");
        hashMap.put("say3","spring muc");

        return hashMap;
    }
}

请求转发或者请求重定向

@Controller
@RequestMapping("/toSend")
//@RestController  返回页面不是数据
// redirect和forward的三点区别
public class ResendController {
    @RequestMapping("/redirect")
    //请求重定向
    public String redirect(){
        return "redirect:/front.html";
    }

    @RequestMapping("/forward")
    //请求转发
    public String forward(){
        return "forward:/front.html";
    }
}

请求转发和请求重定向的区别:

  1. 请求重定向将请求重新定位到资源,不需要经过服务器;请求转发需要经过服务器进行转发。
  2. 请求重定向地址发生变化;请求转发地址不发生变化。
  3. 请求重定向和直接访问新地址效果一致,不存在原来的外部资源不能访问的问题;请求转发需要经过服务器转发,有可能造成原外部资源不能访问的问题。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

深入理解 HTTP 和 HTTPS:提升你的网站安全性(下)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

机器人制作开源方案 | 智能落叶清扫机器人

作者&#xff1a;李聪赛 马嘉骏 李佳豪 邵一鸣 池宏伟 单位&#xff1a;唐山学院 指导老师&#xff1a;袁娜 1. 引言 近年来&#xff0c;随着人工智能科学和计算机技术人工智能科学的飞速发展&#xff0c;智能机器人技术已成为当代机器人研究领域的热门话题。其中服务机器人…

MySQL表的增删改查(初阶)

CRUD 即增加(Create)、查询(Retrieve)、更新(Update)、删除(Delete)四个单词的首字母缩写。且增删改查&#xff08;CRUD&#xff0c;create&#xff0c;retrieve&#xff0c;update&#xff0c;delete&#xff09;数据库的核心模块。 1. 新增&#xff08;Create&#xff09; 实…

120. 三角形最小路径和

三角形最小路径和 描述 : 给定一个三角形 triangle &#xff0c;找出自顶向下的最小路径和。 每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 1 的两个结点。也就是说&#xff0c;如果正位于当前行的…

C语言—每日选择题—Day51

指针相关博客 打响指针的第一枪&#xff1a;指针家族-CSDN博客 深入理解&#xff1a;指针变量的解引用 与 加法运算-CSDN博客 第一题 1. 对于函数void f(int x);&#xff0c;下面调用正确的是&#xff08;&#xff09; A&#xff1a;int y f(9); B&#xff1a;f(9); C&#xf…

Leetcode—96.不同的二叉搜索树【中等】

2023每日刷题&#xff08;六十四&#xff09; Leetcode—96.不同的二叉搜索树 算法思想 实现代码 class Solution { public:int numTrees(int n) {vector<int> G(n 1, 0);G[0] 1;G[1] 1;for(int i 2; i < n; i) {for(int j 1; j < i; j) {G[i] G[j - 1] * …

Ubuntu18.04 上通过 jihu 镜像完成 ESP-IDF 编译环境搭建流程

为了解决国内开发者从 github 克隆 esp 相关仓库慢的问题&#xff0c;已将 esp-idf 和部分重要仓库及其关联的子模块镜像到了 jihu&#xff0c;这些仓库将自动从原始仓库进行同步。此篇博客用来阐述 Ubuntu18.04 上通过 jihu 镜像完成 ESP-IDF 编译环境搭建流程。 注&#xff1…

AOP与日志(下)

作者简介&#xff1a;大家好&#xff0c;我是smart哥&#xff0c;前中兴通讯、美团架构师&#xff0c;现某互联网公司CTO 联系qq&#xff1a;184480602&#xff0c;加我进群&#xff0c;大家一起学习&#xff0c;一起进步&#xff0c;一起对抗互联网寒冬 日志分类 有时候我们所…

ffmpeg windows开发之一(编译安装及入门指南)

一. 源码包下载 下载地址&#xff1a; Download FFmpegDownload FFmpeg 点击more lease&#xff0c;然后下载 二&#xff1a; MSYS2安装 &#xff1a; 下载地址&#xff1a;MSYS2 执行命令&#xff1a;pacman -Syu pacman -S mingw-w64-x86_64-gcc pacman -S mingw-w64-x86_64…

【Spring】14 ApplicationEventPublisherAware 接口

文章目录 1. 简介2. 作用3. 使用3.1 创建并实现接口3.2 配置 Bean 信息3.3 创建启动类3.4 启动3.5 工作流程图 4. 应用场景总结 Spring 框架为开发者提供了丰富的扩展点&#xff0c;其中之一是 Bean 生命周期中的回调接口。本文将专注介绍一个与事件发布相关的接口 Applicatio…

Windows 系统下本地单机搭建 Redis(一主二从三哨兵)

目录 一、Redis环境准备&#xff1a; 1、下载redis 2、Windows下的.msi安装和.zip格式区别&#xff1a; 二、哨兵介绍&#xff1a; 1、一主二从三哨兵理论图&#xff1a; 2.哨兵的主要功能&#xff1a; 3.哨兵用于实现 redis 集群的高可用&#xff0c;本身也是分布式的&…

LeetCode 1901. 寻找峰值 II

一、题目 1、题目描述 一个 2D 网格中的 峰值 是指那些 严格大于 其相邻格子(上、下、左、右)的元素。 给你一个 从 0 开始编号 的 m x n 矩阵 mat &#xff0c;其中任意两个相邻格子的值都 不相同 。找出 任意一个 峰值 mat[i][j] 并 返回其位置 [i,j] 。 你可以假设整个矩阵…

服务端主动给客户端发消息?实战教学:使用Nestjs实现服务端推送SSE

前言 服务端消息推送SSE是常用的服务器消息通信手段&#xff0c;适用于服务器主动给客户端发送消息的场景&#xff0c;例如私信通知&#xff0c;扫描登录等都可以使用SSE实现。SSE的底层原理是客户端与服务端建立 HTTP 长链接。 Nestjs 框架内置了对SSE的支持&#xff0c;本文…

前端性能监控和错误监控

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

FreeRTOS信号量学习

目录 一、信号量的特性 1. 信号量的常规操作 2. 信号量跟队列的对比 3. 两种信号量的对比 4. 信号量函数 4.1 创建 4.2 删除 4.3 give/take 5. 使用二进制信号量来同步 队列(queue)可以用于传输数据&#xff1a;在任务之间、任务和中断之间。 有时候我们只需要传递状态&…

外媒发稿最好的宣传方法是什么?大舍传媒

外媒发稿最好的宣传方法是什么&#xff1f; 引言 在如今信息爆炸的时代&#xff0c;外媒发稿的宣传方法至关重要。大舍传媒作为一家业内知名的传媒公司&#xff0c;积累了丰富的经验和成功案例。本文将探讨外媒发稿最好的宣传方法&#xff0c;旨在帮助读者更好地推广自己的信…

Java基础知识回顾

Java基础 一、Java概述 1、Java技术体系平台 类型简介JavaSE 标准版支持面向桌面级的应用JavaEE 企业版支持为企业开发的应用JavaME 小型版运行在移动终端的平台 2、Java重要的特点 面向对象的语言&#xff08;OOP&#xff09; 健壮的语言&#xff0c;具有强类型转换、异常…

MCU为什么上电不启动?

都遇到过这样的问题吧&#xff0c;自信满满的把程序下载到板子上&#xff0c;结果发现MCU居然没启动。 出现这个问题有很多原因&#xff0c;总结为以下五点&#xff1a; 第一&#xff0c;boot引脚电平不对&#xff0c;例如在GD32的MCU上&#xff0c;boot引脚决定了MCU的启动方式…

【pycharm】Pycharm常用快捷键

批量替换是指一次性替换多个文件中的指定内容。在开发过程中&#xff0c;可能会遇到需要替换多个文件中的某个字符串或者某段代码的情况。如果一个一个文件进行替换&#xff0c;那么将会非常耗时和繁琐。 而使用批量替换功能&#xff0c;则可以一次性完成所有文件的替换操作&am…
最新文章