SpringMVC程序开发
目录
SpringMVC
1、MVC定义
2、MVC和SpringMVC之间的关系
学SpringMVC
1、Spring MVC的创建和连接
浏览器获取前端接口和后端程序连接功能实现
2、获取参数
2.1、传递单个参数/多个参数
2.2、传递对象
2.3、传递表单参数
2.4、后端参数重命名
2.5、@RequestBody接收JSON对象
2.6、获取URL中的参数@PathVariable
2.7、上传文件@RequestPart
2.8、获取Cookie/Session/header
3、返回数据
3.1、返回静态页面
3.2、返回text/html
3.3、返回JSON对象
3.4、请求转发或者请求重定向
SpringMVC
1、构建在Servlet(API)之上的;
2、是一个Web框架(具备http);
3、来自于Spring webMVC模块
1、MVC定义
MVC开始是存在于桌面程序中的,M是指业务模型,V是指用户界面,C则是控制器,使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。

M即model模型是指模型表示业务规则。在MVC的三个部件中,模型拥有最多的处理任务。被模型返回的数据是中立的,模型与数据格式无关,这样一个模型能为多个视图提供数据,由于应用于模型的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性。
V即View视图是指用户看到并与之交互的界面。比如由html元素组成的网页界面,或者软件的客户端界面。MVC的好处之一在于它能为应用程序处理很多不同的视图。在视图中其实没有真正的处理发生,它只是作为一种输出数据并允许用户操作的方式。
C即controller控制器是指控制器接受用户的输入并调用模型和视图去完成用户的需求,控制器本身不输出任何东西和做任何处理。它只是接收请求并决定调用哪个模型构件去处理请求,然后再确定用哪个视图来显示返回的数据。
2、MVC和SpringMVC之间的关系
springmvc提供了 前端控制器 DispatcherServlet,仅针对对客户端的请求和响应进行统一 处理(就是说封装了servlet),是个框架 。是针对三层架构的表述层(或表示层) 开发提供的框架 ,而mvc是一种思想。对于原先的mvc思想来说,springmvc只是包含了mvc思想的一部分 Controller进行实现。
当用户在浏览器中输入url之后,SpringMVC项目就可以感知用户的请求
学SpringMVC
1、构建在servlet(API)之上;
2、是一个Web框架(HTTP);
3、来自于Spring webMVC模块
1、Spring MVC的创建和连接



@RequestMapping("/test") //路由注册
//@Controller //程序返回的是数据而非页面
//@ResponseBody //只有加载的类,别人才能访问
@RestController
public class TestConstroller {@RequestMapping("/hi")public String sayHi(){return "hi,spring mvc";}
}
@RequestMapping既可以修饰类,也可以修饰方法。当修饰类和方法时,访问的地址是类+方法
方法地址:localhost:8080/test/hi
浏览器获取前端接口和后端程序连接功能实现
1.1、@RequestMapping(" /xxx' )既能修饰类又能修饰方法
特性:既支持GET方式的请求又支持POST方式的请求...
1.2、@RequestMapping设置只支持GET/POST请求
@RequestMapping("/test") //路由注册
//@Controller //程序返回的是数据而非页面
//@ResponseBody //只有加载的类,别人才能访问
@RestController
public class TestConstroller {//@RequestMapping("/hi")@RequestMapping(value = "/hi",method = RequestMethod.POST)public String sayHi(){return "hi,spring mvc";}
}
1.3、@PostMapping
@RequestMapping("/test") //路由注册
//@Controller //程序返回的是数据而非页面
//@ResponseBody //只有加载的类,别人才能访问
@RestController
public class TestConstroller {//@RequestMapping("/hi")@RequestMapping(value = "/hi",method = RequestMethod.POST)@PostMapping("/hi")public String sayHi(){return "hi,spring mvc";}
}
1.4、@GetMapping
@RequestMapping("/test") //路由注册
//@Controller //程序返回的是数据而非页面
//@ResponseBody //只有加载的类,别人才能访问
@RestController
public class TestConstroller {//@RequestMapping("/hi")@RequestMapping(value = "/hi",method = RequestMethod.POST)@GetMapping("/hi")public String sayHi(){return "hi,spring mvc";}
}
2、获取参数
2.1、传递单个参数/多个参数
@RequestMapping("/test") //路由注册
//@Controller //程序返回的是数据而非页面
//@ResponseBody //只有加载的类,别人才能访问
@RestController
public class TestConstroller {@GetMapping("/hi")public String sayHi(String name){return "hi"+name;}
}

传参注意事项:在Spring Boot(Spring MVC)中传参一定要传包装类型,而不是基础类型
原因:当需要一个基础类型,但又忘记传递时,使用基础类型会报错(500),而包装类型不会错,只是值为null
@GetMapping("/num")public String getnum(Integer num){return "num="+num;}
@GetMapping("/hi")public String sayHi(String name,Integer age){return "hi"+name+" age:"+age;}

2.2、传递对象
后端实现
@Data
public class User {private int id;private String name;private int age;
}
@GetMapping("/showuser")public String showu(User user){return user.toString();}
前端实现

2.3、传递表单参数
当参数较少时,可以使用传递多个参数的方法;
当参数较多时,可以使用传递对象的方法
2.4、后端参数重命名
后端实现
@GetMapping("/showtime")public String shoeTime(@RequestParam("t") String startTime,@RequestParam("t2") String endTime){return "开始时间:" +startTime+ " 结束时间:" +endTime;}
前端实现

如果t值不是必须要传
@GetMapping("/showtime")public String shoeTime(@RequestParam(value = "t",required = false) String startTime,@RequestParam("t2") String endTime){return "开始时间:" +startTime+ " 结束时间:" +endTime;}
2.5、@RequestBody接收JSON对象
后端实现
//@RequestBody接收JSON对象@PostMapping("/show-json-user")public String showJSONuser(@RequestBody User user){return user.toString();}
前端实现
2.6、获取URL中的参数@PathVariable
后端实现
@RequestMapping("/login/{username}/{password}")public String login(@PathVariable("username")String username,@PathVariable("password")String password){return username + ":" + password;}
前端实现

2.7、上传文件@RequestPart
后端实现
@RequestMapping("/upfile")public String uofile(@RequestPart("myfile")MultipartFile file) throws IOException {String path="D:\\baekhyun\\bobo.jpg";file.transferTo(new File(path));return path;}
前端实现

最终上传文件后端实现
@RequestMapping("/finalfile")public String finalupfile(@RequestPart("myfile")MultipartFile file) throws IOException {//根目录String path="D:\\baekhyun\\";//根目录+【唯一的文件名】path+= UUID.randomUUID().toString();//根目录+唯一的文件名+文件的后缀path+=file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));file.transferTo(new File(path));return path;}
前端实现

2.8、获取Cookie/Session/header
1、获取Cookie
//获取全部Cookie@RequestMapping("/getck")public String getCookie(HttpServletRequest request){Cookie[] cookies=request.getCookies();for (Cookie item:cookies){log.error(item.getName()+":"+item.getValue());}return "get cookie";}
2、获取单个Cookie @CookieValue
//获取单个Cookie@RequestMapping("/getck2")public String getCookie2(@CookieValue("do") String val){return "cookie value"+val;}
3、获取Header @RequestHeader
后端实现
//获取header@RequestMapping("/getheader")public String getheader(@RequestHeader("User-Agent") String userAgent){return userAgent;}
前端实现

4、存Session
后端实现
//存Session@RequestMapping("/setsession")public String setSession(HttpServletRequest request){HttpSession session=request.getSession();session.setAttribute("userinfo","userinfo");return "set Session success";}
前端实现

5、获取Session
后端实现
//读Session@RequestMapping("getsession")public String getSession(HttpServletRequest request){HttpSession session=request.getSession(false);if (session!=null && session.getAttribute("userinfo")!=null){return (String) session.getAttribute("userinfo");}else {return "暂无session信息";}}
前端实现

@RequestMapping("/getsession2")public String getSession2(@SessionAttribute(value = "userinfo",required = false)String userinfo){return userinfo;}
3、返回数据
3.1、返回静态页面
后端实现
@RequestMapping("/resp")
@Controller
public class RespController {@RequestMapping("/hi")public String sayHi(){return "/hello.html";}
}
前端实现

3.2、返回text/html
案例:计算器的实现
@ResponseBody
@Controller
public class CalcController {@RequestMapping("/calc")public String calc(Integer num1,Integer num2){if (num1==null || num2==null) return "参数错误";return "结果为=" +(num1+num2);}
}
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><form action="/calc"><div style="margin-top: 100px;text-align: center;"><h1>计算器</h1>数字1:<input name="num1"><br>数字2:<input name="num2"><br><input value="提交" type="submit"></div></form></body>
</html>
3.3、返回JSON对象
后端实现
@RequestMapping("/respjson")public HashMap<String,String> respJson(){HashMap<String,String> map=new HashMap<>();map.put("baekhyun","baekhyun.value");map.put("do","do.value");map.put("sehun","sehun.value");return map;}
前端实现
3.4、请求转发或者请求重定向
forward和redirect
forward和redirect具体区别如下:
1.请求重定向(redirect) 将请求重新定位到资源;请求转发(forward) 服务器端转发。
2.请求重定向地址发生变化,请求转发地址不发生变化。
3.请求重定向与直接访问新地址效果一致, 不存在原来的外部资源不能访问;请求转发服务器端转发有可能造成原外部资源不能访问。
相关文章:
SpringMVC程序开发
目录 SpringMVC 1、MVC定义 2、MVC和SpringMVC之间的关系 学SpringMVC 1、Spring MVC的创建和连接 浏览器获取前端接口和后端程序连接功能实现 2、获取参数 2.1、传递单个参数/多个参数 2.2、传递对象 2.3、传递表单参数 2.4、后端参数重命名 2.5、RequestBody接收J…...
多版本并发控制MVCC
什么是MVCC? MVCC是一种并发控制方法,一般在数据库管理系统中,实现数据库的并发访问。 可以使用乐观锁和悲观锁来实现。 MVCC的作用? 可以在不加锁的情况下解决读写问题,同时还可以解决脏读,幻读&#…...
JavaScript Date(日期)对象
日期对象用于处理日期和时间。在线实例返回当日的日期和时间如何使用 Date() 方法获得当日的日期。getFullYear()使用 getFullYear() 获取年份。getTime()getTime() 返回从 1970 年 1 月 1 日至今的毫秒数。setFullYear()如何使用 setFullYear() 设置具体的日期。toUTCString()…...
【Python】AES加解密代码,文章还有加密串等你来解密,等你来挑战
🍦🍦写这篇AES文章也是有件趣事,有位小伙伴发了段密文,看看谁解密速度快,学过Python的小伙伴一下子就解开来了,内容也挺有趣的。 🍟🍟原来加解密也可以这么有趣,虽然看起…...
代码随想录【Day34】| 1005. K 次取反后最大化的数组和、134. 加油站、135. 分发糖果
1005. K 次取反后最大化的数组和 题目链接 题目描述: 给定一个整数数组 A,我们只能用以下方法修改该数组:我们选择某个索引 i 并将 A[i] 替换为 -A[i],然后总共重复这个过程 K 次。(我们可以多次选择同一个索引 i。&…...
Java性能调优杀手锏JMH
JMH简介 JMH(Java Microbenchmark Harness)由 OpenJDK/Oracle 里面那群开发了 Java编译器的大牛们所开发,是一个功能强大、灵活的工具,它可以用于检测和评估Java应用程序的性能,主要目的是测量Java应用程序的性能,尤其是在多线程…...
实现excle表上传生成echarts图
代码如下html <!--这是一个网上关于读取Excel最经典的代码--> <!DOCTYPE html> <html><head><meta charset"utf-8"><title>ECharts</title><!-- 引入 echarts.js --><!-- <script src"newjs/js/incubato…...
python代码如何打包
网上的文章对小白都不太友好呀,讲得都比较高大上,本文章就用最简单的方式来教会大家如何打包。既然各位已经学习到了python打包了, 深适度应该跟我查不多。 注意事项: 1. 这个插件只能打包 mac 、win系统运行的文件,也…...
MyBatis学习笔记(十二) —— MyBatis的逆向工程
12、MyBatis的逆向工程 正向工程:先创建Java实体类,由框架负责根据实体类生成数据库表。Hibernate是支持正向工程的。 逆向工程:先创建数据库表,由框架负责根据数据库表,反向生成如下资源: Java实体类Mappe…...
4.Elasticsearch深入了解
4.Elasticsearch深入了解[toc]1.Elasticsearch架构原理Elasticsearch的节点类型在Elasticsearch主要分成两类节点,一类是Master,一类是DataNode。Master节点在Elasticsearch启动时,会选举出来一个Master节点。当某个节点启动后,然…...
【HashSet】| 深度剥析Java SE 源码合集Ⅲ
目录一. 🦁 HashSet介绍1.1 特点1.2 底层实现二. 🦁 结构以及对应方法分析2.1 结构组成2.1.1 源码实现2.1.2 成员变量及构造方法2.2 常用的方法2.2.1 添加add(E e)方法2.2.2 删除remove(Object o)方法三. 最后想说一. 🦁 HashSet介绍 1.1 特…...
你了解线程的状态转换吗
本文概述: 讲述线程的六种状态. 你可能已经了解了六种状态, 但是你知道 sleep 被唤醒之后, wait ()被 notify 之后进入了什么状态吗? 本文只是开胃小菜, 你看看下一篇文章对你有没有帮助. 一共有六种状态: New 新建状态Runnable 运行状态Blocked 阻塞状态Waiting 等待状态Tim…...
MyBatis-Plus联表查询的短板,该如何解决呢
mybatis-plus作为mybatis的增强工具,它的出现极大的简化了开发中的数据库操作,但是长久以来,它的联表查询能力一直被大家所诟病。一旦遇到left join或right join的左右连接,你还是得老老实实的打开xml文件,手写上一大段…...
吲哚菁绿-巯基,ICG-SH,科研级别试剂,吲哚菁绿可用于测定心输出量、肝脏功能、肝血流量,和对于眼科血管造影术。
ICG-THIOL,吲哚菁绿-巯基 中文名称:吲哚菁绿-巯基 英文名称:ICG-THIOL 英文别名:ICG-SH 性状:绿色粉末 溶剂:溶于二氯甲烷等其他常规有机溶剂 稳定性:冷藏保存,避免反复冻融。 存储条件&…...
深度剖析JavaOptional类
Java Optional 类 Optional类在 Java 8中被加了进来,提供了一种处理业务逻辑想要的值可能没有出现(null)也可能出现的情况,可能直到目前,我们还是用null 来表示业务值不存在的情况,但是这可能导致空指针异常,Java 8新添加 Optional类可以从一定程度上来解决这个问题。 O…...
平面设计软件Corel CDR2023又开始放大招啦,CorelDRAW Graphics Suite 2023有哪些新增功能?
CorelDRAW 2023中文版即将于2023年3月14日,在苏州举行线上直播的2023新品发布会,本次发布会主题为“设计新生力,矢量新未来”。 发布会邀请思杰马克丁公司领导、Corel 中国区总经理分享思杰与 Corel 的合作模式及在 CorelDRAW 产品上推动历程…...
初学torch【报错:expected scalar type double but found float、rmse】
目录 一、inout 二、expected scalar type double but found float 报错 三、pytorch中回归评价rmse: 一、inout torch网络训练,输入需要转换为tensor格式: import torch import numpy A torch.arange(12, dtypetorch.float32).reshape((…...
金三银四、金九银十 面试宝典 JAVASE八股文面试题 超级无敌全的面试题汇总(接近3万字的面试题,让你的JAVA语法基础无可挑剔)
JavaSE八股文 - 面试宝典 一个合格的 计算机打工人 ,收藏夹里必须有一份 JAVA八股文面试题 ,特别是即将找工作的计算机人,希望本篇博客对你有帮助! 本文参考了诸多大佬的面试题帖子,ps:白大锅、哪吒、英雄…...
数据结构:链式二叉树初阶
目录 一.链式二叉树的逻辑结构 1.链式二叉树的结点结构体定义 2.链式二叉树逻辑结构 二.链式二叉树的遍历算法 1.前序遍历 2.中序遍历 3.后序遍历 4.层序遍历(二叉树非递归遍历算法) 层序遍历概念: 层序遍历算法实现思路: 层序遍历代码实现: 三.链式二叉树遍历算…...
公式编写1000问9-12
9.问: 买入:日线创100日新高 ,周线(5周)BIAS>10 卖出:2日收盘在30线下方 注:买卖都只要单一信号即可,不要连续给出信号 我今天才开始学习编写,可是没有买入信号,不知道哪错了? B1…...
【Linux】shell脚本忽略错误继续执行
在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...
WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...
leetcodeSQL解题:3564. 季节性销售分析
leetcodeSQL解题:3564. 季节性销售分析 题目: 表:sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...
【JavaWeb】Docker项目部署
引言 之前学习了Linux操作系统的常见命令,在Linux上安装软件,以及如何在Linux上部署一个单体项目,大多数同学都会有相同的感受,那就是麻烦。 核心体现在三点: 命令太多了,记不住 软件安装包名字复杂&…...
vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...
Typeerror: cannot read properties of undefined (reading ‘XXX‘)
最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...
JAVA后端开发——多租户
数据隔离是多租户系统中的核心概念,确保一个租户(在这个系统中可能是一个公司或一个独立的客户)的数据对其他租户是不可见的。在 RuoYi 框架(您当前项目所使用的基础框架)中,这通常是通过在数据表中增加一个…...
蓝桥杯 冶炼金属
原题目链接 🔧 冶炼金属转换率推测题解 📜 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V,是一个正整数,表示每 V V V 个普通金属 O O O 可以冶炼出 …...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.
ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #:…...
