SpringMVC---详细介绍+使用

news2024/11/29 2:49:50

文章目录

  • 什么是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.coloradmin.cn/o/1322252.html

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

相关文章

【MTK平台】BLE链接参数和功耗的关系

一 描述 BLE即低功耗蓝牙,是专为智能设备设计的一种低功耗、低延迟,小数据传输的蓝牙技术。目前广泛应用到手机,平板,及智能穿戴式设备中。 二 解决方案 BLE的数据传输都是发生在Connection Event之间,客户可以根据具体需求来调节链接参数(Connection Parameters)…

OpenAI 偷偷在训练 GPT-4.5!?

最近看到有人已经套路出 ChatGPT 当前的版本&#xff0c;回答居然是 gpt-4.5-turbo&#xff1a; 实际试验下&#xff0c;用 starflow.tech&#xff0c;切换到小星 4 全能版&#xff08;同等官网最新 GPT-4&#xff09;&#xff0c;复制下面这段话问它&#xff1a; What is the…

STM32F407-14.3.12-01使用断路功能

使用断路功能 使用断路功能时&#xff0c;根据其它控制位&#xff08;TIMx_BDTR 寄存器中的 MOE⑨、OSSI⑪ 和 OSSR⑩ 位以及 TIMx_CR2 寄存器中的 OISx⑰ 和 OISxN⑱ 位&#xff09;修改输出使能信号和无效电平。任何情况下&#xff0c;OCx③ 和 OCxN④ 输出都不能同时置为有效…

C#经典面试题:冒泡算法的使用

Hi i,m JinXiang ⭐ 前言 ⭐ 本篇文章主要介绍C#经典面试题&#xff1a;冒泡算法的使用以及部分理论知识 &#x1f349;欢迎点赞 &#x1f44d; 收藏 ⭐留言评论 &#x1f4dd;私信必回哟&#x1f601; &#x1f349;博主收将持续更新学习记录获&#xff0c;友友们有任何问题可…

PIC单片机项目(6)——基于PIC16F877A的心率血氧检测装置

1.功能设计 使用PIC16F877A单片机&#xff0c;检测心率和血氧浓度&#xff0c;通过了protues仿真。仿真中&#xff0c;使用NE555芯片&#xff0c;构成一个振荡装置&#xff0c;振荡频率可调&#xff0c;用于模拟人体心率的变化。血氧传感器&#xff0c;则使用一个滑动变阻来模拟…

Log打印自动打印编译时间版本号打印方法

Log打印自动打印编译时间版本号打印方法 是否需要申请加入数字音频系统研究开发交流答疑群(课题组)&#xff1f;可加我微信hezkz17, 本群提供音频技术答疑服务&#xff0c;群赠送蓝牙音频&#xff0c;DSP音频项目核心开发资料,

scipy库的label函数|标记图像连通域

邻域 label函数标记连通区域 默认以 4 邻域划分区域 from scipy.ndimage import label import numpy as npa np.array([[0,0,1,1,0,0],[0,0,0,1,0,0],[1,1,0,0,1,0],[0,0,0,1,0,0]]) labels, N label(a) print(labels)[[0 0 1 1 0 0][0 0 0 1 0 0][2 2 0 0 3 0][0 0 0 4 0 …

Postman解决批量执行接口中包含文件上传接口断言错误

文章目录 前言一、问题描述二、解决方法一1.点击设置图标 → 选择 "Settings"2.打开允许读取工作目录外的文件开关3.重新批量执行接口&#xff08;问题完美解决&#xff09; 三、解决方法二1.点击设置图标 → 选择 "Settings"2.查看文件存储默认位置3.将要…

23级新生C语言周赛(6)(郑州轻工业大学)

题目链接:ZZULIOJ 3110: 数(shu)数(shu)问题 分析: 看到这个题第一步想的是 先把每个平方数给求出来 然后枚举 但是时间复杂度大于1e8 交了一下TLE 但后来打表发现,好数太多了要是枚举的话 注定TLE 能不能间接的去做呢? 把不是的减去,那不就是好数了吗? 这个时候又是打表,会…

Python轻松匹配文件:详解文件匹配和搜索技巧

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com 文件匹配和搜索是日常编程中不可避免的任务&#xff0c;Python 提供了多种强大的工具来轻松应对这些需求。本文将深入探讨 Python 中文件匹配的不同方法&#xff0c;并通过丰富的示例代码演示如何灵活应用这些技…

Apache Doris 在奇富科技的统一 OLAP 场景探索实践

导读&#xff1a;随着消费信贷规模快速增长&#xff0c;个人信贷市场呈现场景化、体验感强的特征&#xff0c;精准营销、精细化风险管理以及用户使用体验的优化愈发重要。作为中国卓越的由人工智能驱动的信贷科技服务平台&#xff0c;奇富科技选择将 Apache Doris 作为整体 OLA…

Arcgis中利用模型构建器统一栅格数据的行列号

1、统一&#xff08;X,Y) 方法&#xff1a;"数据管理工具箱"→"Projections and Transformations"→"Raster"→"Project Raster" 构建模型 这里以行列号最小的栅格&#xff08;X,Y&#xff09;为准&#xff08;其实也就是栅格数据的空…

2024年【金属非金属矿山(地下矿山)安全管理人员】考试题及金属非金属矿山(地下矿山)安全管理人员考试内容

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 金属非金属矿山&#xff08;地下矿山&#xff09;安全管理人员考试题是安全生产模拟考试一点通总题库中生成的一套金属非金属矿山&#xff08;地下矿山&#xff09;安全管理人员考试内容&#xff0c;安全生产模拟考试…

Opencv C++ 绘制中文

零、源码 GitHub - ITC-AI/Opencv_Chinese: C 的 Opencv绘制中文 一、代码编写 参考 https://blog.csdn.net/long630576366/article/details/131440684 1、cvxFont.h #ifndef OPENCVUNICODE_CVXFONT_H #define OPENCVUNICODE_CVXFONT_H#include <ft2build.h> #inclu…

windows安装conda小环境 windows安装anaconda python jupyter anaconda

windows安装anaconda之后&#xff0c;再安装本地的jupyter 1 如果想体验在线版的jupyter&#xff0c;可以访问anaconda在Anaconda Cloud&#xff0c;需要注册github&#xff1a; 1 下载anaconda &#xff0c;并安装 1.1 下载 或者去清华镜像下载 Free Download | Anacondah…

黑马头条--day03--2.文章发布

一.发布文章 1.表结构分析 wm_material 素材表 wm_news_material 文章素材关系表 2.关联表实体类 package com.heima.model.wemedia.pojos;import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomido…

postman和代码里面如何增加鉴权

postman配置toekn: 方法1&#xff1a; 方法2&#xff1a; get请求在postman中使用的时候&#xff0c;authorization中带bearer token&#xff0c;那么使用Python构造get请求时&#xff0c;该token应该怎么带入呢&#xff1f; 解决方法如下&#xff1a; url_user "htt…

Linux Docker本地部署WBO在线协作白板结合内网穿透远程访问

文章目录 前言1. 部署WBO白板2. 本地访问WBO白板3. Linux 安装cpolar4. 配置WBO公网访问地址5. 公网远程访问WBO白板6. 固定WBO白板公网地址 前言 WBO在线协作白板是一个自由和开源的在线协作白板&#xff0c;允许多个用户同时在一个虚拟的大型白板上画图。该白板对所有线上用…

大数据机器学习-梯度下降:从技术到实战的全面指南

大数据机器学习-梯度下降&#xff1a;从技术到实战的全面指南 文章目录 大数据机器学习-梯度下降&#xff1a;从技术到实战的全面指南一、简介什么是梯度下降&#xff1f;为什么梯度下降重要&#xff1f; 二、梯度下降的数学原理代价函数&#xff08;Cost Function&#xff09;…

明理信息科技打造专属个人或企业知识付费平台,核心功能设计

在当今信息爆炸的时代&#xff0c;知识管理已经成为了每个人必须面对的问题。然而&#xff0c;市面上的知识付费平台大多数都是通用的&#xff0c;无法满足个性化需求。 因此&#xff0c;明理信息科技提供了一款专属定制的适合个人的知识付费平台。核心产品能力如下&#xff1…