在Java中对XML的简单应用

  • XML 数据传输格式
    • 1 XML 概述
      • 1.1 什么是 XML
      • 1.2 XML 与 HTML 的主要差异
      • 1.3 XML 不是对 HTML 的替代
    • 2 XML 语法
      • 2.1 基本语法
      • 2.2 快速入门
      • 2.3 组成部分
        • 2.3.1 文档声明
          • 格式
          • 属性
        • 2.3.2 指令(了解):结合CSS
        • 2.3.3 元素
        • 2.3.4 属性
          • **XML 元素 vs. 属性**
        • 2.3.5 文本
          • **CDATA 区段(CDATA section)**
      • 2.4 XML 约束
        • 2.4.1 XML DTD (简单)
          • DTD 的引入
        • 2.4.2 XML Schema (复杂)
          • Schema 的引入
    • 3 XML 解析
      • 3.1 什么是 解析 XML
        • 3.1.1 操作 XML 文档
        • 3.1.2 解析 XML 的方式
      • 3.2 XML 常见的解析器
      • 3.3 Jsoup
        • 3.3.1 快速入门
        • 3.3.2 对象的使用
          • 3.3.2.1 Jsoup
          • 3.3.2.2 Document
          • 3.3.2.3 Element
          • 3.3.2.4 Elements
          • 3.3.2.5 Node
      • 3.4 快捷查询方式
          • 3.4.1 Selector 选择器
          • 3.4.2 XPath 选择器

XML 数据传输格式

1 XML 概述

1.1 什么是 XML

  • XML 指可扩展标记语言(EXtensible Markup Language)。
  • XML 是一种很像HTML的标记语言。
  • XML 的设计宗旨是传输数据,而不是显示数据。
  • XML 标签没有被预定义。您需要自行定义标签。
  • XML 被设计为具有自我描述性。
  • XML 是 W3C 的推荐标准

1.2 XML 与 HTML 的主要差异

  • XML 不是 HTML 的替代。
  • XML 和 HTML 为不同的目的而设计:
  • XML 被设计为传输和存储数据,其焦点是数据的内容。
  • HTML 被设计用来显示数据,其焦点是数据的外观。
  • HTML 旨在显示信息,而 XML 旨在传输信息。

**注意:**XML 不会做任何事情。XML 被设计用来结构化、存储以及传输信息。

1.3 XML 不是对 HTML 的替代

XML 是对 HTML 的补充。

XML 不会替代 HTML,理解这一点很重要。在大多数 web 应用程序中,XML 用于传输数据,而 HTML 用于格式化并显示数据。

对 XML 最好的描述是:XML 是独立于软件和硬件的信息传输工具。

2 XML 语法

2.1 基本语法

  1. XML 文档的后缀名必须为.xml

  2. XML 第一行必须定义为文档声明

    <?xml version='1.0' ?>

  3. XML 文档有且仅有一个根元素

    XML 文档必须有一个元素是所有其他元素的父元素。该元素称为根元素

    <root><child><subchild>.....</subchild></child>
    </root>
    
  4. XML 的属性值须加引号

    在 XML 中,XML 的属性值须加引号。请研究下面的两个 XML 文档。第一个是错误的,第二个是正确的:

    <!-- 这是错误的 -->
    <note date=08/08/2008>
    <to>George</to>
    <from>John</from>
    </note> 
    
    <!-- 这是正确的 -->
    <note date="08/08/2008">
    <to>George</to>
    <from>John</from>
    </note> 
    
  5. 所有 XML 元素都须有关闭标签

    在 XML 中,省略关闭标签是非法的。所有元素都必须有关闭标签:

    <p>This is a paragraph</p>
    <p>This is another paragraph</p>  
    

    **注意:**XML 声明没有关闭标签。这不是错误。声明不属于XML本身的组成部分。它不是 XML 元素,也不需要关闭标签。

  6. XML 标签对大小写敏感

    XML 元素使用 XML 标签进行定义。

    XML 标签对大小写敏感。在 XML 中,标签 <Letter> 与标签 <letter> 是不同的。

    必须使用相同的大小写来编写打开标签和关闭标签:

    <Message>这是错误的。</message><message>这是正确的。</message> 
    
  7. XML 必须正确地嵌套

    在 XML 中,所有元素都必须彼此正确地嵌套:

    <b><i>This text is bold and italic</i></b>
    

    在上例中,正确嵌套的意思是:由于 <i> 元素是在<b>元素内打开的,那么它必须在<b>元素内关闭。

  8. XML 会保留空格

    在 XML 中,文档中的空格不会被删节。

2.2 快速入门

<?xml version='1.0' ?>
<users><user id='1'><name>zhangsan</name><age>23</age><gender>male</gender><br/></user><user id='2'><name>lisi</name><age>24</age><gender>female</gender></user>
</users>

2.3 组成部分

2.3.1 文档声明

格式

<?xml 属性列表 ?>

属性
  • version:版本号 必须添加
  • encoding:编码方式 告知解析引擎当前文档使用的字符集,默认值:ISO-8859-1
  • standalone:是否独立
    • 取值:
      • yes: 不依赖其他文件
      • no: 依赖其他文件

2.3.2 指令(了解):结合CSS

<?xml-stylesheet type="text/css" href="a.css" ?>

2.3.3 元素

XML 命名规则

XML 元素必须遵循以下命名规则:

  • 名称可以含字母、数字以及其他的字符
  • 名称不能以数字或者标点符号开始
  • 名称不能以字符 “xml”(或者 XML、Xml)开始
  • 名称不能包含空格

可使用任何名称,没有保留的字词。

2.3.4 属性

注意: id属性值唯一


XML 元素 vs. 属性

请看这些例子:

<person sex="female"><firstname>Anna</firstname><lastname>Smith</lastname>
</person> <person><sex>female</sex><firstname>Anna</firstname><lastname>Smith</lastname>
</person>

在第一个例子中,sex 是一个属性。在第二个例子中,sex 则是一个子元素。两个例子均可提供相同的信息。

没有什么规矩可以告诉我们什么时候该使用属性,而什么时候该使用子元素。我的经验是在 HTML 中,属性用起来很便利,但是在 XML 中,应该尽量避免使用属性。如果信息感觉起来很像数据,那么请使用子元素吧。

2.3.5 文本

CDATA 区段(CDATA section)

术语 CDATA 指的是不应由 XML 解析器进行解析的文本数据(Unparsed Character Data)。

在 XML 元素中,“<” 和 “&” 是非法的。

“<” 会产生错误,因为解析器会把该字符解释为新元素的开始。

“&” 也会产生错误,因为解析器会把该字符解释为字符实体的开始。

某些文本,比如 JavaScript 代码,包含大量 “<” 或 “&” 字符。为了避免错误,可以将脚本代码定义为 CDATA。

CDATA 部分中的所有内容都会被解析器忽略(原样展示)。

CDATA 部分由 <![CDATA[ 开始,由 ]]> 结束:

<![CDATA[function matchwo(a,b) {if (a < b && a < 0) then {return 1;}else {return 0;}}
]]>

在上面的例子中,解析器会忽略 CDATA 部分中的所有内容。

关于 CDATA 部分的注释:

  • CDATA 部分不能包含字符串 ]]>。也不允许嵌套的 CDATA 部分。

  • 标记 CDATA 部分结尾的 ]]> 不能包含空格或折行。

2.4 XML 约束

约束简单来说就是规定 XML 文档的书写规则

对约束的图解:

请添加图片描述

作为框架的使用者(程序员) 要求:

  1. 能够在 XML 中引入约束文档
  2. 能够简单的读懂约束文档

2.4.1 XML DTD (简单)

文档类型定义(DTD)可定义合法的XML文档构建模块。它使用一系列合法的元素来定义文档的结构。

DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用。

DTD 的引入

内部DTD:将约束规则定义在XML文档中

外部DTD:将约束的规则定义在外部的DTD文件中

- 本地:`<!DOCTYPE 根标签名 SYSTEM "dtd文件的位置">`
- 网络:`<!DOCTYPE 根标签名 PUBLIC "dtd文件名字" "dtd文件的位置URL">`

2.4.2 XML Schema (复杂)

Schema 的引入
  1. 填写xml文档的根元素
  2. 引入xsi前缀 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. 引入xsd文件命名空间 xsi:schemaLocation="http://www.itcast.cn/xml student.xsd"
  4. 为每一个xsd约束声明一个前缀,作为标识 xmlns="http://www.itcast.cn/xml"
<students   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://www.itcast.cn/xml"xsi:schemaLocation="http://www.itcast.cn/xml  student.xsd">

3 XML 解析

3.1 什么是 解析 XML

3.1.1 操作 XML 文档

3.1.2 解析 XML 的方式

DOM: 将标记语言文档一次性加载进内存,在内存中形成一颗DOM树。

  • 优点:操作方便,可以对文档进行CRUD的所有操作
  • 缺点:占内存

SAX: 逐行读取,基于事件驱动的。

  • 优点:不占内存
  • 缺点:只能读取,不能增删改

注意:DOM一般用于服务器端,SAX一般用于移动端

3.2 XML 常见的解析器

JAXP: sun公司提供的解析器,支持dom和sax两种方式。

DOM4j: DOM4j是一个开源的,基于Java的库来解析XML文档,它具有高度的灵活性,高性能和内存效率的API。

Jsoup: Jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。

PULL: Android操作系统内置的解析器,sax方式的。

3.3 Jsoup

3.3.1 快速入门

步骤

  1. 导入jar包 : jsoup-版本号.jar,JsoupXpath-版本号.jar
  2. 获取Document对象
  3. 获取对应的标签Element对象
  4. 获取数据

示例代码:

 public static void main(String[] args) throws IOException {//获取Document对象,根据xml文档获取//获取student.xml的path路径String path = JsoupDemo01.class.getClassLoader().getResource("student.xml").getPath();//解析xml文档,加载文档进内存,获取dom树   --->documentDocument document = Jsoup.parse(new File(path), "utf-8");//获取元素对象Elements elements = document.getElementsByTag("name");//获取第一个name的element对象Element element = elements.get(0);//获取文本内容String name = element.text();System.out.println(name);}

3.3.2 对象的使用

3.3.2.1 Jsoup

Jsoup: 工具类,可以解析html或xml文档,返回Document

parse() 用法

parse() 解析html或xml文档,返回Document

  • parse(File in, String charsetName):解析xml或html文件的。
  • parse(String html):解析xml或html字符串
  • parse(URL url, int timeoutMillis):通过网络路径获取指定的html或xml的文档对象

示例代码:

public static void main(String[] args) throws IOException {//获取student.xml的path路径String path = JsoupDemo02.class.getClassLoader().getResource("student.xml").getPath();//解析xml文档,加载文档进内存,获取dom树   --->document/*Document document = Jsoup.parse(new File(path), "utf-8");System.out.println(document);*///parse(String html):解析html字符串String str = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n" +" <students>\n" +" \t<student number=\"heima_0001\">\n" +" \t\t<name>tom</name>\n" +" \t\t<age>16</age>\n" +" \t\t<sex>male</sex>\n" +" \t</student>\n" +"\t<student number=\"heima_0002\">\n" +"\t\t<name>claier</name>\n" +"\t\t<age>18</age>\n" +"\t\t<sex>female</sex>\n" +"\t</student>\n" +"\t\t \n" +" </students>";/*Document document = Jsoup.parse(str);System.out.println(document);*///parse(URL url,int timeoutMillis),通过网络路径获取指定的HTML的文档对象URL url = new URL("https://baike.baidu.com/item/jsoup/9012509?fr=aladdin");//代表网络中的一个资源网络Document document = Jsoup.parse(url, 10000);System.out.println(document);
}
3.3.2.2 Document

Document:文档对象。代表内存中的dom树

获取Element对象

  • getElementById(String id):根据id属性值获取唯一的element对象
  • getElementsByTag(String tagName):根据标签名称获取元素对象集合
  • getElementsByAttribute(String key):根据属性名称获取元素对象集合
  • getElementsByAttributeValue(String key, String value):根据对应的属性名和属性值获取元素对象集合

示例代码:

public static void main(String[] args) throws IOException { //获取student.xml的path路径String path = JsoupDemo03.class.getClassLoader().getResource("student.xml").getPath();//获取document对象Document document = Jsoup.parse(new File(path), "utf-8");//获取元素对象 //1.获取所有的student对象Elements elements = document.getElementsByTag("student");
//        System.out.println(elements);//2.获取属性名为id的元素对象们Elements elements1 = document.getElementsByAttribute("id");
//        System.out.println(elements1);//3.获取number属相值为heima_0001的元素对象Elements elements2 = document.getElementsByAttributeValue("number", "heima_0001");
//        System.out.println(elements2);//4.获取id属性值的元素Element element = document.getElementById("1");System.out.println(element);
}
3.3.2.3 Element

Element: 元素对象

  1. 获取子元素对象

    • getElementById(String id): 根据id属性值获取唯一的element对象
    • getElementsByTag(String tagName): 根据标签名称获取元素对象集合
    • getElementsByAttribute(String key): 根据属性名称获取元素对象集合
    • getElementsByAttributeValue(String key, String value): 根据对应的属性名和属性值获取元素对象集合
  2. 获取属性值

    • String attr(String key):根据属性名称获取属性值
  3. 获取文本内容

    • String text(): 获取文本内容

    • String html(): 获取标签体的所有内容(包括字标签的字符串内容)

示例代码:

public static void main(String[] args) throws IOException { //获取student.xml的path路径String path = JsoupDemo04.class.getClassLoader().getResource("student.xml").getPath();//获取document对象Document document = Jsoup.parse(new File(path), "utf-8");//获取元素对象 //通过Document对象获取name标签,它是获取所有的name标签,本案例可以获取到两个Elements elements = document.getElementsByTag("name");System.out.println(elements.size());//通过Element对象或去子标签对象Element element_student = document.getElementsByTag("student").get(0);Elements ele_stu_name = element_student.getElementsByTag("name");System.out.println(ele_stu_name);System.out.println(ele_stu_name.size());//获取student对象的属性值String number = element_student.attr("number");System.out.println(number); System.out.println("--------------");//获取文本内容 //获取所有子标签的纯文本内容String text = ele_stu_name.text();System.out.println(text);//获取标签体的所有内容(包括子标签的标签和文本内容)String html = ele_stu_name.html();        System.out.println(html);
}
3.3.2.4 Elements

Elements: 元素Element对象的集合。

可以当作ArrayList<Element>来使用

3.3.2.5 Node

Node: Element 和 Document 的父类

3.4 快捷查询方式

3.4.1 Selector 选择器

使用方法Elements select(String cssQuery)

语法:参考 Selector 类中定义的语法

示例代码:

public static void main(String[] args) throws IOException { //获取student.xml的path路径String path = JsoupDemo05.class.getClassLoader().getResource("student.xml").getPath();//获取document对象Document document = Jsoup.parse(new File(path), "utf-8");//获取元素对象//获取name标签Elements elements = document.select("name");System.out.println(elements); System.out.println("-------------");//查询id为1的元素Elements elements1 = document.select("#1");System.out.println(elements1); System.out.println("-------------");//获取student标签且number属性值为heima_0001的age子标签//获取student标签且number属性值为heima_0001Elements elements2 = document.select("student[number='heima_0001']");System.out.println(elements2);System.out.println("-------------");//获取student标签且number属性值为heima_0001的age子标签Elements elements3 = document.select("student[number='heima_0001'] age");System.out.println(elements3);
}
3.4.2 XPath 选择器

XPath 即为XML路径语言,它是一种用来确定XML(标准通用标记语言的子集)文档中某部分位置的语言

注意

  • 使用 Jsoup 的 Xpath 需要额外导入jar包
  • 查询 W3Cshool 参考手册,使用 xpath 的语法完成查询

示例代码:

public static void main(String[] args) throws IOException, XpathSyntaxErrorException { //获取student.xml的path路径String path = JsoupDemo06.class.getClassLoader().getResource("student.xml").getPath();//获取document对象Document document = Jsoup.parse(new File(path), "utf-8");//根据document对象创建JXDocumentJXDocument jxDocument = new JXDocument(document);//结合xpath语法查询//查询所有的student标签List<JXNode> jxNodes = jxDocument.selN("//student");for (JXNode jxNode : jxNodes) {System.out.println(jxNode);} System.out.println("----------");//查询所有student标签下的name标签List<JXNode> jxNodes1 = jxDocument.selN("//student/name");for (JXNode jxNode : jxNodes1) {System.out.println(jxNode);} System.out.println("-----------");//查询student标签下带有id属性的name标签List<JXNode> jxNodes2 = jxDocument.selN("//student/name[@id]");for (JXNode jxNode : jxNodes2) {System.out.println(jxNode);} System.out.println("-------------");//查询student标签下带有id属性的name标签并且id属性值为1List<JXNode> jxNodes3 = jxDocument.selN("//student/name[@id='1']");for (JXNode jxNode : jxNodes3) {System.out.println(jxNode);}System.out.println("-------------");}

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

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

相关文章

windows程序基础

一、windows程序基础 1. Windows程序的特点 1&#xff09;用户界面统一、友好 2&#xff09;支持多任务:允许用户同时运行多个应用程序(窗口) 3&#xff09;独立于设备的图形操作 使用图形设备接口( GDI, Graphics Device Interface )屏蔽了不同硬件设备的差异&#…

LVGL学习笔记 30 - List(列表)

目录 1. 添加文本 2. 添加按钮 3. 事件 4. 修改样式 4.1 背景色 4.2 改变项的颜色 列表是一个垂直布局的矩形&#xff0c;可以向其中添加按钮和文本。 lv_obj_t* list1 lv_list_create(lv_scr_act());lv_obj_set_size(list1, 180, 220);lv_obj_center(list1); 部件包含&…

Android:换肤框架Android-Skin-Support

gihub地址&#xff1a;https://github.com/ximsfei/Android-skin-support 样例&#xff1a; 默认&#xff1a; 更换后&#xff1a; 一、引入依赖&#xff1a; // -- 换肤依赖implementation skin.support:skin-support:4.0.5// skin-supportimplementation skin.support:ski…

Rust语法:变量,函数,控制流,struct

文章目录 变量可变与不可变变量变量与常量变量的Shadowing标量类型整数 复合类型 函数控制流if elseloop & whilefor in structstruct的定义Tuple Structstruct的方法与函数 变量 可变与不可变变量 Rust中使用let来声明变量&#xff0c;但是let声明的是不可变变量&#x…

双色球彩票系统---(java实现)

双色球彩票系统&#xff1a;需求&#xff1a;投注号码由6个红色号码和1个蓝色球号码组成。红色球号码从1-33中选择&#xff0c;蓝色球号码从1-16当中选择 * 红 蓝 * 一等奖 6 1 * 二等奖 6 0 * 三等奖 5 1 * 四等奖 5 0 * 4 1 * 五等奖 4 0 * …

Blazor简单教程(1.1):Razor基础语法

文章目录 前言基本文件配置引入Layout组件 语法介绍pagecodeRazor 语法[ 显式表达和隐式表达](https://learn.microsoft.com/zh-cn/aspnet/core/mvc/views/razor?viewaspnetcore-7.0#explicit-razor-expressions) 绑定简单绑定双向绑定带参数的函数绑定 依赖注入 前言 Blazor…

QT:UI控件(按设计师界面导航界面排序)

基础部分 创建新项目&#xff1a;QWidget&#xff0c;QMainWindow&#xff0c;QDialog QMainWindow继承自QWidget&#xff0c;多了菜单栏; QDialog继承自QWidget&#xff0c;多了对话框 QMainWindow 菜单栏和工具栏&#xff1a; Bar: 菜单栏&#xff1a;QMenuBar&#xff0…

A Survey for In-context Learning

A Survey for In-context Learning 摘要&#xff1a; 随着大语言模型(LLMs)能力的增长&#xff0c;上下文学习(ICL)已经成为一个NLP新的范式&#xff0c;因为LLMs仅基于几个训练样本让内容本身增强。现在已经成为一个新的趋势去探索ICL来评价和extrapolate LLMs的能力。在这篇…

微服务06-分布式事务解决方案Seata

1、Seata 概述 Seata事务管理中有三个重要的角色: TC (Transaction Coordinator) - **事务协调者:**维护全局和分支事务的状态,协调全局事务提交或回滚。 TM (Transaction Manager) - **事务管理器:**定义全局事务的范围、开始全局事务、提交或回滚全局事务。 RM (Resourc…

Java地图专题课 基本API BMapGLLib 地图找房案例 MongoDB

本课程基于百度地图技术&#xff0c;由基础入门开始到应用实战&#xff0c;适合零基础入门学习。将企业项目中地图相关常见应用场景的落地实战&#xff0c;包括有地图找房、轻骑小程序、金运物流等。同时讲了基于Netty实现高性能的web服务&#xff0c;来处理高并发的问题。还讲…

JVM垃圾回收篇-垃圾回收算法

JVM垃圾回收篇-垃圾回收算法 标记清除&#xff08;Mark Sweep&#xff09; 概念 collector指的就是垃圾收集器。 mutator是指除了垃圾收集器之外的部分&#xff0c;比如说我们的应用程序本身。 mutator的职责一般是NEW(分配内存)、READ(从内存中读取内容)、WRITE(将内容写入内…

vscode搭建c语言环境问题

c语言环境搭建参考文章:【C语言初级阶段学习1】使用vscode运行C语言&#xff0c;vscode配置环境超详细过程&#xff08;包括安装vscode和MinGW-W64安装及后续配置使用的详细过程&#xff0c;vscode用户代码片段的使用&#xff09;[考研专用]_QAQshift的博客-CSDN博客 问题如下:…

[C++ 网络协议] 套接字和地址族、数据序列

目录 1. 套接字 1.1 在Linux平台下构建套接字 1.1.1 用于接听的套接字(服务器端套接字) 1.1.2 用于发送请求的套接字(客户端套接字) 1.2 在Windows平台下构建套接字 1.2.1 Winsock的初始化 1.2.2 用于接听的套接字(服务器端套接字) 1.2.3 用于发送请求的套接字(客户端套…

pytest框架快速进阶篇-pytest前置和pytest后置,skipif跳过用例

一、Pytest的前置和后置方法 1.Pytest可以集成unittest实现前置和后置 importunittestimportpytestclassTestCase(unittest.TestCase):defsetUp(self)->None:print(unittest每个用例前置)deftearDown(self)->None:print(unittest每个用例后置)classmethoddefsetUpClass…

jmeter中用户参数和用户定义的变量的区别

如果使用jmeter做过参数化的人都知道&#xff0c;参数化的方式有多种&#xff0c;其中一种就是使用用户定义的变量&#xff0c;还有一种是使用用户参数。那么&#xff0c;这两个有什么异同呢&#xff1f; 一、先说相同的点&#xff1a; 1、都可以参数化&#xff0c;以供sample…

allure测试报告

使用pytest结合Allure进行测试报告生成的简单教程 allure测试报告 Allure基于Java开发&#xff0c;因此我们需要提前安装Java 8或以上版本的环境。 ◆安装allure-pytest插件在DOS窗口输入命令“pip3 install allure-pytest”&#xff0c;然后按“Enter”键。 下载安装Allure…

使用 Docker 部署 canal 服务实现MySQL和ES实时同步

文章目录 0. 环境介绍0. 前置步骤1. 安装Kibana和Elasticsearch2. 安装Canal和Canal Adapter2.1 修改数据库配置2.1.1 修改配置2.1.2 验证mysql binlog配置2.1.3 查看日志文件2.1.4 用JDBC代码插入数据库 2.2 安装Canal Server2.3 安装Canal Adapter修改两处配置文件配置文件取…

初识mysql数据库之引入mysql客户端库

目录 一、下载第三方库 1. 准备工作 1. 使用mysql官网提供的库 2. yum源安装 二、测试第三方库是否可用 三、mysql常用接口介绍 1. 查看官方文档 2. 初始化 3. 关闭mysql 4. 连接mysql 5. 下达sql指令 四、一个简单的C客户端库连接mysql程序 1. 头文件 2. 初始化…

Could not resolve host: mirrorlist.centos.org; Unknown error解决方法

今天服务器安装完CentOS系统后&#xff0c;安装网络的时候&#xff0c;出现无法联网yum yum -y install net-tools 以上代码无法运行并报错&#xff0c;这里我要提醒大家&#xff0c;如果在初始安装的时候选中安装网络工具模块就不用在安装net-tools了&#xff0c;因为我选中…

vite跨域配置踩坑,postman链接后端接口正常,但是前端就是不能正常访问

问题一&#xff1a;怎么都链接不了后端地址 根据以下配置&#xff0c;发现怎么都链接不了后端地址&#xff0c;proxy对了呀。 仔细看&#xff0c;才发现host有问题 // 本地运行配置&#xff0c;及反向代理配置server: {host: 0,0,0,0,port: 80,// cors: true, // 默认启用并允…