【JavaWeb】异步请求——AJAX

目录

  • Ajax(Asynchronous JavaScript and XML)
    • 优点
    • 传统Web与Ajax的差异
    • Ajax工作流程
    • Ajax 经典应用场景
    • XMLHttpRequest
      • 常用方法
      • 事件
      • 常用属性
    • ajax: GET请求和POST请求的区别
  • 传统Ajax实现
    • 传统方式实现Ajax的不足
  • $.ajax()
    • 语法
    • 常用属性参数
    • 常用函数参数
  • Ajax的其他方法
    • $.get()
      • 语法
    • $.post()
      • 语法
    • $.getJson()
      • 语法
    • .load() [了解]
  • JSON(JavaScript Object Notation)
    • JSON的优点
    • 定义JSON对象
    • 定义JSON数组
    • JSON使用综合案例
  • 在Ajax中使用JSON数据格式
  • FastJSON
    • 入口类:com.alibaba.fastjson.JSON
    • 枚举类型 SerializerFeature 定义了多种序列化属性
      • 代码示例
  • 基于表单数据的Ajax请求
    • .serializeArray()
      • 检测一组表单元素中的有效控件
      • 将有效控件序列化为JSON对象数组
    • $.param()
    • 代码示例

Ajax(Asynchronous JavaScript and XML)

  • 使用JavaScript 和 XML实现的异步刷新技术
  • Ajax不是新的编程语言,而是一种使用现有标准的新方法
  • Ajax是一种在无需重新加载整个网页的情况下,能够与服务器交换数据并更新部分网页的技术
  • Ajax最大的优点是页面无刷新,用户的体验非常好。并且使用异步方式与服务器通信,具有更加迅速的响应能力

优点

  • 我们可以使用Ajax进行无刷新,无刷新是指不刷新整个页面,只刷新局部。
  • 无刷新的好处: 只更新部分页面,有效利用带宽,提高用户体验
    • 只更新部分页面,有效利用带宽
    • 提供连续的用户体验
    • 提供类似C/S的交互效果,
    • 操作更方便

传统Web与Ajax的差异

差异说明
发送请求方式不同传统Web 浏览器发送同步请求
Ajax技术 异步引擎对象发送请求
服务器响应不同传统Web 响应内容是一个完整页面
Ajax技术 响应内容只是需要的数据
客户端处理方式不同传统Web 需等待服务器响应完成并重新加载整个页面后用户才能进行操作
Ajax技术 可以动态更新页面中的部分内容,不影响用户在页面进行其他操作

Ajax工作流程

在这里插入图片描述

Ajax 经典应用场景

  • 搜索引擎根据用户输入关键字,自动提示检索关键字
  • 动态加载数据,按需取得数据【树形菜单、联动菜单…】
  • 改善用户体验。【输入内容前提示、带进度条文件上传…】
  • 电子商务应用。 【购物车、邮件订阅…】
  • 访问第三方服务。【访问搜索服务、rss 阅读器】
  • 页面局部刷新

XMLHttpRequest

  • 整个Ajax技术的核心
  • 提供异步发送请求的能力

常用方法

方 法说 明
open( String method, String url, boolean async, String user, String password )创建一个新的HTTP请求
send( String data )发送请求到服务器端
abort( )取消当前请求
setRequestHeader( String header, String value )设置请求的某个HTTP头信息
getResponseHeader( String header )获取响应的指定HTTP头信息
getAllResponseHeader( )获取响应的所有HTTP头信息

事件

  • onreadystatechange:指定回调函数

常用属性

  • readyState:XMLHttpRequest的状态信息
就绪状态码说 明
0XMLHttpRequest对象未完成初始化
1XMLHttpRequest对象开始发送请求
2XMLHttpRequest对象的请求发送完成
3XMLHttpRequest对象开始读取响应
4XMLHttpRequest对象读取响应结束
  • status:HTTP的状态码
状态码说 明
200服务器正确返回响应
404请求的资源不存在
500服务器内部错误
403没有访问权限
……
  • statusText:返回当前请求的响应状态
  • responseText:以文本形式获得响应的内容
  • responseXML:将XML格式的响应内容解析成DOM对象

ajax: GET请求和POST请求的区别

步 骤请求方式实 现 代 码
初始化组件GETxmlHttpRequest.open( “GET”, url, true );
初始化组件POSTxmlHttpRequest.open( “POST”, url, true );
xmlHttpRequest.setRequestHeader( “Content-Type”,“application/x-www-form-urlencoded” );
发送请求GETxmlHttpRequest.send( null );
发送请求POSTxmlHttpRequest.send(“key=xxx&type=12&year=20124” );

传统Ajax实现

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>注册</title>
<script type="text/javascript" src="js/jquery-1.12.4.min.js"></script>
<script type="text/javascript">function validate() {var name = $("#name").val();if (name == null || name == "") {$("#nameDiv").html("用户名不能为空!");} else {//1.创建XMLHttpRequest对象xmlHttpRequest = createXmlHttpRequest();//2.设置回调函数xmlHttpRequest.onreadystatechange = callBack;//3.初始化XMLHttpRequest组件var url = "userServlet?name=" + name;//服务器端URL地址,name为用户名文本框获取的值xmlHttpRequest.open("GET", url, true);//4.发送请求xmlHttpRequest.send(null);/* 使用POST方式发送请求var url = "userServlet";//服务器端URL地址xmlHttpRequest.open("POST", url, true);xmlHttpRequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded");var data = "name=" + name;//需要发送的数据信息,name为用户名文本框获取的值xmlHttpRequest.send(data);*///Ajax 回调函数function callBack() {if (xmlHttpRequest.readyState == 4&& xmlHttpRequest.status == 200) {var data = xmlHttpRequest.responseText;if (data == "true") {$("#nameDiv").html("用户名已被使用!");} else {$("#nameDiv").html("用户名可以使用!");}}}//end of callBack()}}//end of validate()/**创建XMLHttpRequest对象*/function createXmlHttpRequest() {if (window.XMLHttpRequest) {//返回值为true时说明是新版本IE或其他浏览器return new XMLHttpRequest();} else {//返回值为false时说明是老版本IE浏览器(IE5和IE6)return new ActiveXObject("Microsoft.XMLHTTP");}}
</script>
</head>
<body><form action="" id="form1"><table><tr><td>用 户 名:</td><td><input type="text" name="name" id="name"onblur="validate();" />&nbsp;<font color="#c00fff">*</font></td><td><div id="nameDiv" style="display: inline"></div></td></tr></table></form>
</body>
</html>

传统方式实现Ajax的不足

  1. 步骤繁琐
  2. 方法、属性、常用值较多不好记忆
  3. 处理复杂结构的响应数据(如XML格式)比较烦琐
  4. 浏览器兼容问题

jQuery将Ajax相关操作都进行了封装

$.ajax()

语法

$.ajax( [settings] );

$.ajax( {"url"      :  "url",      	// 要提交的URL路径"type"     :  "get",        	// 发送请求的方式"data"     :  data,         	// 要发送到服务器的数据"dataType" :  "text",           	// 指定传输的数据格式"success"  :  function(result) {  // 请求成功后要执行的代码},"error"    :  function() {  	// 请求失败后要执行的代码}
} );

常用属性参数

参 数类 型说 明
urlString发送请求的地址,默认为当前页地址
typeString请求方式,默认为GET
dataPlainObject或 String或Array发送到服务器的数据
dataTypeString预期服务器返回的数据类型,包括:XML、HTML、Script、JSON、JSONP、text
timeoutNumber设置请求超时时间
globalBoolean表示是否触发全局Ajax事件,默认为true

常用函数参数

参 数类 型说 明
beforeSendFunction ( jqXHR jqxhr,PlainObject settings )发送请求前调用的函数
successFunction( 任意类型 result,String textStatus, jqXHR jqxhr )请求成功后调用的函数
参数result:可选,由服务器返回的数据
errorFunction ( jqXHR jqxhr, String textStatus, String errorThrown)请求失败时调用的函数
completeFunction ( jqXHR jqxhr,String textStatus )请求完成后(无论成功还是失败)调用的函数
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>注册</title>
<script type="text/javascript" src="js/jquery-1.12.4.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {$("#name").blur(function() {var name = this.value;if (name == null || name == "") {$("#nameDiv").html("用户名不能为空!");} else {$.ajax({"url"       : "userServlet",   //要提交的URL路径"type"      : "GET",           //发送请求的方式"data"      : "name="+name,    //要发送到服务器的数据"dataType"  : "text",          //指定返回的数据格式"success"   : callBack,        //响应成功后要执行的代码"error"     : function() {     //请求失败后要执行的代码alert("用户名验证时出现错误,请稍后再试或与管理员联系!");}});//响应成功时的回调函数function callBack(data) {if (data == "true") {$("#nameDiv").html("用户名已被使用!");} else {$("#nameDiv").html("用户名可以使用!");}}//end of callBack()}});//end of blur()
});
</script>
</head>
<body><form action="" id="form1"><table><tr><td>用 户 名:</td><td><input type="text" name="name" id="name" />&nbsp;<font color="#c00fff">*</font></td><td><div id="nameDiv" style="display: inline"></div></td></tr></table></form>
</body>
</html>

后台servlet:

	public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {String name = request.getParameter("name");boolean used = false;if("ajax".equals(name)){used = true;}else{used = false;}response.setContentType("text/html;charset=UTF-8");PrintWriter out = response.getWriter();out.print(used);out.flush();out.close();}

Ajax的其他方法

$.get()

语法

$.get( url [, data] [, success] [, dataType] );

$.get( url, data, function( result ) {// 省略将服务器返回的数据显示到页面的代码
} );

以上代码等价于

$.ajax( {"url"           : url,"data"        : data,"type"        : "get","success" : function( result ) {// 省略代码}
} );

$.post()

语法

$.post( url [, data] [, success] [, dataType] );

$.post( url, data, function( result ) {// 省略将服务器返回的数据显示到页面的代码
} );

以上代码等价于

$.ajax( {"url"           : url,"data"        : data,"type"        : "post","success" : function( result ) {// 省略代码}
} );

$.getJson()

语法

$.getJSON( url [, data] [, success] );

$.getJSON( url, data, function( result ) {// 省略将服务器返回的数据显示到页面的代码
} );

以上代码等价于

$.ajax( {"url"            : url,"data"         : data,"type"         : "get","dataType" : "json","success"   : function( result ) {// 省略代码}
} );

.load() [了解]

  • 返回HTML内容并设置到元素中
  • 不是全局函数
  • 匿名的回调函数
  • 默认使用GET方式

JSON(JavaScript Object Notation)

  • 一种轻量级的数据交换格式
  • 采用独立于语言的文本格式
  • 通常用于在客户端和服务器之间传递数据

JSON的优点

  • 轻量级交互语言
  • 结构简单
  • 易于解析

定义JSON对象

var JSON对象 = { “name” : value, “name” : value, …… };

var person = { "name" : "张三",   "age" : 30,  "spouse" : null };

定义JSON数组

var JSON数组 = [ value, value, …… ];

var countryArray = [ "中国",  "美国",  "俄罗斯" ];
var personArray = [ { "name":"张三",  "age":30 },{ "name":"李四",  "age":40 } ];

JSON使用综合案例

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>注册</title>
<script type="text/javascript" src="js/jquery-1.12.4.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {//1、定义JSON格式的user对象,并在div中输出var user = {"id" : 1,"name" : "张三","pwd" : "000"};$("#objectDiv").append("ID:" + user.id + "<br>").append("用户名:" + user.name + "<br>").append("密码:" + user.pwd + "<br>");//2、定义JSON格式的字符串数组,并在ul和select中输出var ary = [ "中", "美", "俄" ];var $ary = $(ary);var $ul = $("#arrayUl"); // 展示数据的ul元素var $sel = $("#arraySel"); // 展示数据的select元素$ary.each(function() { $ul.append("<li>"+this+"</li>"); });$ary.each(function(i) {$sel.append("<option value='"+(i+1)+"'>"+this+"</option>");});//3、定义JSON格式的user对象数组,并使用<table>输出var userArray = [ {"id" : 2,"name" : "admin","pwd" : "123"}, {"id" : 3,"name" : "詹姆斯","pwd" : "11111"}, {"id" : 4,"name" : "梅西","pwd" : "6666"} ];var $table = $("<table border='1'></table>").append("<tr><td>ID</td><td>用户名</td><td>密码</td></tr>");$(userArray).each(function() {$table.append("<tr><td>" + this.id + "</td><td>"+ this.name + "</td><td>"+ this.pwd + "</td></tr>");});$("#objectArrayDiv").append($table);});
</script>
</head>
<body>
一、JSON格式的user对象:<div id="objectDiv"></div><br>
二、JSON格式的字符串数组:&nbsp;&nbsp;<select id="arraySel"></select>
<ul id="arrayUl"></ul>
三、JSON格式的user对象数组:<div id="objectArrayDiv"></div>
</body>
</html>

在Ajax中使用JSON数据格式

jQuery(document).ready(function($) {function initNews() {//使用Ajax技术获取新闻列表数据$.ajax({"url"		: "../util/news","type"		: "GET","data"		: "opr=list","dataType"	: "json","success"	: processNewsList});}function processNewsList(data) {//展示新闻列表var $newsList = $("#opt_area>ul");for (var i = 0; i < data.length;) {$newsList.append("<li>" + data[i].ntitle + "<span> 作者:"+ data[i].nauthor + " &#160;&#160;&#160;&#160; "+ "<a href='#'>修改</a> &#160;&#160;&#160;&#160; "+ "<a href='#' οnclick='return clickdel()'>删除</a>" + "</span></li>");if ((++i) % 5 == 0) {$newsList.append("<li class='space'></li>");}}}initNews();//执行新闻列表初始化工作
});

后台servlet代码:

List<News> list = newsService.findAllNews();
News news = null;
StringBuffer newsJSON = new StringBuffer("[");
for (int i = 0;;) {news = list.get(i);newsJSON.append("{\"nid\":" + news.getNid() + ",");newsJSON.append("\"ntitle\":\""+ news.getNtitle().replace("\"", "&quot;") + "\",");newsJSON.append("\"nauthor\":\""+ news.getNauthor().replace("\"", "&quot;") + "\"}");if ((++i) == list.size()) {break;} else {newsJSON.append(",");}
}
newsJSON.append("]");
out.print(newsJSON);
out.flush();
out.close();

FastJSON

  • 随着JSON的广泛使用,在服务器端生成JSON字符串成了一件麻烦的工作,效率低且易出错
  • FastJSON:一个性能很好的、Java实现的JSON解析器和生成器
    • 将Java对象序列化成JSON字符串
    • 将JSON字符串反序列化得到Java对象
  • 官网:https://github.com/alibaba/fastjson/releases

入口类:com.alibaba.fastjson.JSON

方 法说 明
public static String toJSONString ( Object object )将Java对象序列化成JSON字符串
public static String toJSONString (Object object, boolean prettyFormat )prettyFormat为true时生成带格式的JSON字符串
public static String toJSONString ( Object object, SerializerFeature… features )可以通过参数features指定更多序列化规则
public static String toJSONStringWithDateFormat (Object object, String dateFormat, SerializerFeature… features )可以通过参数dateFormat指定日期类型的输出格式

枚举类型 SerializerFeature 定义了多种序列化属性

枚 举 值说 明
QuoteFieldNames为字段名加双引号,默认即使用
WriteMapNullValue输出值为null的字段,默认不输出
WriteNullListAsEmpty将值为null的List字段输出为[ ]
WriteNullStringAsEmpty将值为null的String字段输出为“”
WriteNullNumberAsZero将值为null的数值字段输出为0
WriteNullBooleanAsFalse将值为null的Boolean字段输出为false
SkipTransientField忽略transient字段,默认即忽略
PrettyFormat格式化JSON字符串,默认不格式化
// 包含值为 null 的字段,数值为 null  输出0,String 为 null 输出“”
String  strJSON = JSON.toJSONString ( javaObject,SerializerFeature.WriteMapNullValue,SerializerFeature.WriteNullNumberAsZero,SerializerFeature.WriteNullStringAsEmpty );

代码示例

List<News> list = newsService.findAllNews();
String newsJSON = JSON.toJSONStringWithDateFormat(list,
out.print(newsJSON);
out.flush();
out.close();

基于表单数据的Ajax请求

  • 需要发送表单数据时,提取表单元素的值并构造成合适的数据格式是件很烦琐的事。
  • 使用jQuery提供的方法简化处理
    • .serializeArray()
    • $.param()

.serializeArray()

检测一组表单元素中的有效控件

  • 没有被禁用
  • 必须有name属性
  • 选中的checkbox或radio
  • 触发提交事件的submit按钮
  • file元素不会被序列化

将有效控件序列化为JSON对象数组

  • 包含name和value两个属性

$.param()

将由. serializeArray()生成的对象数组序列化成请求字符串的形式
在这里插入图片描述

jQuery还提供了.serialize()方法。.serialize()内部使用$.param()对.serializeArray()做了一个简单包装。不需要中间环节时,可以更简便地完成表单数据的序列化

代码示例

jQuery(document).ready(function($) {function initNews() {//使用Ajax技术获取新闻列表数据$.getJSON("../util/news", "opr=list", processNewsList);}function processNewsList(data) {//展示新闻列表var $newsList = $("#opt_area>ul").empty();for (var i = 0; i < data.length;) {$newsList.append("<li>" + data[i].ntitle + "<span> 作者:"+ data[i].nauthor + " &#160;&#160;&#160;&#160; "+ "<a href='#'>修改</a> &#160;&#160;&#160;&#160; "+ "<a href='#' οnclick='return clickdel()'>删除</a>" + "</span></li>");if ((++i) % 5 == 0) {$newsList.append("<li class='space'></li>");}}}/*function initNews() {//使用Ajax技术获取新闻列表数据$("#opt_area>ul").load("../util/news", "opr=listHtml");}*/initNews();//执行新闻列表初始化工作function initTopics() {//使用Ajax技术获取主题列表数据$.getJSON("../util/topics", "opr=list", processTopicsList);}function processTopicsList(data) {//展示主题列表var $topicsList = $("#opt_area>ul").empty();for (var i = 0; i < data.length; ++i) {$topicsList.append("<li> &#160;&#160;&#160;&#160; "+ data[i].tname + " &#160;&#160;&#160;&#160; "+ "<a href='../newspages/topic_modify.jsp?tid="+ data[i].tid + "&tname=" + data[i].tname + "'>修改</a>"+ " &#160;&#160;&#160;&#160; <a href='../util/topics?opr=del&tid="+ data[i].tid + "'>删除</a> </li>");}}/*function initTopics() {//使用Ajax技术获取主题列表数据$("#opt_area>ul").load("../util/topics", "opr=listHtml");}*/var $leftLinks = $("#opt_list a"); // 获取页面左侧功能链接$leftLinks.eq(3).click(initTopics);$leftLinks.eq(1).click(initNews);
});

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/187.shtml

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

相关文章

golang 迷宫回溯算法(递归)

// Author sunwenbo // 2024/4/14 20:13 package mainimport "fmt"// 编程一个函数&#xff0c;完成老鼠找出路 // myMap *[8][7]int 地图&#xff0c;保证是同一个地图&#xff0c;因此是引用类型 // i,j表示对地图的哪个点进行测试 func SetWay(myMap *[8][7]int, …

网络基础-基于TCP协议的Socket通讯

一、Socket通讯基于TCP协议流程图 UDP 的 Socket 编程相对简单些不在介绍。 二、 服务端程序启动 服务端程序要先跑起来&#xff0c;然后等待客户端的连接和数据。 服务端程序首先调用 socket() 函数&#xff0c;创建网络协议为 IPv4&#xff0c;以及传输协议为 TCP 的…

基于XML配置bean(二)

文章目录 1.工厂中获取bean1.静态工厂1.MyStaticFactory.java2.beans.xml3.测试 2.实例工厂1.MyInstanceFactory.java2.beans.xml3.测试 3.FactoryBean&#xff08;重点&#xff09;1.MyFactoryBean.java2.beans.xml3.测试 2.bean配置信息重用继承抽象bean1.beans.xml2.测试 3.…

HarmonyOS实战开发-如何实现一个简单的健康生活应用

功能概述 成就页面展示用户可以获取的所有勋章&#xff0c;当用户满足一定的条件时&#xff0c;将点亮本页面对应的勋章&#xff0c;没有得到的成就勋章处于熄灭状态。共有六种勋章&#xff0c;当用户连续完成任务打卡3天、7天、30天、50天、73天、99天时&#xff0c;可以获得…

SpringBoot框架——8.MybatisPlus常见用法(常用注解+内置方法+分页查询)

1.MybatisPlus常用注解&#xff1a; 1.1 当数据库、表名和字段名和实体类完全一致时无需加注解&#xff0c;不一致时&#xff1a; TableName指定库名 TableId指定表名 TableField指定字段名 1.2 自增主键&#xff1a; TableId(typeIdType.AUTO) private Long id; 1.3 实体类中属…

2000-2022年各省人力资本水平数据(含原始数据+计算过程+计算结果)(无缺失)

2000-2022年各省人力资本水平数据&#xff08;含原始数据计算过程计算结果&#xff09; 1、时间&#xff1a;2000-2022年 2、来源&#xff1a;国家统计局 3、指标&#xff1a;普通高等学校在校学生数(万人)、年末常住人口&#xff08;万人&#xff09;、人力资本水平 4、范…

CTFshow-PWN-前置基础(pwn20)

提交ctfshow{【.got表与.got.plt是否可写(可写为1&#xff0c;不可写为0)】,【.got的地址】,【.got.plt的地址】 前置基础知识&#xff1a; .got 和 .got.plt 是 ELF&#xff08;Executable and Linkable Format&#xff0c;可执行和可链接格式&#xff09;二进制文件中的两个…

(四)qt中使用ffmpeg播放视频,可暂停恢复

一、在qt中添加ffmpeg库及头文件 INCLUDEPATH /usr/local/ffmpeg/include LIBS -L/usr/local/lib -lavutil -lavcodec -lavformat -lswscale 二、详细代码 FFempegVideoDecode 视频解码类&#xff08;放入线程中&#xff09; ffmpegvideodecode.h #ifndef FFMPEGVIDEODE…

RHCE作业二

一.配置server主机要求如下&#xff1a; 1.server主机的主机名称为 ntp_server.example.com 2.server主机的IP为&#xff1a; 172.25.254.100 3.server主机的时间为1984-11-11 11&#xff1a;11&#xff1a;11 4.配置server主机的时间同步服务要求可以被所有人使用 二.设定cli…

Http 请求偶发400错误

1. 背景 生产环境偶发400请求错误&#xff0c;发生概率万分之一&#xff0c;异常信息如下&#xff1a; 1&#xff09; 从异常信息可以看到&#xff0c;skywalking的sw8 header解析失效导致异常信息。 2&#xff09; 0x0d0x0a 作为回车换行符号&#xff0c;没有被正确处理&#…

OpenGL:图元

OpenGL的图元 点 GL_POINTS: 将顶点绘制成单个的点 线 GL_LINES:将顶点用于创建线段,2个点成为一条单独的线段。如果顶点个数是奇数,则忽略最后一个。 顶点:v0, v1, v2, v3, … , vn,线段:v0-v1, v2-v3, v4-v5, … , vn-1 - vn GL_LINE_STRIP:将顶点用于创建线段,…

学习笔记(4月18日)vector底层模拟实现(1)

1.迭代器 vector实际上是由迭代器进行维护的&#xff0c;关于迭代器是什么&#xff0c;为什么要叫这个名字&#xff0c;后面的学习会逐渐了解&#xff0c;现在先将迭代器是作为指针即可。 vector底层有三个迭代器&#xff0c;用来起到容量、数组头、元素个数的作用。 同时为…

基于XML配置bean(一)

文章目录 1.获取bean的两种方式1.通过id获取bean&#xff08;前面用过&#xff09;2.通过类型获取bean&#xff08;单例时使用&#xff09;1.案例2.代码1.beans.xml2.SpringBeanTest.java3.结果 3.注意事项 2.三种基本依赖注入方式1.通过属性配置bean&#xff08;前面用过&…

DDoS攻击趋势分析及防御建议:网络安全新挑战与应对策略

在数字化日益普及的今天&#xff0c;网络安全问题日益凸显。其中&#xff0c;分布式拒绝服务&#xff08;DDoS&#xff09;攻击以其巨大的破坏力和难以防范的特性&#xff0c;发起简单、效果显著、难以追踪等特点&#xff0c;因此被黑客广泛使用&#xff0c;已经成为网络安全领…

Python(九十四)变量的作用域

❤️ 专栏简介&#xff1a;本专栏记录了我个人从零开始学习Python编程的过程。在这个专栏中&#xff0c;我将分享我在学习Python的过程中的学习笔记、学习路线以及各个知识点。 ☀️ 专栏适用人群 &#xff1a;本专栏适用于希望学习Python编程的初学者和有一定编程基础的人。无…

CSS 设置空格原样显示 white-space:pre-wrap;

CSS 设置空格原样显示 问题描述 html 渲染内容时&#xff0c;对于 空格、回车、Tab 键的 默认处理方式是 &#xff1a; 无论存在多少个连续的空格&#xff0c;都只会保留一个。 结论 由于以上的特性&#xff0c;导致了我们无法直接渲染出原格式的文本。pre 标签 了解一下 &…

element-plus中的图标和文字水平对齐

<span><el-icon size"14px"><Delete /></el-icon> <span>删除</span> </span>解决方法&#xff1a;加上vertical-align: middle样式就可以了 <span><el-icon size"14px" style"vertical-align: …

【STM32CubeIDE 1.15.0】汉化包带路径配置过程

一、IDE软件下载 二、汉化版包路径 三、IDE软件板载汉化包 一、IDE软件下载 ST官网IDE下载链接 二、汉化版包路径 https://mirrors.ustc.edu.cn/eclipse/technology/babel/update-site/ 找不到就到.cn后面一级一级进 三、IDE软件板载汉化包 https://mirrors.ustc.edu…

数据库工具解析之 OceanBase 数据库导出工具

背景 大多数的数据库都配备了自己研发的导入导出工具&#xff0c;对于不同的使用者来说&#xff0c;这些工具能够发挥不一样的作用。例如&#xff1a;DBA可以使用导数工具进行逻辑备份恢复&#xff0c;开发者可以使用导数工具完成系统间的数据交换。这篇文章主要是为OceanBase…

​波士顿动力发布全新人形机器人:Atlas

4月16日&#xff0c;波士顿动力&#xff08;Boston Dynamics&#xff09;发布了《再见&#xff0c;液压Atlas》视频&#xff0c;正式宣告其研发的液压驱动双足人形机器人Atlas退役。 在视频的结尾&#xff0c;Atlas深深鞠躬&#xff0c;之后还有一句话“直到我们再次相遇&…