动态网站开发讲课笔记02:Java Web概述
文章目录
- 零、本讲学习目标
- 一、 XML基础
- (一)XML概述
- 1、XML
- 2、XML与HTML的比较
- (二)XML语法
- 1、XML文档的声明
- 2、XML元素的定义
- 3、XML属性的定义
- 4、XML注释的定义
- 5、XML文件示例
- (三)DTD约束
- 1、什么是XML约束
- 2、什么是DTD约束
- 3、DTD约束文档的解释
- 4、DTD的引入
- (1)引入本地DTD文件
- (2)引入公共的DTD文件
- (3)采用内嵌方式实现DTD对XML的约束
- 5、DTD约束的语法
- (1)元素定义
- (2)元素内容
- (3)元素内容包含的符号
- (4)属性定义
- (5)属性设置说明
- (6)属性类型
- (四)Schema约束
- 1、什么是Schema约束
- 2、Schema约束的优点
- 3、Schema约束的文档
- 4、名称空间
- 5、声明名称空间的格式
- 6、引入Schema文档
- 7、Schema语法
- (1)元素定义
- (2)属性定义
- (3)简单类型
- (4)复杂类型
- 二、程序开发体系架构
- (一)C/S体系架构
- (二)B/S体系架构
- 三、Tomcat服务器
零、本讲学习目标
- 了解XML的概念
- 掌握XML语法
- 掌握DTD约束
- 掌握Schema约束
- 了解C/S体系架构与B/S体系架构
- 熟悉Tomcat的安装与启动
- 掌握在IntelliJ IDEA中配置Tomcat服务器的方法
Java Web是使用Java技术解决相关Web互联网领域的技术栈,开发一个完整的Java Web项目涉及到静态Web资源、动态Web资源的编写以及项目的部署。在Java Web中,静态Web资源开发技术包括HTML、CSS、JavaScript、XML等;动态Web资源开发技术包括JSP/Servlet等。本节将针对Java Web开发所用到的XML技术以及项目部署服务器Tomcat进行详细地讲解。
一、 XML基础
(一)XML概述
- 目标:了解XML的概念,能够知道HTML用于做什么
1、XML
- XML是EXtensible Markup Language的缩写,它是一种类似于HTML的标记语言,称为可扩展标记语言。XML用于提供数据描述格式,适用于不同应用程序之间的数据交换,而且这种交换不以预先定义的一组数据结构为前提,增强了可扩展性。
- 在现实生活中,很多事物之间都存在着一定的层次关系,例如中国有很多省份,每个省份下又有很多城市,这些中国与所辖省、市之间的层次关系可以通过一张树状结构图描述。
- 在XML文档中,通过元素的嵌套关系可以很准确地描述具有树状层次结构的复杂信息,因此,越来越多的应用程序都采用XML格式存放相关的配置信息,以便于读取和修改配置信息。
2、XML与HTML的比较
(1)HTML用于显示数据,XML用于传输和存储数据。
(2)HTML标签不区分大小写,而XML标记严格区分大小写。
(3)HTML可以有多个根元素,而格式良好的XML有且只能有一个根元素。
(4)在HTML中,空格是自动过滤的,而在XML中,空格不会自动过滤。
(5)HTML中的标签是预定义的标签,而XML中的标记可以根据需要自己定义,并且可扩展。
(二)XML语法
- 目标:掌握XML的语法,包括文档声明、元素声明、属性定义和注释
1、XML文档的声明
- 从XML 1.1开始,在一个完整的XML文档中,必须包含一个XML文档的声明,并且该声明必须位于文档的第一行。
- XML文档声明的语法格式:
<?xml version="version" encoding="value" standalone="value"?>
属性 | 说明 |
---|---|
version | 用于指定遵循XML规范的版本号。在XML声明中必须包含version属性,且该属性必须放在XML声明中其他属性之前。 |
encoding | 用来指定XML文档所使用的编码集。 |
standalone | 用来指定该XML文档是否和一个外部文档嵌套使用,取值为yes或no。如果设置属性值为yes,说明是一个独立的XML文档,与外部文件无关联;如果设置属性值为no,说明XML文档不独立。 |
2、XML元素的定义
- XML文档中的主体内容都是由元素(Element)组成的,元素是以树形分层结构排列的,一个元素可以嵌套在另一个元素中。XML文档中有且仅有一个顶层元素,称为文档元素或根元素。元素一般是由开始标签、属性、元素内容和结束标签构成。
<售价 单位="元">100</售价>
3、XML属性的定义
- 在XML文档中,可以为元素定义属性。属性是对元素的进一步描述和说明。在一个元素中,可以自定义多个属性,属性是依附于元素存在的,并且每个属性都有自己的名称和取值。
<售价 单位="元">100</售价>
- 需要注意的是,在XML文档中,属性的命名规范与元素相同,属性值必须要用双引号(“”)或者单引号(‘’)引起来,否则被视为错误。
4、XML注释的定义
- 注释是为了便于阅读和理解,如果想在XML文档中插入一些附加信息,比如作者姓名、地址或电话等,这些信息是对文档结构或文档内容的解释,不属于XML文档的内容,因此XML解析器不会处理注释内容。XML文档的注释以字符串“
<!--
”开始,以字符串“-->
”结束。
<!--注释信息-->
5、XML文件示例
- 早餐菜单
<?xml version="1.0" encoding="UTF-8"?>
<breakfast><food><name>Belgian Waffles</name><price>$5.95</price><description>two of our famous Belgian Waffles with plenty of real maple syrup</description><calories>800</calories></food><food><name>Strawberry Belgian Waffles</name><price>$4.50</price><description>light Belgian waffles covered with strawberries and whipped cream</description><calories>300</calories></food><food><name>Berry-Berry Belgian Waffles</name><price>$8.95</price><description>light Belgian waffles covered with an assortment of fresh berries and whipped cream</description><calories>900</calories></food><food><name>French Toast</name><price>$4.50</price><description>thick slices made from our homemade sourdough bread</description><calories>550</calories></food><food><name>Homestyle Breakfast</name><price>$6.95</price><description>two eggs, bacon or sausage, toast, and our ever-popular hash browns</description><calories>950</calories></food>
</breakfast>
- Spring项目的
pom.xml
配置文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>net.huawei.spring</groupId><artifactId>SpringDemo</artifactId><version>1.0-SNAPSHOT</version><dependencies><!--Spring核心--><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>5.3.25</version></dependency> <!--单元测试--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>test</scope></dependency></dependencies>
</project>
(三)DTD约束
- 目标:掌握DTD约束的引入和DTD约束的语法
1、什么是XML约束
- XML文档中的标签是可以随意定义的,同一本书出现了两种售价,如果仅根据标签名称区分哪个是原价,哪个是会员价,这是很难实现的。为此,在XML文档中,定义了一套规则对文档中的内容进行约束,这套规则称为XML约束。对XML文档进行约束时,同样需要遵守一定的语法规则,这种语法规则就形成了XML约束语言。
2、什么是DTD约束
- DTD约束是早期出现的一种XML约束模式语言,根据它的语法创建的文件称为DTD文件。在一个DTD文件中,可以包含元素的定义、元素之间关系的定义、元素属性的定义以及实体和符号的定义。
- 通过一个案例简单认识一下DTD约束,创建
book.xml
文件
<?xml version="1.1" encoding="UTF-8"?>
<书架><书><书名>徒然草</书名><作者>吉田兼好</作者><售价>34.00元</售价></书><书><书名>精通Spring框架</书名><作者>魏赫布</作者><售价>49.00元</售价></书>
</书架>
- 创建
book.dtd
文件
<!ELEMENT 书架 (书+)>
<!ELEMENT 书 (书名,作者,售价)>
<!ELEMENT 书名 (#PCDATA)>
<!ELEMENT 作者 (#PCDATA)>
<!ELEMENT 售价 (#PCDATA)>
book.dtd
是一个简单的DTD约束文档。每个元素都是按照book.dtd
文档所规定的约束进行编写的。
3、DTD约束文档的解释
(1)<!ELEMENT …>语句定义了一个元素,其中“书架”是元素的名称,“(书+)”表示书架元素中有一个或者多个名称为“书”的元素,其中字符“+”表示它所修饰的元素必须出现一次或者多次。
(2)“书”是元素名称,“(书名,作者,售价)”表示元素书包含书名、作者、售价这三个子元素,并且这些子元素要按照顺序依次出现。
(3)“书名”、“作者”和“售价”都是元素名称,“(#PCDATA)”表示元素中嵌套的内容是普通的文本字符串。
4、DTD的引入
- 在XML文档中引入外部DTD文件有两种方式
第1种方式: <!DOCTYPE 根元素名称 SYSTEM "外部DTD文件的URI">
第2种方式: <!DOCTYPE 根元素名称 PUBLIC "DTD名称" "外部DTD文件的URI">
- 第1种方式用来引用本地的DTD文件;第2种方式用来引用公共的DTD文件,其中“外部DTD文件的URI”指的是DTD文件在本地存放的位置,对于第1种方式,它可以是XML文档的相对路径,也可以是一个绝对路径,对于第2种方式,它是Internet上的一个绝对URL地址。
(1)引入本地DTD文件
- 对文件
book.xml
进行修改,在XML文档中引入本地的DTD文件book.dtd
<?xml version="1.1" encoding="UTF-8"?>
<!DOCTYPE 书架 SYSTEM "book.dtd">
<书架><书><书名>徒然草</书名><作者>吉田兼好</作者><售价>34.00元</售价></书><书><书名>精通Spring框架</书名><作者>魏赫布</作者><售价>49.00元</售价></书>
</书架>
(2)引入公共的DTD文件
- 引入一个公共的DTD文件,则需要在DOCTYPE声明语句中使用PUBLIC属性
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN""http://java.sun.com/dtd/web-app_2_3.dtd">
- 其中"
-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN
"是DTD名称,它用于说明DTD符合的标准、所有者的名称以及对DTD描述的文件进行说明,虽然DTD名称看上去比较复杂,但这完全是由DTD文件发布者去考虑的事情,XML文件的编写者只要把DTD文件发布者事先定义好的DTD标识名称进行复制就可以了。
(3)采用内嵌方式实现DTD对XML的约束
- DTD对XML文档的约束,除了通过外部引入方式实现外,还可以采用内嵌的方式。
- 在XML中直接嵌入DTD定义语句的完整语法格式
<?xml version="1.1" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE 根元素名 [DTD定义语句……
]>
- 对
book.xml
进行修改,在book.xml
文档中直接嵌入book.dtd
文件
<?xml version="1.1" encoding="UTF-8"?>
<!DOCTYPE 书架 [<!ELEMENT 书架 (书+)><!ELEMENT 书 (书名,作者,售价)><!ELEMENT 书名 (#PCDATA)><!ELEMENT 作者 (#PCDATA)><!ELEMENT 售价 (#PCDATA)>
]>
<书架><书><书名>徒然草</书名><作者>吉田兼好</作者><售价>34.00元</售价></书><书><书名>精通Spring框架</书名><作者>魏赫布</作者><售价>49.00元</售价></书>
</书架>
5、DTD约束的语法
- 在编写XML文档时,需要掌握XML语法。同理,在编写DTD文档时,也需要遵循DTD的语法。DTD的结构一般由元素类型定义、属性定义、实体定义、记号定义等构成,一个典型的DTD文档类型定义会把将来要创建的XML文档的元素结构、属性类型、实体引用等预先进行定义。
(1)元素定义
- 元素是XML文档的基本组成部分,在DTD定义中,每一条
<!ELEMENT…>
语句用于定义一个元素 - 基本语法格式:
<!ELEMENT 元素名称 元素内容>
- 在上面元素的定义语法格式中,包含了“元素名称”和“元素内容”。其中,“元素名称”是被约束的XML文档中的元素,“元素内容”是对元素包含内容的声明,其内容包括数据类型和符号两部分。
(2)元素内容
元素 | 说明 |
---|---|
#PCDATA | 表示元素中嵌套的内容是普通文本字符串,其中关键字PCDATA是Parsed Character Data的简写。 |
子元素 | 说明元素包含其他元素。通常用一对小括号()将元素中要嵌套的一组子元素括起来。 |
混合内容 | 表示元素既可以包含字符数据,也可以包含子元素。混合内容必须被定义零个或多个。 |
EMPTY | 表示该元素既不包含字符数据,也不包含子元素,是一个空元素。如果在文档中元素本身已经表明了明确的含义,就可以在DTD中用关键字EMPTY表明空元素。 |
ANY | 表示该元素可以包含任何字符数据和子元素。 |
(3)元素内容包含的符号
- 在定义元素时,元素内容可以包含一些符号,不同的符号具有不同的作用
符号 | 作用 |
---|---|
问号[?] | 表示该对象可以出现0次或1次 |
星号[*] | 表示该对象可以出现0次或多次 |
加号[+] | 表示该对象可以出现1次或多次 |
竖线[|] | 表示列出的对象中选择1个 |
逗号[,] | 表示对象必须按照指定的顺序出现 |
括号[()] | 用于给元素进行分组 |
(4)属性定义
- 在DTD文档中,定义元素的同时,还可以为元素定义属性。
- DTD属性定义的基本语法格式
<!ATTLIST 元素名属性名1 属性类型 设置说明属性名2 属性类型 设置说明......
>
- 在上面属性定义的语法格式中,“元素名”是属性所属元素的名字,“属性名”是属性的名称,“属性类型”则是用来指定该属性是属于哪种类型,“设置说明”用来说明该属性是否必须出现。
(5)属性设置说明
设置说明 | 含义 |
---|---|
#REQUIRED | 表示元素的该属性是必须的,例如,当定义联系人信息的DTD时,我们希望每一个联系人都有一个联系电话属性,这时,可以在属性声明时,使用REQUIRED |
#IMPLIED | 表示元素可以包含该属性,也可以不包含该属性。例如,当定义一本书的信息时,发现书的页数属性对读者无关紧要,这时,在属性声明时,可以使用IMPLIED |
#FIXED | 表示一个固定的属性默认值,在XML文档中不能将该属性设置为其他值。使用#FIXED关键字时,还需要为该属性提供一个默认值。当XML文档中没有定义该属性时,其值将被自动设置为DTD中定义的默认值 |
默认值 | 和FIXED一样,如果元素不包含该属性,该属性将被自动设置为DTD中定义的默认值。不同的是,该属性的值是可以改变的,如果XML文件中设置了该属性,新的属性值会覆盖DTD中定义的默认值 |
(6)属性类型
CDATA
是最常用的一种属性类型,表明属性类型是字符数据,与元素内容说明中的#PCDATA相同。当然,在属性设置值中出现的特殊字符,也需要使用其转义字符序列表示,例如,用“&
”表示字符“&
”,用“<
”表示字符“<
”等。Enumerated
(枚举类型),在声明属性时,可以限制属性的取值只能从一个列表中选择,这类属性属于Enumerated(枚举类型)- 一个
ID
类型的属性用于唯一标识XML文档中的某个元素。ID类型的属性值必须遵守XML名称定义的规则。一个元素只能有一个ID
类型的属性,而且ID
类型的属性必须设置为#IMPLIED
或#REQUIRED
。因为ID类型属性的每一个取值都是用来标识一个特定的元素,所以为ID
类型的属性提供默认值,特别是固定的默认值是毫无意义的。 - 除了讲述的几种属性类型外,DTD约束中还有
IDREF
、IDREFS
、NMTOKEN
、NMTOKENS
、NOTATION
、ENTITY
和ENTITYS
几种属性类型,由于篇幅有限,此处就不一一列举。
(四)Schema约束
- 目标:掌握Schema约束的名称空间,如何引入Schema文档,以及Schema语法
1、什么是Schema约束
- 同DTD一样,XML Schema也是一种用于定义和描述XML文档结构与内容的模式语言,它的出现克服了DTD 的局限性。
2、Schema约束的优点
(1)DTD采用的是非XML语法格式,缺乏对文档结构、元素、数据类型等全面的描述。XML Schema采用的是XML语法格式,而且它本身也是一种XML文档,因此,XML Schema语法格式比DTD更好理解。
(2)XML有非常高的合法性要求,XML DTD对XML的描述,往往也被用作验证XML合法性的一个基础,但是XML DTD本身的合法性却缺少较好的验证机制,必需独立处理。XML Schema则不同,它与XML有着同样的合法性验证机制。
(3)XML Schema对名称空间支持得非常好,而DTD几乎不支持名称空间。
(4)DTD支持的数据类型非常有限。
(5)DTD定义约束的能力非常有限,无法对XML实例文档作出更细致的语义限制。
3、Schema约束的文档
- XML Schema的功能比DTD强大很多,但相应的语法也比DTD复杂很多。
- 看一个简单的Schema文档
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"><xs:element name="root" type="xs:string"/>
</xs:schema>
- Schema文档,以
xsd
作为后缀名,以xs:schema
作为根元素,表示模式定义的开始。
4、名称空间
- 一个XML文档可以引入多个约束文档,但是,由于约束文档中的元素或属性都是自定义的,所以在XML文档中,极有可能出现代表不同含义的同名元素或属性,导致名称发生冲突。为此,在XML文档中,提供了名称空间,它可以唯一标识一个元素或者属性。这就好比打车去小营,由于北京有两个地方叫小营,为了避免司机走错,我们就会说“去亚运村的小营”或者“去清河的小营”。这时的亚运村或者清河就相当于一个名称空间。
5、声明名称空间的格式
- 名称空间的声明就是在XML文档中为某个模式文档的名称空间指定一个临时名称,它通过一系列的保留属性来声明,这种属性的名字必须是以“
xmlns
”或者以“xmlns:
”作为前缀。它与其他任何XML属性一样,都可以通过直接或者使用默认的方式给出。 - 名称空间声明的语法格式:
<元素名 xmlns:prefixname="URI">
- 注意:元素名指的是在哪一个元素上声明名称空间,在这个元素上声明的名称空间适用于声明它的元素和属性,以及该元素中嵌套的所有元素及其属性。
xmlns:prefixname
指的是该元素的属性名,它所对应的值是一个URI引用,用来标识该名称空间的名称。需要注意的是,如果有两个URI并且其组成的字符完全相同,就可以认为它们标识的是同一个名称空间。 - 创建
book2.xml
,在book2.xml
文档中学习名称空间的使用。
<?xml version="1.1" encoding="UTF-8"?>
<lzy:书架 xmlns:lzy="http://www.lzy.org/xmlbook/schema"><lzy:书><lzy:书名>徒然草</lzy:书名><lzy:作者>吉田兼好</lzy:作者><lzy:售价>34.00元</lzy:售价></lzy:书><lzy:书><lzy:书名>精通Spring框架</lzy:书名><lzy:作者>魏赫布</lzy:作者><lzy:售价>49.00元</lzy:售价></lzy:书>
</lzy:书架>
- 注意:在声明名称空间时,有两个前缀是不允许使用的,它们是
xml
和xmlns
。xml
前缀被定义为与名称空间名字http://www.w3.org/XML/1998/namespace
绑定,只能用于XML 1.0规范中定义的xml:space
和xml:lang
属性。前缀xmlns
仅用于声明名称空间的绑定,它被定义为与名称空间名字http://www.w3.org/2000/xmlns
绑定。
6、引入Schema文档
引入方式 | 说明 |
---|---|
使用名称空间引入XML Schema文档 | 在使用名称空间引入XML Schema文档时,需要通过属性xsi:schemaLocation来声明名称空间的文档,xsi:schemaLocation属性是在标准名称空间“http://www.w3.org/2001/XMLSchema-instance”中定义的,在该属性中,包含了两个URI,这两个URI之间用空白符分隔。其中,第一个URI是名称空间的名称,第二个URI是文档的位置。 |
通过xsi:noNamespaceSchemaLocation属性直接指定 | 通过xsi:noNamespaceSchemaLocation属性直接指定,noNamespaceSchemaLocation属性也是在标准名称空间“http://www.w3.org/2001/XMLSchema-instance”中定义的,它用于定义指定文档的位置。 |
7、Schema语法
(1)元素定义
- Schema和DTD一样,都可以定义XML文档中的元素。
- 在Schema文档中,元素定义的语法格式:
<xs:element name="名称" type="类型"/>
element
用于声明一个元素,名称指的是元素的名称,类型指元素的数据类型。- 在XML Schema 中有很多内建的数据类型,最常用的类型如下表
类型 | 说明 |
---|---|
xs:string | 表示字符串类型 |
xs:decimal | 表示小数类型 |
xs:integer | 表示整数类型 |
xs:boolean | 表示布尔类型 |
xs:date | 表示日期类型 |
xs:time | 表示时间类型 |
- 使用元素的定义的XML示例代码
<lastname>Smith</lastname>
<age>28</age>
<dateborn>1980-03-27</dateborn>
- 这三个元素对应的Schema定义如下所示
<xs:element name="lastname" type="xs:string"/>
<xs:element name="age" type="xs:integer"/>
<xs:element name="dateborn" type="xs:date"/>
(2)属性定义
- 在Schema文档中,属性定义的语法格式:
<xs:attribute name="xxx" type="yyy"/>
xxx
指的是属性名称
,yyy
指的是属性的数据类型
。其中,属性的常用数据类型与元素相同,都使用的是XML Schema中内创建的数据类型。
(3)简单类型
- 在XML Schema文档中,只包含字符数据的元素都是简单类型的。简单类型使用
xs:simpleType
元素来定义。如果想对现有元素内容的类型进行限制,则需要使用xs:restriction
元素。接下来通过以下几种情况详细介绍如何对简单类型元素的内容进行限定。 - xs:minInclusive和xs:maxInclusive元素对值的限定
例如,当我们定义一个雇员的年龄时,雇员的年龄要求是18~58周岁之间,这时,需要对年龄“age”这个元素进行限定,具体示例代码如下所示:
<xs:element name="age"><xs:simpleType><xs:restriction base="xs:integer"><xs:minInclusive value="18"/><xs:maxInclusive value="58"/></xs:restriction></xs:simpleType>
</xs:element>
- xs:enumeration元素对一组值的限定
如果希望将 XML 元素的内容限制为一组可接受的值,可以使用枚举约束(enumeration constraint),例如,要限定一个元素名为Car的元素,可接受的值只有:Audi、Golf、BMW,具体示例如下:
<xs:element name="car"><xs:simpleType><xs:restriction base="xs:string"><xs:enumeration value="Audi"/><xs:enumeration value="Golf"/><xs:enumeration value="BMW"/></xs:restriction></xs:simpleType>
</xs:element>
- xs:pattern元素对一系列值的限定
如果希望把 XML 元素的内容限制定义为一系列可使用的数字或字母,可以使用模式约束(pattern constraint)。例如,要定义一个带有限定的元素“letter”,要求可接受的值只能是字母a-z其中一个,具体示例如下:
<xs:element name="letter"><xs:simpleType><xs:restriction base="xs:string"><xs:pattern value="[a-z]"/></xs:restriction></xs:simpleType>
</xs:element>
- xs:restriction元素对空白字符的限定
在XML文档中,空白字符比较特殊,如果需要对空白字符(whitespace characters)进行处理,可以使用whiteSpace元素。whiteSpace元素有三个属性值可以设定,分别是preserve、replace和collapse。其中,preserve表示不对元素中的任何空白字符进行处理,replace表示移除所有的空白字符,collapse表示将所有的空白字符缩减为一个单一字符。接下来以preserve为例,学习如何对空白字符进行限定,具体示例如下:
<xs:element name="address"><xs:simpleType><xs:restriction base="xs:string"><xs:whiteSpace value="preserve"/></xs:restriction></xs:simpleType>
</xs:element>
(4)复杂类型
- 在定义复杂类型时,需要使用xs:complexContent元素来定义。复杂类型的元素可以包含子元素和属性,这样的元素称为复合元素。在定义复合元素时,如果元素的开始标签和结束标签之间只包含字符数据内容,那么这样的内容是简易内容,需要使用xs:simpleContent元素来定义。反之,元素的内容都是复杂内容,需要使用xs:complexContent元素来定义。复合元素有4种基本类型,接下来针对这4种基本类型分别进行讲解。
- 空元素
这里的空元素指不包含内容,只包含属性的元素,具体示例如下:
<product prodid="2023001" />
- 在上面的元素定义中,没有定义元素“product”的内容,这时,空元素在XML Schema文档中对应的定义方式如下所示:
<xs:element name="product"><xs:complexType><xs:attribute name="prodid" type="xs:positiveInteger"/></xs:complexType>
</xs:element>
- 包含其他元素的元素
对于XML文档中包含其他元素的元素,例如下面的示例代码:
<person><firstname>John</firstname><lastname>Smith</lastname>
</person>
- 元素person嵌套了两个元素,分别是“firstname”和“lastname”。这时,在Schema文档中对应的定义方式如下所示:
<xs:element name="person"><xs:complexType><xs:sequence><xs:element name="firstname" type="xs:string"/><xs:element name="lastname" type="xs:string"/></xs:sequence></xs:complexType>
</xs:element>
- 仅包含文本的元素
对于仅含文本的复合元素,需要使用“simpleContent”元素添加内容。在使用简易内容时,必须在“simpleContent”元素内定义扩展或限定,这时,需要使用“extension”或“restriction”元素来扩展或限制元素的基本简易类型。请看一个XML的简易例子,其中,“shoesize”仅包含文本,具体示例如下:
<shoesize country="france">35</shoesize>
- 元素“shoesize”包含了属性以及元素内容,针对这种仅包含文本的元素,需要使用extension来对元素的类型进行扩展,在Schema文档中对应的定义方式如下所示:
<xs:element name="shoesize"><xs:complexType><xs:simpleContent><xs:extension base="xs:integer"><xs:attribute name="country" type="xs:string" /></xs:extension></xs:simpleContent></xs:complexType>
</xs:element>
- 包含元素和文本的元素
在XML文档中,某些元素经常需要包含文本以及其他元素,例如,下面的这段XML文档:
<letter>Dear Mr.<name>John Smith</name>.Your order <orderid>1032</orderid>will be shipped on <shipdate>2001-07-13</shipdate>.
</letter>
- 在Schema文档中对应的定义方式如下所示:
<xs:element name="letter"><xs:complexType mixed="true"><xs:sequence><xs:element name="name" type="xs:string"/><xs:element name="orderid" type="xs:positiveInteger"/><xs:element name="shipdate" type="xs:date"/></xs:sequence></xs:complexType>
</xs:element>
- 注意:为了使字符数据可以出现在“letter”元素的子元素之间,使用了mixed属性,该属性用来规定是否允许字符数据出现在复杂类型的子元素之间,默认情况下mixed的值为false。
二、程序开发体系架构
- 目标:了解C/S体系架构和B/S体系架构
(一)C/S体系架构
- C/S是Client/Server的缩写,即客户端/服务器架构。在开发的过程中,客户端需要安装相应的软件才能连接服务器,并且客户端软件承担所有的逻辑和运算,服务器只提供数据交互的一种体系架构。
- C/S架构的局限性
(二)B/S体系架构
- B/S是Browser/Server的缩写,即浏览器/服务器架构。在开发过程中,客户端只需要一个浏览器,即可以实现与服务器交互,服务器承担所有的逻辑和计算,浏览器只负责将结果显示在屏幕上的一种体系架构。B/S架构最大的优点是客户机上无需安装专门的客户端程序,程序中的业务逻辑处理都集中到了Web服务器上,客户机只要安装一个浏览器就能通过Web服务器与数据库进行交互,并将交互的结果以网页的形式展现在浏览器中。
- 浏览器并不是直接与数据库服务器建立连接,而是通过Web服务器与数据库服务器需要建立连接。由此可见,B/S架构可以有效地解决数据库并发数量有限的问题。
- B/S架构的工作原理
三、Tomcat服务器
相关文章:

动态网站开发讲课笔记02:Java Web概述
文章目录零、本讲学习目标一、 XML基础(一)XML概述1、XML2、XML与HTML的比较(二)XML语法1、XML文档的声明2、XML元素的定义3、XML属性的定义4、XML注释的定义5、XML文件示例(三)DTD约束1、什么是XML约束2、…...

如何保护 IP 地址的隐私问题
是不是只有运营商才能查到某个人的住址信息呢?在大数据时代的今天,各种互联网应用收集了大量的数据信息,它们其实也可以根据这些信息,推断出某个人的大致地址位置。例如百度地图会一直用 App SDK 以及网页的方式记录 IP 和地址位置…...

高并发系统设计之限流
本文已收录至Github,推荐阅读 👉 Java随想录 文章目录限流算法计数器算法滑动窗口漏桶算法令牌桶算法限流算法实现Guava RateLimiter实现限流令牌预分配预热限流Nginx 限流limit_connlimit_req黑白名单限流这篇文章来讲讲限流,在高并发系统中…...

ZCMU--5286: Rose的字符串(C语言)
Description 一天Rose同学想得到一个仅由01组成的字符串S,Jack同学为了让Rose同学开心,于是打算去商店购买另一个也仅由01组成的字符串T。而商店的字符串价格由它的长度决定,比如字符串011售价3元,001011售价6元,商店…...

MAC下搭建hadoop
一:简介 Hadoop是一个用Java开发的开源框架,它允许使用简单的编程模型在跨计算机集群的分布式环境中存储和处理大数据。它的设计是从单个服务器扩展到数千个机器,每个都提供本地计算和存储。特别适合写一次,读多次的场景。 Hado…...

Python如何实现自动登录和下单的脚本,请看selenium的表演
前言 学python对selenium应该不陌生吧 Selenium 是最广泛使用的开源 Web UI(用户界面)自动化测试套件之一。Selenium 支持的语言包括C#,Java,Perl,PHP,Python 和 Ruby。目前,Selenium Web 驱动…...

华为OD机试真题Python实现【关联子串】真题+解题思路+代码(20222023)
关联子串 题目 给定两个字符串str1和str2 如果字符串str1中的字符,经过排列组合后的字符串中 只要有一个是str2的子串 则认为str1是str2的关联子串 若不是关联子串则返回-1 示例一: 输入: str1="abc",str2="efghicaibii" 输出: -1 预制条件: 输入的…...

Flutter+【三棵树】
定义 在Flutter中和Widgets一起协同工作的还有另外两个伙伴:Elements和RenderObjects;由于它们都是有着树形结构,所以经常会称它们为三棵树。 这三棵树分别是:Widget、Element、RenderObject Widget树:寄存烘托内容…...

若依系统【SpringBoot】如何集成qq邮件发送【超详细,建议收藏】
若依系统的部署博主就不在这儿阐述了,默认大家的电脑已经部署好了若依系统,这里直接开始集成邮件系统,首先我们得需要对qq邮箱进行配置;一套学不会你来打我😀; 一、开启我们的qq邮箱发送邮件的配置 1、先进…...

kettle使用--1.mysql多表关联导入mongoDB
文章目录1. 初步体验:csv 转为excelKettle概念配置mysql链接mysql 一对多关联查询结果保存到mongodb中1. 初步体验:csv 转为excel Windows环境下安装pdi-ce-8.0.0.0-28.zip ,解压后执行lib下的Spoon.bat 将csv输入拖入 双击拖进去的csv&…...

2023年CDGA考试-第10章-参考数据和主数据(含答案)
2023年CDGA考试-第10章-参考数据和主数据(含答案) 单选题 1.实现主数据中心环境的三种基本方法中不包括哪种? A.参考目录 B.注册表 C.交易中心 D.混合模式 答案 A 2.参考数据还具有很多区别于其他主数据 (例如,企业结构数据和交易结构数据)的特征。以下哪项目描述错误的…...

2023年,什么行业更有发展前景?
关于有前景有发展的行业推荐,小课今天还是推荐咱们IT互联网行业。 很多人会说现在懂电脑的那么多,这个行业都饱和了,很多学电脑的找不到工作都改行了。但事实是现在每个行各业都需要互联网,需要懂电脑的技术人才,尤其是在云计算、大数据到来…...

致盛咨询携手亚马逊云科技进一步开拓中国市场
作为医疗保健领域的咨询公司,ZS需要保证服务可靠性、敏捷性和安全性的同时,获得经济效益。亚马逊云科技丰富的云服务产品简化了ZS基础架构的搭建,为ZS节省了大量的人力与资金成本。同时,缩短了ZS扩展基础设施的周转时间࿰…...

ts之 命名空间 namespace、三斜线指令、声明文件(declare 声明ts的变量函数第三方模块等 )
目录ts之 命名空间 namespacets之 命名空间 namespacets之 三斜线指令 ( 引入其他.ts文件 )app.tsindex.tsts之 声明文件 d.ts - declare01:declare声明express第三方模块typings 为代码或者第三方模块 编写声明文件index.ts02:de…...

Day898.Join语句执行流程 -MySQL实战
Join语句执行流程 Hi,我是阿昌,今天学习记录的是关于Join语句执行流程的内容。 在实际生产中,关于 join 语句使用的问题,一般会集中在以下两类: 不让使用 join,使用 join 有什么问题呢?如果有…...

ChatGPT商业前景如何?人工智能未来会如何发展?
ChatGPT不仅在互联网和多个行业引发人们的关注,在投资界还掀起了机构对人工智能领域的投资热潮。人工智能聊天程序ChatGPT在去年11月亮相之后,在推出仅两个月后,今年1月份的月活用户已达到了1亿,成为史上增长最快的消费者应用程序…...

代码随想录第十六天(347、194、195、94)
347. 前 K 个高频元素 答案 思路: 1、首先,用到了每个值对应的出现次数,想到要用哈希map存放 2、还需要将出现频率从大到小进行排序,找出前k个元素 3、时间复杂度应该比O(nlogn)小 如果想用快速排序&…...

< elementUI组件样式及功能补全: 实现点击steps组件跳转对应步骤 >
文章目录👉 前言👉 一、效果演示👉 二、点击steps跳转效果实现👉 三、实现案例往期内容 💨👉 前言 在 Vue elementUi 开发中,elementUI中steps步骤条组件只提供了change方法,并未提…...

【学习笔记】互联网金融:芝麻信用分的建模过程
学习资料: 数据分析学习随记 | 互联网金融行业2C授信模型(芝麻信用) 1. 背景 互联网金融的本质是风控。 1.1 数据分析师的角色 数据分析师在金融行业基本上有两种角色: 1.1.1 数据建模师 偏算法,但要很懂业务。要求对算法的理解较深&am…...

Linux C/C++或者嵌入式开发到底有没有35岁危机?
一个读者问了一个问题: 我现在25岁,双非一本本科。在深圳上班,做嵌入式开发,打算走Linux C/C开发,工资目前一般。读了前辈写的很多博客之后,觉得很棒。我现在有一些疑问。 1.最近互联网裁员很厉害嘛&#x…...

国内领先的十大API接口排行
应用程序编程接口API即(Application Programming Interface),现在众多企业的应用系统中常用的开放接口,对接相应的系统、软件功能,简化专业化的程序开发。 一、百度API 百度API超市开通1136个数据服务接口。 网址&a…...

【Linux】Kickstart 配置U盘自动化安装Linux系统
文章目录前言一、刻录USB二、配置以BIOS方式启动引导2.1 引导文件配置2.2 KS文件配置三、以EFI方式启动引导3.1 引导文件3.2 KS文件四、 总结前言 之前安装系统,例如在VMware虚拟机中或物理服务器中,都是根据图形界面上的指示进行下一步这类的操作。 现…...

【Spring MVC】这一篇,带你从入门到进阶
目录 1、什么是MVC? 2、什么是 Spring MVC 3、如何学好 Spring MVC? 3.1、如何创建 Spring MVC 项目 3.1.1、使用Spring Initializr创建(推荐) 3.2、将 Spring 程序与用户(浏览器)联通 3.3、基础注解…...

InstallAware Multi-Platform updated
InstallAware Multi-Platform updated 原生ARM:为您的内置设置、IDE和整个工具链添加了Apple macOS和Linux ARM构建。 本地化:引擎内多语言感知,可再分发工具,具有资产隔离功能,使您的IP保持安全。 模板:将…...

Spring Batch 高级篇-多线程步骤
目录 引言 概念 案例 转视频版 引言 接着上篇:Spring Batch ItemWriter组件,了解Spring Batch ItemWriter处理组件后,接下来一起学习一下Spring Batch 高级功能-多线程步骤 概念 默认的情况下,步骤基本上在单线程中执行&…...

关于iframe一些通讯的记录(可适用工作流审批)
一.知识点(1).我们可以通过postMessage(发送方)和onmessage(接收方)这两个HTML5的方法, 来解决跨页面通信问题,或者通过iframe嵌套的不同页面之间的通信a.父页面代码如下<div v-if"src" class"iframe"><iframeref"iframe"id…...

JavaWeb
1、静态Web html、css 2、动态Web 提供给所有人看的数据始终会发生变化。技术栈:Servlet/JSP,ASP,PHP。 Web应用程序:可以提供浏览器访问的程序。 1、这个统一的web资源会被放在同一个文件夹下,web应用程序-->Tom…...

ip段192.168.1.0/24和192.168.0.0/16
192.168.1.0/24192.168.1.1 ~ 192.168.1.254前24位为网络前缀,后8位代表主机号。如下1100 0000,1010 1000,0000 0001,0000 0000192.168.0.0/16192.168.0.1 ~ 192.168.255.254前16位为网络前缀,后16位代表主机号。如下1…...

《爆肝整理》保姆级系列教程python接口自动化(二十二)--unittest执行顺序隐藏的坑(详解)
简介 大多数的初学者在使用 unittest 框架时候,不清楚用例的执行顺序到底是怎样的。对测试类里面的类和方法分不清楚,不知道什么时候执行,什么时候不执行。虽然或许通过代码实现了,也是稀里糊涂的一知半解,这样还好&am…...

【第二章 IOC操作bean管理(XML注入其他类型属性(字面量,外部bean,内部bean,级联赋值)、XML注入集合属性)】
第二章 IOC操作bean管理(XML注入其他类型属性(字面量,外部bean,内部bean,级联赋值)、XML注入集合属性) 1.IOC操作bean管理(XML注入其他类型属性) (1…...