XML
配置文件
配置文件的作用
配置文件是用于给应用程序提供配置参数以及初始化设置的一些有特殊格式的文件
常见的配置文件类型
- properties文件,例如druid连接池就是使用properties文件作为配置文件
- XML文件,例如Tomcat就是使用XML文件作为配置文件
- YAML文件,例如SpringBoot就是使用YAML作为配置文件
- json文件,通常用来做文件传输,也可以用来做前端或者移动端的配置文件
1. properties文件
文件示例
atguigu.jdbc.url=jdbc:mysql://192.168.198.100:3306/mybatis1026
atguigu.jdbc.driver=com.mysql.jdbc.Driver
atguigu.jdbc.username=root
atguigu.jdbc.password=atguigu
语法规范
- 由键值对组成
- 键和值之间的符号是等号
- 每一行都必须顶格写,前面不能有空格之类的其他符号
2. XML文件
文件示例
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!-- 配置SpringMVC前端控制器 -->
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 在初始化参数中指定SpringMVC配置文件位置 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mvc.xml</param-value>
</init-param>
<!-- 设置当前Servlet创建对象的时机是在Web应用启动时 -->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<!-- url-pattern配置斜杠表示匹配所有请求 -->
<!-- 两种可选的配置方式:
1、斜杠开头:/
2、包含星号:*.atguigu
不允许的配置方式:前面有斜杠,中间有星号
/*.app
-->
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
概念介绍
XML是eXtensible Markup Language的缩写,翻译过来就是可扩展标记语言。所以很明显,XML和HTML一样都是标记语言,也就是说它们的基本语法都是标签。
可扩展
可扩展三个字表面上的意思是XML允许自定义格式。但是别美,这不代表你可以随便写。
XML基本语法这个知识点的定位是:我们不需要从零开始,从头到尾的一行一行编写XML文档,而是在第三方应用程序、框架已提供的配置文件的基础上修改。要改成什么样取决于你的需求,而怎么改取决于XML基本语法和具体的XML约束。
XML的基本语法
- XML文档声明
这部分基本上就是固定格式,要注意的是文档声明一定要从第一行第一列开始写
<?xml version="1.0" encoding="UTF-8"?>
- 根标签
根标签有且只能有一个。
- 标签关闭
- 双标签:开始标签和结束标签必须成对出现。
- 单标签:单标签在标签内关闭。
- 标签嵌套
- 可以嵌套,但是不能交叉嵌套。
- 注释不能嵌套
- 标签名、属性名建议使用小写字母
- 属性
- 属性必须有值
- 属性值必须加引号,单双都行
看到这里大家一定会发现XML的基本语法和HTML的基本语法简直如出一辙。其实这不是偶然的,XML基本语法+HTML约束=HTML语法。在逻辑上HTML确实是XML的子集。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
从HTML4.01版本的文档类型声明中可以看出,这里使用的DTD类型的XML约束。也就是说http://www.w3.org/TR/html4/loose.dtd这个文件定义了HTML文档中可以写哪些标签,标签内可以写哪些属性,某个标签可以有什么样的子标签。
XML的约束
将来我们主要就是根据XML约束中的规定来编写XML配置文件,而且会在我们编写XML的时候根据约束来提示我们编写, 而XML约束主要包括DTD和Schema两种。
- DTD
将来在IDEA中有代码提示的协助,在DTD文档的约束下进行配置非常简单。
<!ENTITY % fontstyle
"TT | I | B | U | S | STRIKE | BIG | SMALL">
<!ENTITY % phrase "EM | STRONG | DFN | CODE |
SAMP | KBD | VAR | CITE | ABBR | ACRONYM" >
<!ENTITY % special
"A | IMG | APPLET | OBJECT | FONT | BASEFONT | BR | SCRIPT |
MAP | Q | SUB | SUP | SPAN | BDO | IFRAME">
<!ENTITY % formctrl "INPUT | SELECT | TEXTAREA | LABEL | BUTTON">
<!-- %inline; covers inline or "text-level" elements -->
<!ENTITY % inline "#PCDATA | %fontstyle; | %phrase; | %special; | %formctrl;">
<!ELEMENT (%fontstyle;|%phrase;) - - (%inline;)*>
<!ATTLIST (%fontstyle;|%phrase;)
%attrs; -- %coreattrs, %i18n, %events --
>
- Schema
我们将来使用SSM框架中的Spring、SpringMVC框架时,会涉及到一点点对Schema约束的设置。不过不必紧张,有IDEA的支持操作会非常简单,我们现在只需要理解基本概念即可。
首先我们要理解一个概念:『名称空间』,英文:name space
Schema约束要求我们一个XML文档中,所有标签,所有属性都必须在约束中有明确的定义。
下面我们以web.xml的约束声明为例来做个说明:
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
属性名 | 作用 |
---|---|
xmlns | 指出当前XML文档约束规则的名称空间在哪里 我们就是通过这个属性来引用一个具体的名称空间 |
xmlns:xsi | 指出xmlns这个属性是在哪个约束文档中被定义的 |
xsi:schemaLocation | 语法格式:在xsi名称空间下引用schemaLocation属性 配置含义:指定当前XML文档中所用到的约束文档本身的文件的地址 |
xmlns和xsi:schemaLocation对应关系如下图:
引入多个名称空间的例子如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">
<context:component-scan base-package="com.atguigu.crud.component"/>
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/pages/"/>
<property name="suffix" value=".jsp"/>
</bean>
<mvc:default-servlet-handler/>
<mvc:annotation-driven/>
</beans>
看到这么复杂,这么长的名称空间字符串,我们会觉得很担心,根本记不住。但是其实不需要记,在IDEA中编写配置文件时,IDEA会协助我们导入,会有提示。我们理解各个部分的含义能够调整即可。
2.3.5 XML解析(重点)
2.3.5.1 XML解析的作用
用Java代码读取xml中的数据
2.3.5.2 XML的两种解析方式
- DOM解析:将文档加载进内存,形成一颗dom树(document对象),将文档的各个组成部分封装为一些对象。
- 优点:因为在内存中会形成dom树,程序员可以以面向对象的方式操作XML文件,写代码就非常方便,可以对dom树进行增删改查。
- 缺点:dom树非常占内存,解析速度慢。所以一般解析体积较大的XML文件的时候不会采用DOM解析
- SAX解析:逐行读取,基于事件驱动,解析一行释放一行,内存占用非常小
建议:一般会采用DOM解析方式来解析XML,除非是解析体积很大的XML文件才会采用SAX解析
2.3.5.3 常见的XML解析器
在使用Java代码解析XML的时候,我们通常不会直接使用JDK内置的原生的DOM或者SAX解析XML,因为代码实在是太复杂了。一些公司和组织已经封装好了优秀的XML解析器,我们通常会使用第三方XML解析器来解析XML
-
JAXP: sun公司提供的解析。支持dom和sax。(不常用)
-
JDOM
-
DOM4J(常用)
2.3.5.4 DOM4J的使用步骤
- 导入jar包 dom4j.jar
- 创建解析器对象(SAXReader)
- 解析xml 获得Document对象
- 获取根节点RootElement
- 获取根节点下的子节点
2.3.5.5 DOM4J的API介绍
- 创建SAXReader对象
SAXReader saxReader = new SAXReader();
- 解析XML获取Document对象: 需要传入要解析的XML文件的字节输入流
Document document = reader.read(inputStream);
- 获取文档的根标签
Element rootElement = documen.getRootElement()
- 获取标签的子标签
//获取所有子标签
List<Element> sonElementList = rootElement.elements();
//获取指定标签名的子标签
List<Element> sonElementList = rootElement.elements("标签名");
- 获取标签体内的文本
String text = element.getText();
- 获取标签的某个属性的值
String value = element.AttributeValue("属性名");
xml实例
报警告是因为jdk版本过高,可以降低到1.8版本,其实没什么影响
2.3.5.6 XPATH的使用介绍
- XPATH的作用: 使用规则匹配直接查找xml文件中的指定节点
- XPATH的使用步骤:
- 引入dom4j和xpath的jar包
- 创建解析器对象
- 解析xml 获得document对象
- 使用document对象调用方法,根据路径规则查找节点
- XPATH的API:
- selectSingleNode(“路径规则”): 根据路径规则,查找满足条件的第一个节点
- selectNodes(“路径规则”): 根据路径规则,查找满足条件的所有节点
- XPATH的路径规则的编写: 见附件资料
2.4 YAML配置文件(暂时了解)
YAML配置文件会在我们以后学习的SpringBoot框架中使用
2.4.1 文件示例
spring:
profiles:
active: fc
datasource:
name: mydb
type: com.alibaba.druid.pool.DruidDataSource
url: jdbc:mysql://192.168.41.100:3306/spring_boot?serverTimezone=UTC
username: root
password: atguigu
driver-class-name: com.mysql.cj.jdbc.Driver
mybatis:
mapper-locations: classpath*:/mybatis-mapper/*Mapper.xml
logging:
level:
com.atguigu.function.compute.mapper: debug
2.5 Json配置文件
json配置文件一般使用在前端或者移动端
2.5.1 文件示例
{
"username":"value1",
"pw":"2value2",
"nickname":"value3"
}