初识Spring Web MVC
1. 什么是 Spring Web MVC?
- Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架,从⼀开始就包含在 Spring 框架中。它的正式名称“Spring Web MVC”来⾃其源模块的名称(Spring-webmvc),但它通常被称为"SpringMVC".
- Servlet:⼀套Java Web 开发的技术标准,通过编写代码去实现 Servlet 规范提到的各种功能
1.1 MVC 定义
-
MVC 是 Model View Controller 的缩写,它是软件⼯程中的⼀种软件架构设计模式,它把软件系统分为模型、视图和控制器三个基本部分
• View(视图) 指在应⽤程序中专⻔⽤来与浏览器进⾏交互,展⽰数据的资源.
• Model(模型) 是应⽤程序的主体部分,⽤来处理程序中数据逻辑的部分.
• Controller(控制器)可以理解为⼀个分发器,⽤来决定对于视图发来的请求,需要⽤哪⼀个模型来处理,以及处理完后需要跳回到哪⼀个视图。即⽤来连接视图和模型 -
Spring Boot 通过添加Spring WebMVC框架, 来实现web功能.
-
从实际得业务处理来说,这个模型更好解释MVC
2. 学习Spring MVC
- 建⽴连接:将⽤⼾(浏览器)和 Java 程序连接起来,也就是访问⼀个地址能够调⽤到我们的Spring 程序。
- 请求: ⽤⼾请求的时候会带⼀些参数,在程序中要想办法获取到参数, 所以请求这块主要是 获取参数的功能.
- 响应: 执⾏了业务逻辑之后,要把程序执⾏的结果返回给⽤⼾, 也就是响应.
2.1 项⽬准备
2.2 建⽴连接
- @RequestMapping 来实现 URL 路由映射 ,也就是浏览器连接程序的作⽤
import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.ResponseBody;@RestController
public class UserController {// 路由器规则注册@RequestMapping("/sayHi")public String sayHi(){return "hello,Spring MVC";}}
- @RestController作用
- 声明控制器类:用于标识一个类是 Spring MVC 控制器,并且处理 HTTP 请求
- 简化响应体的返回:不需要额外使用 @ResponseBody 来指定方法返回的内容直接作为响应体,@RestController 已经默认包含了这个功能,在上面这个代码中,打开浏览器就会看到hello,Spring MVC
- Spring MVC 会自动根据请求的 Content-Type 头信息来决定将方法返回的对象转换为对应的格式,然后作为响应返回给客户端。
-
@RequestMapping
1.注册接⼝的路由映射的
2.路由映射: 当⽤⼾访问⼀个 URL 时, 将⽤⼾的请求对应到程序中某个类的某个⽅法的过程 -
通过浏览器访问: http://127.0.0.1:8080/sayHi
2.2.2 @RequestMapping 使⽤
- 即可修饰类,也可以修饰⽅法 ,当修饰类和⽅法时,访问的地址是类路径 + ⽅
法路径
@RequestMapping标识⼀个类:设置映射请求的请求路径的初始信息
@RequestMapping标识⼀个⽅法:设置映射请求请求路径的具体信息
注意:
@RequestMapping 的URL 路径最前⾯加不加 / (斜杠)都可以, Spring程序启动时, 会进⾏判断, 如果
前⾯没有加 / , Spring会拼接上⼀个 /
2.2.3传参介绍
- URL的格式:
2.3 请求
- 访问不同的路径, 就是发送不同的请求
2.3.1 传递单个参数
import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;@RestController@RequestMapping("/param")public class ParamController {@RequestMapping("/m1")public String method1(String name){return "接收到参数name:"+ name;}}
- 注意路径
- 使用基本类型进行传参的时候,必须传值,建议直接使用包装类
- 基本类型不具备能够直接表示为空的特性,因为它们不是对象,而是直接存储在栈内存中的数据
2.3.2传递多个参数
- 和接收单个参数⼀样, 直接使⽤⽅法的参数接收即可. 使⽤多个形参.
@RequestMapping("/m2")public Object method2(String name, String password) {return "接收到参数name:" + name + ", password:" + password;}
- 注意:当有多个参数时,前后端进⾏参数匹配时,是以参数的名称进⾏匹配的,因此参数的位置是不影响后端获取参数的结果
2.3.3传递对象
- 如果参数⽐较多时, ⽅法声明就需要有很多形参. 并且后续每次新增⼀个参数, 也需要修改⽅法声明.我们不妨把这些参数封装为⼀个对象
public class Person {private int id;private String name;private String password;public int getId() {return id;}public void setId(int id) {this.id = id;
}public String getName() {return name;}public void setName(String name) {this.name = name;
}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}@Overridepublic String toString() {return "Person{" +"id=" + id +", name='" + name + '\'' +", password='" + password + '\'' +'}';}}
- 传递对象代码实现:
@RequestMapping("/m3")public Object method3(Person p){return p.toString();}
- 可以看到, 后端程序正确拿到了Person对象⾥各个属性的值
注意::Spring 会根据参数名称⾃动绑定到对象的各个属性上, 如果某个属性未传递, 则赋值为null(基本类型则赋值为默认初识值, ⽐如int类型的属性, 会被赋值为0)
2.3.4后端参数重命名(后端参数映射)
- 由于映射是根据参数的名字来进行匹配的,就会出现前后端的参数名字不一样的情况,比如前端传递了⼀个time 给后端,⽽后端是使⽤ createtime 字段来接收的,我们就可以使**@RequestParam** 来重命名前后端的参数值.
@RequestMapping("/m4")
public Object method_4(@RequestParam("time") String createtime) {return "接收到参数createtime:" + createtime;}
- 将time重命名为createtime,Spring可以正确的把浏览器传递的参数time绑定到了后端参数caretetime参数上
注意:
- 使⽤ @RequestParam 进⾏参数重命名时, 请求参数只能和 @RequestParam 声明的名称⼀
致, 才能进⾏参数绑定和赋值. - 使⽤ @RequestParam 进⾏参数重命名时, 参数就变成了必传参数.
- 如何设置为非必传参数呢?
- 我们可以通过设置 @RequestParam 中的 required=false 来避免不传递时报错
@RequestMapping("/m4")
public Object method4(@RequestParam(value = "time", required = false) String crereturn "接收到参数createtime:" + createtime;}
2.3.5传递数组
- Spring MVC 可以⾃动绑定数组参数的赋值
@RequestMapping("/m5")public String method5(String[] arrayParam) {return Arrays.toString(arrayParam);
4}
2.3.6传递集合
- 集合参数:和数组类似, 同⼀个请求参数名有为多个, 且需要使⽤ @RequestParam 绑定参数关系
@RequestMapping("/m6")public String method6(@RequestParam List<String> listParam){
return "size:"+listParam.size() + ",listParam:"+listParam;
}
2.3.7传递JSON数据
- JSON:JavaScript Object Notation 【JavaScript 对象表⽰法】
- JSON本质是字符串. 主要负责在不同的语⾔中数据传递和交换.
JSON的语法:
- 数据在 键值对(Key/Value) 中
- 数据由逗号 , 分隔
- 对象⽤ {} 表⽰
- 数组⽤ [] 表⽰
- 值可以为对象, 也可以为数组, 数组中可以包含多个对象
JSON的两种结构
- 对象: ⼤括号 {} 保存的对象是⼀个⽆序的 键值对 集合. ⼀个对象以左括号 { 开始, 右括号 }
结束。每个"键"后跟⼀个冒号 : ,键值对使⽤逗号 , 分隔 - 数组: 中括号 [] 保存的数组是值(value)的有序集合. ⼀个数组以左中括号 [ 开始, 右中括
号 ] 结束,值之间使⽤逗号 , 分隔。
JSON优点
- 简单易⽤: 语法简单,易于理解和编写,可以快速地进⾏数据交换
- 跨平台⽀持: JSON可以被多种编程语⾔解析和⽣成, 可以在不同的平台和语⾔之间进⾏数据交换和
传输 - 轻量级: 相较于XML格式, JSON数据格式更加轻量级, 传输数据时占⽤带宽较⼩, 可以提⾼数据传输
速度 - 易于扩展: JSON的数据结构灵活,⽀持嵌套对象和数组等复杂的数据结构,便于扩展和使⽤
- 安全性: JSON数据格式是⼀种纯⽂本格式,不包含可执⾏代码, 不会执⾏恶意代码,因此具有较⾼
的安全性
传递JSON对象
@RequestBody 可以用于将 HTTP 请求体的内容转化为 Java 对象,并绑定到方法的参数上。这使得我们能够轻松地处理来自客户端发送的 JSON、XML 或其他格式的数据,并将其转换为相应的 Java 对象
2.3.8获取URL中参数@PathVariable
- path variable: 路径变量,作⽤在请求URL路径上的数据绑定
@RequestMapping("/m8/{id}/{name}")
public String method8(@PathVariable Integer id, @PathVariable("name") String use
return "解析参数id:"+id+",name:"+userName;}
如果⽅法参数名称和需要绑定的URL中的变量名称⼀致时, 可以简写, 不⽤给@PathVariable的属性赋值, 如上述例⼦中的id变量
如果⽅法参数名称和需要绑定的URL中的变量名称不⼀致时, 需要@PathVariable的属性value赋值,
如上述例⼦中的userName变量
2.3.9上传⽂件@RequestPart
@RequestMapping("/m9")public String getfile(@RequestPart("file") MultipartFile file) throws IOExceptio//获取⽂件名称
String fileName = file.getOriginalFilename();
//⽂件上传到指定路径
file.transferTo(new File("D:/temp/" + file.getOriginalFilename()));return "接收到⽂件名称为: "+fileName;}
2.3.10获取Cookie/Session
- Session的本质就是⼀个 “哈希表”, 存储了⼀些键值对结构. Key 就是SessionID, Value 就是⽤⼾信息(⽤⼾信息可以根据需求灵活设计)
- 当⽤⼾登陆的时候, 服务器在 Session 中新增⼀个新记录, 并把 sessionId返回给客⼾端. (通过
HTTP 响应中的 Set-Cookie 字段返回). - 客⼾端后续再给服务器发送请求的时候, 需要在请求中带上 sessionId. (通过 HTTP 请求中的
Cookie 字段带上). - 服务器收到请求之后, 根据请求中的 sessionId在 Session 信息中获取到对应的⽤⼾信息, 再进⾏后续操作.找不到则重新创建Session, 并把SessionID返回
Cookie 和 Session 的区别
• Cookie 是客⼾端保存⽤⼾信息的⼀种机制. Session 是服务器端保存⽤⼾信息的⼀种机制.
• Cookie 和 Session之间主要是通过 SessionId 关联起来的, SessionId 是 Cookie 和 Session 之间的桥梁
• Cookie 和 Session 经常会在⼀起配合使⽤. 但是不是必须配合.
◦ 完全可以⽤ Cookie 来保存⼀些数据在客⼾端. 这些数据不⼀定是⽤⼾⾝份信息, 也不⼀定是
SessionId
◦ Session 中的sessionId 也不需要⾮得通过 Cookie/Set-Cookie 传递, ⽐如通过URL传递.
获取Cookie
- 传统获取Cookie
1 @RequestMapping("/m10")
2 public String method10(HttpServletRequest request,HttpServletResponse response)
3 // 获取所有 cookie 信息
4 Cookie[] cookies = request.getCookies();
5 //打印Cookie信息
6 StringBuilder builder = new StringBuilder();
7 if (cookies!=null){
8 for (Cookie ck:cookies) {
9 builder.append(ck.getName()+":"+ck.getValue());
10 }
11 }
12 return "Cookie信息:"+builder;
13 }
HttpServletRequest 对象代表客⼾端的请求, 当客⼾端通过HTTP协议访问服务器时,HTTP请
求头中的所有信息都封装在这个对象中,通过这个对象提供的⽅法,可以获得客⼾端请求的所有信
息.
HttpServletResponse 对象代表服务器的响应. HTTP响应的信息都在这个对象中, ⽐如向客⼾
端发送的数据, 响应头, 状态码等. 通过这个对象提供的⽅法, 可以获得服务器响应的所有内容
- 简洁获取Cookie
- 手动添加Cookie
1 @RequestMapping("/getCookie")
2 public String cookie(@CookieValue("bite") String bite) {
3 return "bite:" + bite;
4 }
- @CookieValue 是 Spring MVC 提供的注解之一,用于从 HTTP 请求中获取指定名称的 Cookie 值,并将其绑定到方法的参数上。
获取Session
Session 存储和获取
Session是服务器端的机制, 我们需要先存储, 才能再获取
Session 也是基于HttpServletRequest 来存储和获取的
Session存储
1 @RequestMapping("/setSess")
2 public String setsess(HttpServletRequest request) {
3 // 获取Session对象
4 HttpSession session = request.getSession();
//getSession 操作内部提取到请求中的Cookie ⾥的SessionId, 然后根据SessionId获取到对应的Session 对象
5 if (session != null) {
6 session.setAttribute("username", "java");
7 }
8 return "session 存储成功";
9 }
- 获取Session有两种⽅式
1 HttpSession getSession(boolean create);
2
3 HttpSession getSession();
- HttpSession getSession(boolean create) : 参数如果为 true, 则当不存在会话时新建会话; 参数如果为 false, 则当不存在会话时返回 null
- HttpSession getSession(): 和getSession(true) 含义⼀样, 默认值为true
- void setAttribute(String name, Object value): 使⽤指定的名称绑定⼀个对象到该 session 会话
Session读取
1 @RequestMapping("/getSess")
2 public String sess(HttpServletRequest request) {
3 // 如果 session 不存在, 不会⾃动创建
4 HttpSession session = request.getSession(false);
5 String username = null;
6 if (session != null && session.getAttribute("username") != null) {
7 username = (String) session.getAttribute("username");
8 }
9 return "username:" + username;
10 }
2.4响应
2.4.1返回静态⻚⾯
- 创建前端⻚⾯ index.html(注意路径)
html
1 <!DOCTYPE html>
2 <html lang="en">
3 <head>
4 <meta charset="UTF-8">
5 <title>Index⻚⾯</title>
6 </head>
7 <body>
8 Hello,Spring MVC,我是Index⻚⾯.
9 </body>
10 </html>
后端
1 @RestController
2 public class IndexController {
3 @RequestMapping("/index")
4 public Object index(){
5 //返回index.html
6 return "/index.html";
7 }
8 }
结果却发现, ⻚⾯未正确返回, http响应把 “/index.html” 当做了http响应正⽂的数据
那Spring MVC如何才能识别出来 index.html 是⼀个静态⻚⾯, 并进⾏返回呢?
正确
1 @Controller
2 public class IndexController {
3 @RequestMapping("/index")
4 public Object index(){
5 return "/index.html";
6 }
7 }
@Controller和@RestController 区别
由于开发流⾏"前后端分离"模式,View不再返回视图, ⽽是返回显⽰视图时需要的数据.
@RestController = @Controller + @ResponseBody
@RestController 其实是返回的数据
@Controller : 定义⼀个控制器, Spring 框架启动时加载, 把这个对象交给Spring管理.
@ResponseBody : 定义返回的数据格式为⾮视图, 返回⼀个 text/html 信息
2.4.2返回数据@ResponseBody
1 @Controller
2 @ResponseBody
3 public class IndexController {
4 @RequestMapping("/index")
5 public Object index(){
6 return "/index.html";
7 }
8 }
2.4.3返回HTML代码⽚段
- 后端返回数据时, 如果数据中有HTML代码, 也会被浏览器解析
1 @RequestMapping("/returnHtml")
2 @ResponseBody
3 public String returnHtml() {
4 return "<h1>Hello,HTML~</h1>";
5 }
响应中的 Content-Type 常⻅取值有以下⼏种:
• text/html : body 数据格式是 HTML
• text/css : body 数据格式是 CSS
• application/javascript : body 数据格式是 JavaScript
• application/json : body 数据格式是 JSON
如果请求的是js⽂件, Spring MVC会⾃动设置Content-Type为 application/javascript
如果请求的是css⽂件, Spring MVC会⾃动设置Content-Type为 text/css
2.4.4返回JSON
1 @RequestMapping("/returnJson")
2 @ResponseBody
3 public HashMap<String, String> returnJson() {
4 HashMap<String, String> map = new HashMap<>();
5 map.put("Java", "Java Value");
6 map.put("MySQL", "MySQL Value");
7 map.put("Redis", "Redis Value");
8 return map;
9 }
2.4.5设置状态码
Spring MVC会根据我们⽅法的返回结果⾃动设置响应状态码, 程序员也可以⼿动指定状态码
通过Spring MVC的内置对象HttpServletResponse 提供的⽅法来进⾏设置
1 @RequestMapping(value = "/setStatus")
2 @ResponseBody
3 public String setStatus(HttpServletResponse response) {
4 response.setStatus(401);
5 return "设置状态码成功";
6 }
注意:状态码不影响⻚⾯的展⽰
相关文章:
初识Spring Web MVC
1. 什么是 Spring Web MVC? Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架,从⼀开始就包含在 Spring 框架中。它的正式名称“Spring Web MVC”来⾃其源模块的名称(Spring-webmvc),但它通常被称为"SpringMVC".Servlet&am…...
【排序算法】归并排序
目录 一.基本思想 二.递归版本 三.非递归版本 四.特性总结 1.时间复杂度:O(N*logN) 2.空间复杂度:O(N) 3.稳定性:稳定 一.基本思想 归并排序是采用分治法的一个非常典型的应用。它将已经有序的序列合并为完全有序的序列,即…...
游戏AI的创造思路-技术基础-决策树(2)
上一篇写了决策树的基础概念和一些简单例子,本篇将着重在实际案例上进行说明 目录 8. 决策树应用的实际例子 8.1. 方法和过程 8.1.1. 定义行为 8.1.2. 确定属性 8.1.3. 构建决策树 8.1.4. 实施行为 8.1.5. 实时更新 8.2. Python代码 8. 决策树应用的实际例子…...
vue缓存页面,当tab切换时保留原有的查询条件
需求: 切换tab时,查询条件不变 路由页面: 单个页面上加这句话:...
PythonConda系列(亲测有效):【解决方案】Collecting package metadata (current_repodata.json): failed
【解决方案】Collecting package metadata (current_repodata.json): failed 问题描述解决方案小结参考文献 问题描述 在cmd下运行:conda install pylint -y,报错如下: C:\Users\apr> conda install --name apr pylint -y Co…...
web前端开发——标签一(注释、标题、段落、换行、格式、图片)
今天我来针对web前端开发讲解标签一 目录 html标签_标题&段落&换行 注释标签:Ctrl/ 标题标签: h1-h6 段落标签: 换行标签: 格式标签 图片标签_src属性 html标签_标题&段落&换行 注释标签:Ctrl/ Ctrl/ &…...
Django 常见的操作符
在filter() 方法,exclude() 方法中使用大于,小于,模糊匹配等操作符。 常见的操作符如下: 操作符含义示例等于Book.objects.filter(price10)! 或 __ne不等于用于查找字段不等于特定值的记录。但更常用exclude()方法。__gt大于用于…...
AJAX是什么?原生语法格式?jQuery提供分装好的AJAX有什么区别?
ajax 的全称 Asynchronous JavaScript and XML (异步 JavaScript 和 XML)。 AJAX是一种创建交互式网页应用的网页开发技术。其中最核心的依赖是浏览器提供的 XMLHttpRequest 对象,是这个对象使得浏览器可以发出 HTTP 请求与接收 HTTP 响应。实现了在页 面不刷新的…...
docker基础知识以及windows上的docker desktop 安装
记录以供备忘 基础概念: 什么是docker 将程序和环境一起打包,以在不同操作系统上运行的工具软件 什么是基础镜像 选一个基础操作系统和语言后,将对应的文件系统、依赖库、配置等打包为一个类似压缩包的文件,就是基础镜像 什么是…...
【深度学习基础】环境搭建 linux系统下安装pytorch
目录 一、anaconda 安装二、创建pytorch1. 创建pytorch环境:2. 激活环境3. 下载安装pytorch包4. 检查是否安装成功 一、anaconda 安装 具体的安装说明可以参考我的另外一篇文章【环境搭建】Linux报错bash: conda: command not found… 二、创建pytorch 1. 创建py…...
【Sql Server】sql server 2019设置远程访问,外网服务器需要设置好安全组入方向规则
大家好,我是全栈小5,欢迎来到《小5讲堂》。 这是《Sql Server》系列文章,每篇文章将以博主理解的角度展开讲解。 温馨提示:博主能力有限,理解水平有限,若有不对之处望指正! 目录 前言1、无法链接…...
idea启动vue项目一直卡死在51%,问题分析及其如何解决
如果你的项目也一直卡在百分之几十,你可以参考下面的方法,试一试能否解决 问题描述: 通过在idea终端中输入命令 npm run serve 启动vue项目,启动进程一直卡在51% 如何解决: 检查 < template > 标签中的html内容…...
基于STM32设计的智能喂养系统(ESP8266+微信小程序)175
基于STM32设计的牛羊喂养系统(微信小程序)(175) 文章目录 一、前言1.1 项目介绍【1】项目功能介绍【2】项目硬件模块组成【3】ESP8266工作模式配置【4】上位机开发【5】项目模块划分1.2 项目功能需求1.3 项目开发背景1.4 开发工具的选择1.5 系统框架图1.6 系统原理图1.7 硬件实…...
第三方支付平台如何完美契合游戏行业?
在数字经济的浪潮中,游戏行业以其独特的魅力和创新能力,成为全球文化和经济交流的重要桥梁。然而,海外游戏商在进军中国市场时,常面临一系列难题。本文将通过一个故事案例,揭示第三方支付平台PASSTO PAY如何帮助海外游…...
计算机网络 5.6网桥与交换机
第六节 网桥与交换机 一、认识网桥 1.功能:连接两个具有相同或相似的网络结构的网络,解决网络之间距离太远问题,提高网络可靠性,还可以起过滤帧的作用而提高网络的性能。 2.适用场合:同构网。 3.特点: …...
CDH实操--集群卸载
作者:耀灵 1、停止正在运行的服务 a、控制台停止集群服务 b、控制台停止Cloudera Management Service c、命令行停止cm服务 systemctl stop cloudera-scm-agent #所有节点执行 systemctl stop cloudera-scm-server #cdh01节点执行2、主线并移除Parcles rm -r…...
5G RedCap调查报告
一、5G RedCap技术背景 5G RedCap(Reduced Capability缩写,轻量化5G),是3GPP标准化组织定义下的5G裁剪版本,是5G面向中高速率连接场景的物联网技术,它的能力介于5G NR(含eMBB和uRLLC)和LPWA(如LTE-M和NR-IoT)之间,如图1所示,是5G-A(5G Advanced)的关键技术之一。…...
模型(卷积、fc、attention)计算量 MAC/FLOPs 的手动统计方法
文章目录 简介背景为什么理解神经网络中的MAC和FLOPs很重要?资源效率内存效率能耗功耗效率 模型优化性能基准研究与发展 FLOPs 和 MACs 定义1. 全连接层 FLOPs 计算步骤 1:识别层参数步骤 2:计算 FLOPs 和 MACs步骤 3:总结结果使用…...
Git 删除包含敏感数据的历史记录及敏感文件
环境 Windows 10 Git 2.41.0 首先备份你需要删除的文件(如果还需要的话),因为命令会将本地也删除将项目中修改的内容撤回或直接提交到仓库中(有修改内容无法提交) 会提示Cannot rewrite branches: You have unstaged …...
vue-tabs标签页引入其他页面
tabs页面 <template> <div class"app-container"> <el-tabs v-model"activeName" type"card" tab-click"handleClick"> <el-tab-pane label"套餐用户列表" name"first"> <user-list r…...
U-net和U²-Net网络详解
目录 U-Net: Convolutional Networks for Biomedical Image Segmentation摘要U-net网络结构pixel-wise loss weight U-Net: Going Deeper with Nested U-Structure for Salient Object Detection摘要网络结构详解整体结构RSU-n结构RSU-4F结构saliency map fusion module -- 显著…...
Vue3 引入腾讯地图 包含标注简易操作
1. 引入腾讯地图API JavaScript API | 腾讯位置服务 (qq.com) 首先在官网注册账号 并正确获取并配置key后 找到合适的引入方式 本文不涉及版本操作和附加库 据体引入参数参考如下图 具体以链接中官方参数为准标题 在项目根目录 index.html 中 写入如下代码 <!-- 引入腾…...
迅狐抖音机构号授权矩阵系统源码
在数字化营销的浪潮中,抖音以其独特的短视频形式迅速崛起,成为品牌传播和用户互动的重要平台。迅狐抖音机构号授权矩阵系统源码作为一项创新技术,为品牌在抖音上的深度运营提供了强大支持。 迅狐抖音机构号授权矩阵系统源码简介 迅狐抖音机…...
数据库系统原理练习 | 作业2-第2章关系数据库(附答案)
整理自博主本科《数据库系统原理》专业课完成的课后作业,以便各位学习数据库系统概论的小伙伴们参考、学习。 *文中若存在书写不合理的地方,欢迎各位斧正。 专业课本: 目录 一、选择题 二、填空题 三、简答题 四、关系代数 1.课本p70页&…...
有向图的强连通分量——AcWing 367. 学校网络
有向图的强连通分量 定义 强连通分量(Strongly Connected Components, SCC) 是图论中的一个概念,在一个有向图中,如果存在一个子图,使得该子图中的任意两个顶点都相互可达(即从任何一个顶点出发都可以到达该子图中的其他任何顶点…...
安全开发--多语言基础知识
注释:还是要特别说明一下,想成为专业开发者不要看本文,本文是自己从业安全以来的一些经验总结,所有知识点也只限于网络安全这点事儿,再多搞不明白了。 开发语言 笼统的按照是否编译成机器码分类开发语言,…...
如何使一个盒子水平垂直居中(常用的)
目录 1. 使用Flex布局 2. 使用Grid布局 3.绝对定位 负外边距 (必须知晓盒子的具体大小) 4.绝对定位外边距 auto 5.绝对定位 transform (无须知晓盒子的具体大小) 1. 使用Flex布局 如何实现: 在父元素上添加: display: flex; align-items: center…...
安全防御-用户认证综合实验
一、拓扑图 二、实验要求 1、DMZ区的服务器,办公区仅能在办公时间内(9:00-18:00)可以访问,生产区设备全天都是可以访问的 2、生产区不允许访问互联网,办公区和游客区允许访问互联网 3、办公区设备10.0.2.20不允许访…...
uniapp安卓离线打包配置scheme url
uniapp安卓离线打包配置scheme url 打开 AndroidManifest.xml 搜索 scheme 填入 即可 <?xml version"1.0" encoding"utf-8"?> <manifest xmlns:android"http://schemas.android.com/apk/res/android" package"uni.UNI979A394…...
C++ STL std::lexicographical_compare用法和实现
一:功能 按字典顺序比较两个序列,判断第一个序列是否小于(或大于)第二个序列 二:用法 #include <compare> #include <vector> #include <string> #include <algorithm> #include <iostream> #include <fo…...
推送网站建设/seo教程有什么
每个期刊或者会议都有自己的篇幅限制,比如近期准备试水的Signal Processing, Elsevier的期刊,要求单栏,双倍行距,所有文字,表格,图,参考文献加起来不超过30页,我觉得还好,…...
用网站做淘宝客的人多吗/阿里巴巴官网
2019.03.02 突然发现,戴耳机听音乐,比公放更容易被感动。 戴着耳机听音乐,感觉自己就是整个世界,而音乐,就是自己的心声。 写于毕业半年的一个雨天。posted 2019-03-02 11:23 小时候挺菜 阅读(...) 评论(...) 编辑 收…...
黄村做网站哪家好/有没有免费的seo网站
什么是红色表示用户需要输入或定制的生产线将在红色在本教程! 其余的应该主要是复制和粘贴。关于MySQLMySQL是一个开源数据库管理软件,可帮助用户存储,组织和以后检索数据。 它有多种选项来授予特定用户在表和数据库中的细微的权限 - 本教程将…...
农业企业网站模板/拼多多标题关键词优化方法
原文出处:http://www.cnblogs.com/guoyaohua/p/8600214.html0、排序算法说明0.1 排序的定义对一序列对象根据某个关键字进行排序。0.2 术语说明稳定:如果a原本在b前面,而ab,排序之后a仍然在b的前面;不稳定:…...
动易网站建设/有哪些网络推广平台
概述:点语法的作用,property synthesize 如何使用,编译器如何对其进行展开,property的其它属性1)点语法的作用:个人觉得点语法的引入就是为了方便不写[],以下面代码为切入点,介绍int…...
建设网站容易吗/百度一下你就知道百度一下
找出数组中和为某个数的两个数的序号 思路:和为k等价与k-ab,建立字典,遍历每个元素ai 如果k-ai不存在字典中就记下ai的位置i来,到下一个数如果k-ajai在字典中,那么结果就是(i,j) class Solution:def call(self, nums, …...