当前位置: 首页 > news >正文

Spring MVC

一、Spring MVC介绍

a. Spring MVC是一个Web框架
b. Spring MVC是基于Servlet API构成的
MVC 是 Model View Controller 的缩写。
MVC 是⼀种思想,⽽ Spring MVC 是对 MVC 思想的具体实现。
学习Spring MVC目标:
a.连接功能:将用户(浏览器)和JAVA程序连接起来,也就是访问一个地址能调用到Spring程序。
b.获取参数的功能:用户访问的时候会带一些参数,在程序中想办法获得这些参数。
c.输出数据的功能:执行了业务逻辑之后,要把程序执行结果返回给用户。

二、连接功能实现

2.1 @RequestMapping 注解介绍

用来注册接口的路由映射
即可修饰类,也可以修饰⽅法

package com.example.demo.controller;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;@Controller
@RequestMapping("/user")
public class UserController {@RequestMapping("/sayhi")//路由映射(用户和程序的连接)@ResponseBody//当前方法返回的是一个非静态页面的数据public String sayHi(){return "Hello,Spring MVC";}
}

@RequestMapping默认支持GET请求,但也支持Post请求

2.2 只支持GET请求

三种写法:
在这里插入图片描述

2.3只支持Post请求

在这里插入图片描述

二、获取参数实现

2.1 获取单个参数

在这里插入图片描述

在这里插入图片描述

2.2 获取多个参数(或者表单参数)

在这里插入图片描述

在这里插入图片描述

2.3 获取对象

定义UserInfo对象:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.4获取JSON对象

在这里插入图片描述
利用postman结果显示如下:
在这里插入图片描述

2.5 后端参数重命名(扩展知识)

当前端传递的参数和后端的参数不一致,就可以用这种方式。
使用注解@RequestParam
在这里插入图片描述
在这里插入图片描述

2.6获取URL中的参数

利用注解@PathVariable
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.7 上传文件(图片)

关键步骤:
a.接受前端传递的文件:
@RequestPart(“file”)MultipartFile file
b.将前端传递过来的文件保存到本地:
file.transferTo(new File(filePath + filename));

第一步:
在这里插入图片描述
具体实现:
在这里插入图片描述

@Controller
@Slf4j
@ResponseBody//当前方法返回的是一个非静态页面的数据
@RequestMapping("/user")
public class UserController {@Value("${myfile.path}")private String filePath;//从配置文件中获取图片的上传路径@RequestMapping("/upfile")public boolean upFile(String username, @RequestPart("file")MultipartFile file){boolean result = false;try {//获取原文件的名称String fileType = file.getOriginalFilename();//获取文件名称后缀fileType= fileType.substring(fileType.lastIndexOf("."));//文件名称String filename = UUID.randomUUID().toString() + fileType;file.transferTo(new File(filePath + filename));result = true;log.info(username+"上传图片成功!");} catch (IOException e) {System.out.println("图片上传失败");}return result;}

用postman模拟:
在这里插入图片描述

2.8获取cookie

2.8.1传统方式获取

在这里插入图片描述
在这里插入图片描述

2.8.2简洁方式获取

使用注解**@CookieValue**
在这里插入图片描述
在这里插入图片描述

2.9获取请求头header中的信息

使用注解@RequestHeader
在这里插入图片描述
在这里插入图片描述

2.10 获取Session

使用注解@SessionAttribute

 //定义全局的session keyprivate final String SESSION_KEY = "SESSION_KEY";/*** 设置 session** @param request* @return*/@RequestMapping("/setsess")public boolean setsess(HttpServletRequest request){boolean result =false;//1.得到session对象try {HttpSession session = request.getSession(true);session.setAttribute(SESSION_KEY, "java");result = true;}catch (Exception e){log.info("出现了异常:" + e.getMessage());}return result;}/*** 获取session* @param data* @return*/@RequestMapping("/getsess")public String getSess(@SessionAttribute(name = "SESSION_KEY",required = false) String data){return data;}

在这里插入图片描述

三、返回数据

默认情况下返回的是一个页面,而不是页面中的数据。
现在因为前后端分离,所以可以只返回数据就可以了。
例如:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
综上可以看到,当不加注解时,返回的是一个页面,而不是页面中的数据。

3.1使用注解@ResponseBody

当@ResponseBody加在类上,说明这个类中的所有方法,返回的都是一个非静态页面的数据。
在这里插入图片描述
在这里插入图片描述

3.2注解@RestController

@RestController = @Controller + @ResponseBody
源码:
在这里插入图片描述
使用@RestController一个注解可以代替之前的两个注解
在这里插入图片描述

四、请求转发和请求重定向

4.1具体实现

1.forward:请求转发
2.redirect:请求重定向

在这里插入图片描述
请求转发的结果:
在这里插入图片描述
请求重定向的结果:
在这里插入图片描述

4.2 forward和redirect的具体区别

1.请求重定向(redirect)将请求重新定位到资源;请求转发(forward)服务器端转发。
2.请求重定向地址发⽣变化,请求转发地址不发⽣变化。

相关文章:

Spring MVC

一、Spring MVC介绍 a. Spring MVC是一个Web框架 b. Spring MVC是基于Servlet API构成的 MVC 是 Model View Controller 的缩写。 MVC 是⼀种思想,⽽ Spring MVC 是对 MVC 思想的具体实现。 学习Spring MVC目标: a.连接功能:将用户&#xff…...

类与对象(上)

类与对象(上) 1.面向过程和面向对象初步认识 C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。 C是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间…...

正确安装 torch_geometric库

step1: 查看pytorchcuda 版本 torch-scatter torch-sparse torch-cluster torch-spline-conv 这些关联包要与torch版本匹配。 import torch print(torch.__version__) print(torch.cuda.is_available()) torch.version.cuda或者 pip list查看版本 step2&#xff…...

【Unity VR开发】结合VRTK4.0:自身移动(滑动)

语录: 依山傍水房树间,行也安然,住也安然; 一条耕牛半顷田,收也凭天,荒也凭天; 雨过天晴驾小船,鱼在一边,酒在一边; 夜晚妻子话灯前,今也谈谈…...

G1垃圾回收器详解

文章目录前言一、思考问题二、官方文档三、基本介绍四、G1的内存模型五、G1的标记过程六、G1的垃圾回收1、G1过程梳理2、Young GC3、Mixed GC4、Full GC七、参数介绍八、典型问题1、疏散失败(Evacuation Failure)2、大对象分配(Humongous All…...

tws耳机哪个牌子音质好?tws耳机音质排行榜

随着蓝牙耳机市场的不断发展,使用蓝牙耳机的人也逐渐增多,近年来更是超越有线耳机成为最火爆的数码产品之一。那么,tws耳机哪个牌子音质好?下面,我来给大家推荐几款音质好的tws耳机,可以当个参考。 一、南…...

TIA博途中DB数据块清零的具体方法示例

TIA博途中DB数据块清零的具体方法示例 TIA中数据块如何实现清零? 在TIA指令集内有多个移动指令可对DB块内数据进行清零处理。对于S7-1500 CPU或ET200SP CPU来说,可使用BLKMOV、FILL以及SCL的POKE_BLK指令。但是这些指令对DB块清零时,要求DB块必需为非优化DB。 对于优化的DB…...

iptables防火墙屏蔽指定ip的端口

因为需要测试客户端程序与hadoop服务器之间正常通信需要开通的端口, 所以在hadoop各服务器上使用iptables防火墙屏蔽了测试客户端程序的ip和所有端口。然后,根据报错信息提示的端口号来逐步放开直到能正常通信下载文件。 在服务器端屏蔽指定ip访问所有端口 #查看…...

JavaScript Math(算数) 对象

JavaScript Math(算数) 对象 Math 是一个内置对象,它拥有一些数学常数属性和数学函数方法。Math 不是一个函数对象。 Math 用于 Number 类型。它不支持 BigInt。 描述 与其他全局对象不同的是,Math 不是一个构造器。Math 的所…...

超详细的JAVA高级进阶基础知识04

目录 4. 面向对象高级 - 常用的API 4.1 Arrays 工具类 4.1.1 Arrays 类介绍 4.2 冒泡排序 4.3 选择排序 4.4 二分查找 4.5 正则表达式 4.5.1 String 类中与正则有关的常见方法 4.5.2 练习 4.5.3 今日学习目标 4. 面向对象高级 - 常用的API 4.1 Arrays 工具类 4.1.1…...

Python 运算符?

什么是运算符? 本章节主要说明Python的运算符。举个简单的例子 4 5 9 。 例子中,4 和 5 被称为操作数, 称为运算符。 Python语言支持以下类型的运算符: 算术运算符 比较(关系)运算符 赋值运算符 逻辑运算符 位运算符…...

linux nuxt 部署 问题汇总

安装node centos 7 请选择 node版本 v16.1.0 进行安装, npm 版本 7.11.2 亲测这个版本有效,否则会出现 Error: Cannot find module ‘node:fs/promises‘ 等问题 node安装亲参照: Linux node 安装教程_linux node安装_围城少年的博客…...

C++内存管理

文章目录1. c的内存管理例题2.c管理方式1.c的内置类型1.申请一个空间并初始化2.申请连续的空间并初始化3.总结2.c的自定义类型2.总结3.operator new与operator delete函数4.new和delete的实现原理1.内置类型2.自定义类型内存泄露问题&&delete先析构的原因编译器实现机制…...

电子招投标系统源码之 —采购数字化转型快人一步,以大数据支撑供应链管理未来

采购数字化转型快人一步,以大数据支撑供应链管理未来 招标采购为主的一站式全流程数字化采供协同。平台满足询比价、招标、竞价、拍卖、协议直采、商城采购等多种采购定价方式,采购过程全程留痕可追溯。平台支持企业通过WEB、APP、小程序等终端完成采购需…...

ie获取cookie数据,中文乱码;cookie中文乱码终极解决办法

终极解决办法 cookie存中文数据是会出现乱码的,所以在存数据前,得先“编码”,取的时候先“解码” JS方法-编码:encodeURI("你好") 结果:"%E4%BD%A0%E5%A5%BD"JS方法-解码:decodeURI(&…...

day16_关键字this和super丶就近原则和追根溯源原则

this关键字 含义:this代表当前对象 this使用位置 this在实例初始化相关的代码块和构造器中:表示正在创建的那个实例对象,即正在new谁,this就代表谁this在非静态实例方法中:表示调用该方法的对象,即谁在调…...

MySQL 共享锁 (lock in share mode),排他锁 (for update)

共享锁 (lock in share mode) 简介 允许不同事务之间加共享锁读取,但不允许其它事务修改或者加入排他锁 如果有修改必须等待一个事务提交完成,才可以执行,容易出现死锁 共享锁事务之间的读取 session1: start transaction; select * from…...

类与对象(下)

文章目录类与对象(下)1. 再谈构造函数1.1 构造函数体赋值1.2 初始化列表特点推荐坑1.3 explicit关键字2. static成员2.1 概念面试题解法1解法2解法3(重要)2.2 特性问题3. 友元3.1 友元函数说明3.2 友元类4. 内部类4.14.25. 匿名对象6.拷贝对象时的一些编译器优化总结类与对象(下…...

feign技巧 - form方式传值

feign技巧 - form方式传值。 0. 文章目录1. 前言2. 调用样例3. 原理解析3.1 feign端序列化参数3.2 SpringMVC服务端解析参数3.3 补充 - 继承关系不会被传递的原因3.4 补充 - 不能使用GET。4. 总结1. 前言 直接正题。 如何使用feign进行fom表单方式的请求调用,以及其…...

MATLAB | 情人节来绘制更立体的玫瑰花吧

又是一年情人节,今年带来一款更有立体感的玫瑰: 曲面的函数表达式来自: http://www.bugman123.com/Math/index.html 这个网站,上面还有很多其他帅气的玩意。 基础绘制 xlinspace(0,1,300); thetalinspace(-2*pi,15*pi,300); [x,theta]meshg…...

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查

在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...

CTF show Web 红包题第六弹

提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 ​ 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...

centos 7 部署awstats 网站访问检测

一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats&#xff0…...

线程与协程

1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...

Caliper 配置文件解析:config.yaml

Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...

Mac下Android Studio扫描根目录卡死问题记录

环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中,提示一个依赖外部头文件的cpp源文件需要同步,点…...

LeetCode - 199. 二叉树的右视图

题目 199. 二叉树的右视图 - 力扣(LeetCode) 思路 右视图是指从树的右侧看,对于每一层,只能看到该层最右边的节点。实现思路是: 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...

Docker 本地安装 mysql 数据库

Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker ;并安装。 基础操作不再赘述。 打开 macOS 终端,开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...