.tech 域名 网站/品牌策略有哪些
目录
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…...

C++11:类的新功能和可变参数模板
文章目录1. 新增默认成员函数1.1 功能1.2 示例2. 类成员变量初始化3. 新关键字3.1 关键字default3.2 关键字delete补充3.3 关键字final和override4. 可变参数模板4.1 介绍4.2 定义方式4.3 展开参数包递归展开参数包优化初始化列表展开参数包逗号表达式展开参数包补充5. emplace…...

【Java学习笔记】15.Java 日期时间(1)
Java 日期时间 java.util 包提供了 Date 类来封装当前的日期和时间。 Date 类提供两个构造函数来实例化 Date 对象。 第一个构造函数使用当前日期和时间来初始化对象。 Date( )第二个构造函数接收一个参数,该参数是从 1970 年 1 月 1 日起的毫秒数。 Date(long …...

在ROS2中,通过MoveIt2控制Gazebo中的自定义机械手
目前的空余时间主要都在研究ROS2,最终目的是控制自己用舵机组装的机械手。 由于种种原因,先控制Gazebo的自定义机械手。 先看看目前的成果 左侧是rviz2中的moveit组件的机械手,右侧是gazebo中的机械手。在moveit中进行路径规划并执行后&#…...

Java-线程池 原子性 类
Java-线程池 原子性 类线程池构造方法调用Executors静态方法创建调用方法直接创建线程池对象原子性volatile-问题出现原因:volatile解决原子性AtomicInteger的常用方法悲观锁和乐观锁synchronized(悲)和CAS(乐)的区别并发工具类Hashtable集合ConcurrentHashMap原理:CountDownLa…...

力扣sql简单篇练习(二十五)
力扣sql简单篇练习(二十五) 1 无效的推文 1.1 题目内容 1.1.1 基本题目信息 1.1.2 示例输入输出 1.2 示例sql语句 # Write your MySQL query statement below SELECT tweet_id FROM Tweets WHERE CHAR_LENGTH(content)>151.3 运行截图 2 求关注者的数量 2.1 基本题目内…...

计算机网络:OSPF协议和链路状态算法
OSPF协议 开放最短路经优先OSPF协议是基于最短路径算法SPF,其主要特征就是使用分布式的链路状态协议OSPF协议的特点: 1.使用泛洪法向自治系统中的所有路由器发送信息,即路由器通过输出端口向所有相邻的路由器发送信息,而每一个相邻的路由器又…...

利用表驱动法+策略模式优化switch-case
1.前言 我有一个需求:有四个系统需要处理字段,一开始利用switch-case进行区分编码,后期字段处理越来越多,导致switch-case代码冗余,不太好,然后想通过java单继承多实现的性质进行优化。 2.实现 2.1定义S…...

SpringBoot创建和使用
目录 什么是SpringBoot SpringBoot的优点 SpringBoot项目的创建 1、使用idea创建 2、项目目录介绍和运行 Spring Boot配置文件 1、配置文件 2、配置文件的格式 3、properties 3.1、properties基本语法 3.2、读取配置文件 3.3、缺点 4、yml 4.1、优点 4.2、yml基本…...

which、whereis、locate文件查找命令
Linux下查找文件的命令有which、whereis、locate和find,find命令因要遍历文件系统,导致速度较慢,而且还会影响系统性能,而且命令选项较多,就单独放一篇介绍,可参见find命令——根据路径和条件搜索指定文件_…...

Uipath Excel 自动化系列14-SaveExcelFile(保存Excel)
活动描述 SaveExcelFile 保存Excel:保存工作簿,在修改 Excel 文件的用户界面自动化活动之后使用此活动,以保存对文件的更改 SaveExcelFile As 另存Excel : 将workbook 另存为文件 SaveExcelFile As PDF :将Excel 另存为PDF文件。该三个活…...