第二节 XML、HTTP协议、Tomcat的复习
一、XML基础
-
XML基础
它是W3C组织推出一种数据交换标准,主要用于项目之间的数据交换。称为可扩展标记语言。
所谓可扩展,指的是用户可以按照XML规则(约束文档)自定义标记。 -
XML基础语法
2.1、文档声明<?xml 版本信息 [编码信息] [文档独立性信息]?> 例如:<?xml version=”1.0” encoding=”UTF-8” standalone=”yes” ?> 注意:文档声明必须放在第一行
2.2、元素定义
元素一般由开始标记、属性、元素内容和结束标记构成 例如:<城市>北京</城市>
2.3、属性定义
属性对元素进一步说明,一个元素可以有多个属性 例如:<售价 单位=”元”>68</售价>
2.4、注释
<!--注释信息-->
[常用DTD约束和Schema约束]
-
DTD约束(Document Type Definition 文档类型定义,用来约束xml文档)
3.1、元素定义格式:<!ELEMENT 元素名称 元素内容> 元素内容: (1)#PCDATA:表示元素中嵌套的内容是普通文本字符串 例如:<!ELEMENT 书名 (#PCDATA)> (2)子元素 :说明元素包含的子元素 例如 <!ELEMENT 书 (书名,作者,售价)> (3)混合内容 :表示元素既可以包含字符数据,也可以包含子元素 例如: <!ELEMENT 书 (#PCDATA|书名)*> 表示“书”所嵌套的内容可以是字符串,也可以是子元素“书名”。子元素包含0个或多个,并且“书名”是字符串文本格式。 (4)EMPTY :空元素 例如:<!ELEMENT br EMPTY> 表示br是没有内容的空元素 (5)ANY :表示该元素可以包含任意字符数据和子元素。尽量避免使用
3.2、属性定义
基本语法格式: <!ATTLIST 元素名 属性名1 属性类型 设置说明 属性名2 属性类型 设置说明 ... >
(1)设置说明:
#REQUIRED 表示元素的该属性是必须的。 #IMPLIED 表示元素可以包含该属性,也可以不包含该属性。 #FIXED 表示一个固定的属性默认值。 默认值 表示一个可以改变的属性默认值。
(2)属性类型:
CDATA 表示属性类型是字符数据
Enumerated(枚举类型):例如: <?xml version=”1.0” encoding=”UTF-8” standalone=”yes”?> <!DOCTYPE 购物篮 [ <!ELEMENT 购物篮 ANY> <!ELEMENT 肉 EMPTY> <!ATTLIST 肉 品种(鸡肉|牛肉|猪肉|鱼肉)“鸡肉”> ]> <购物篮> <肉 品种=“鱼肉”/> <肉 品种=“牛肉”/> <肉/> </购物篮>
属性类型为ID:用于唯一标识XML文档中的一个元素 其设置说明必须是#IMPLIED或#REQUIRED
例如: <?xml version=”1.0” encoding=”UTF-8” standalone=”yes”?> <!DOCTYPE 联系人列表 [ <!ELEMENT 联系人列表 ANY> <!ELEMENT 联系人 (姓名,EMAIL)> <!ELEMENT 姓名 (#PCDATA)> <!ELEMENT EMAIL (#PCDATE)> <!ATTLIST 联系人 编号 ID #REQUIRED> ]> <联系人列表> <联系人 编号=“id1”> <姓名>张三</姓名> <EMAIL>zhang@itcast.cn</EMAIL> </联系人> <联系人 编号=“id2”> <姓名>李四</姓名> <EMAIL>li@itcast.cn</EMAIL> </联系人> </联系人列表>
属性类型为IDREF和IDREFS:IDREF和IDREFS类型属性的值必须为一个已经存在的ID类型的属性值。
IDREF建立一对一的关系,例如: <?xml version=”1.0” encoding=”UTF-8” standalone=”yes”?> <!DOCTYPE 联系人列表 [ <!ELEMENT 联系人列表 ANY> <!ELEMENT 联系人 (姓名,EMAIL)> <!ELEMENT 姓名 (#PCDATA)> <!ELEMENT EMAIL (#PCDATE)> <!ATTLIST 联系人 编号 ID #REQUIRED 上司 IDREF #IMPLIED> ]> <联系人列表> <联系人 编号=“id1”> <姓名>张三</姓名> <EMAIL>zhang@itcast.cn</EMAIL> </联系人> <联系人 编号=“id2” 上司=“id1”> <姓名>李四</姓名> <EMAIL>li@itcast.cn</EMAIL> </联系人> </联系人列表>
IDREFS用于建立一对多的关系,如下例图书馆借书的情况:
<?xml version=”1.0” encoding=”UTF-8” > <!DOCTYPE library [ <!ELEMENT library (books, records)> <!ELEMENT books (book+)> <!ELEMENT book (title)> <!ELEMENT title (#PCDATA)> <!ELEMENT records (item+) <!ELEMENT item (data ,person)> <!ELEMENT data (#PCDATA)> <!ELEMENT person EMPTY> <!ATTLIST book bookid ID #REQUIRED> <!ATTLIST person name CDATA #REQUIRED> <!ATTLIST person borrowed IDREFS #REQUIRED> ]> <library> <books> <book bookid=”b0101”> <title>java 基础</title> </book> <book bookid=”bo102”> <title>java web</title> </book> </books> <records> <item> <data>2020-03-02</data> <person name=”张三” borrowed=”b0101 b0102”/> </item> </records> </library>
3.3、 DTD的引入
(1)内嵌式: 基本语法格式: <?xml version=”1.0” encoding=”UTF-8” standalone=”yes”?> <!DOCTYPE 根元素名 [ DTD定义语句 ... ]>
(2)引入外部DTD文件--格式: 1 <!DOCTYPE 根元素名称 SYSTEM “外部DTD文件的URL”> (注:引用本地的DTD文件 ,URL可以相对路径也可以是绝对路径) 2 <!DOCTYPE 根元素名称 PUBLIC “DTD名称” “外部DTD文件的URL”> (注:引用公共的DTD文件,URL是internet上的一个绝对URL地址。)
-
Schema约束
引用公共的DTD文件,URL是internet上的一个绝对URL地址。
Schema约束文档:book.xsd文件。1、文档声明 格式: <?xml version="1.0" encoding="UTF-8" ?>
2、模式定义: <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="/chapter05" elementFormDefault="qualified"> 释义: xs:schema:表明本文档是一个schema文档,要定义schema必须遵守一定的规则。 此规则在 "http://www.w3.org/2001/XMLSchema"名称空间(其实就是一个文件夹)定义,由xmlns:xs来指定。它是标准名称空间。 targetNamespace关键字:指明本schema文档的名称空间(就是要存放该文档的文件夹路径。) elementFormDefault=‘unqualified’时:表示子元素不必使用命名空间前缀, 所有被schema定义的element都应当属于目标命名空间, 这些子元素只是不直接位于目标命名空间, 而是从属于父顶级元素的目标命名空间, 这其实也就是说它们间接属于目标命名空间。 elementFormDefault=‘qualified’时:表示子元素必须使用命名空间前缀, 当然, 这些子元素是位于目标命名空间之下。 attributeFormDefault=‘unqualified’ 时表示目标命名空间下的这个属性不要带命名空间前缀. attributeFormDefault=‘qualified’ 时表示来自目标命名空间下的属性必须要用命名空间前缀修饰
3、schema语法 (1)元素定义 格式:<xs:element name=”元素名称” type=”数据类型”> xs:string 表示字符串类型 xs:decimal 表示小数类型 xs:integer 表示整数类型 xs:boolean 表示布尔类型 xs:date 表示日期类型 xs:time 表示时间类型 (2)属性定义 格式:<xs:attribute name=”属性名” type=”yyy”> (3)简单类型 1)xs:mininclusive和maxinclusive对值的限制 例如: <xs:element name=”age”> <xs:simpleType> <xs:restriction bas=”xs:integer”> <xs:mininclusive value=”18”/> <xs:maxinclusive value=”58”/> </xs:restriction> </xs:simpleType> </xs:element> (注:此段代码表明,元素age的属性是integer,年龄要求在18--58周岁之间。) 2)xs:enumeration元素对一组值的限定 例如,要限制car元素,可接受的值只有Audi、Goif、BMW具体示例如下: <xs:element name=”car”> <xs:simpleType> <xs:restriction base=”xs:string”> <xs:enumeration value=”Audi”/> <xs:enumeration value=”Goif”/> <xs:enumeration value=”BMW”/> </xs:restriction> </xs:simpleType> </xs:element> 3)xs:pattern元素对一系列值的限定 例如,定义一个元素“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> 4)xs:restriction元素对空白字符的限定(使用whiteSpace元素对空白字符进行限定,他有3个属性值:) preserve :表示不对元素中的空白字符进行处理 replace :表示移除所有的空白字符 collapse :表示将所有的空白字符缩减为一个单一字符 (4)复杂类型 复杂类型的元素可以包含子元素和属性,这样的元素称为复合元素。 在定义复合元素时,如果元素的开始标记和结束标记之间只包含字符数据内容,那么这样的内容就是简单内容,需要使用xs:simpleContent元素来定义。 反之,元素的内容就是复杂的内容,需要使用xs:complexContent来定义。 复合元素有4种基本类型。 1)空元素:元素中不包含内容,只包含属性, 2)包含其他元素的元素 3)仅包含文本的元素 4)包含元素和文本的元素
4、引入schema约束创建xml文档 引入Schema约束文档的book.xml文件: <?xml version="1.0" encoding="UTF-8"?> <书架 xmlns="/chapter02" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="/chapter02 book.xsd"> <书> <书名>spark核心分析</书名> <作者>zhao jw</作者> <售价>28</售价> </书> <书> <书名>java 基础</书名> <作者>亚马逊</作者> <售价>45</售价> </书> </书架> 说明: 1)“书架 xmlns="/chapter02”:指明“书架”的名称空间(“书架”是约束文档中定义的根元素,"/chapter02"名称空间是约束文档中由targetNamespace指定的名称空间。假如tomcat服务器中有一个chapter02项目,约束文档在此目录下,则此名称空间为“/chapter02”) 2)“xsi:schemaLocation="/chapter02 book.xsd"”:指明约束文档的名称空间及文档名。 3)xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance":指明 xsi:schemaLocation属性的名称空间。它是一个标准名称空间。
二、XML样式格式
<?xml version="1.0" encoding="UTF-8"?>
<城市>北京</城市>
<售价 单位=”元”>68</售价>
<!--注释信息-->
三、XML样式格式–DTD约束XML格式
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE persons[
<!ELEMENT persons (person+)>
<!ELEMENT person (name,age,contact,br?)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT contact (phone|email)>
<!ELEMENT phone (#PCDATA)>
<!ELEMENT email (#PCDATA)>
<!ELEMENT br EMPTY>
<!ATTLIST person
pid ID #REQUIRED
sex (男 | 女) "男"
qq CDATA #IMPLIED
parent IDREF #IMPLIED
>
]>
<persons>
<person pid="p1" sex="男" qq="1111" parent="p2">
<name>张小明</name>
<age>10</age>
<contact>
<phone>1234567</phone>
</contact>
<br/>
</person>
<person pid="p2" >
<name>张大明</name>
<age>35</age>
<contact>
<email>123@qq.com</email>
</contact>
</person>
</persons>
四、HTTP协议
-
HTTP协议:是HyperText Transfer Protocol的缩写,即超文本传输协议
-
HTTP专门用于定义浏览器与服务器之间交换数据的过程以及数据本身的格式。
HTTP1.1:它是一种请求/响应式的协议。客户端在与服务器端建立连接后,就可以向服务器端发送请求,这种请求被称作HTTP请求。 服务器端接收到请求后会做出响应,称为HTTP响应。
当用户在浏览器中访问某个URL地址、单击网页的某个超链接或者提交网页上的form表单时,浏览器都会向服务器发送请求数据,即HTTP请求消息。
服务器接收到请求数据后,会将处理后的数据回送给客户端,即HTTP响应消息。HTTP请求消息和HTTP响应消息统称为HTTP响应消息。 -
HTTP请求消息
在HTTP中,一个完整的请求消息是由请求行、请求头和实体内容三部分组成(1)HTTP请求消息行
HTTP请求行位于请求消息的第一行,它包括三个部分,分别是请求方式、资源路径以及所使用的HTTP版本。例如: GET /index.html HTTP/1.1 // GET是请求方式,index.html是请求资源路径,HTTP/1.1是通信使用的协议版本。 请求方式及含义 GET 请求获取请求行的URI所标识的资源 POST 向指定资源提交数据,请求服务器进行处理(如提交表单或上传文件) HEAD 请求获取由URI所标识资源的响应信息头 PUT 将网页放置到指定URI位置(上传/移动) DELETE 请求服务器删除URI所标识的资源 TRACE 请求服务器回送收到的请求信息,主要用于测试或诊断 CONNECT 保留将来使用 OPTIONS 请求查询服务器的性能,或者查询与资源相关的选项和需求。
1)GET方式 当用户在浏览器地址栏中直接输入某个URL地址或者单击网页上的一个超链接时,浏览器将使用GET方式发送请求。 如果将form表单的method属性设置为“GET”,或者不设置method属性,当用户提交表单时,浏览器也将使用GET方式。 例如:http://www.itcast.cn/javaForum?name=lee&psd=hnxy 则请求行中的格式如下: GET /javaForun?name=lee&psd=hnxy HTTP/1.1 需要注意的是,使用GET方式传送数据有限,最多不超过2KB 2)POST方式 如果网页上form表单的属性method设置为“POST”,当用户提交表单时,浏览器将使用POST方式提交表单。(P61) 并把各个表单元素及数据作为HTTP消息的实体内容发送给服务器,而不是作为URI地址的参数传递。 另外,在使用POST方式向服务器传递数据时,Content-Type消息头会自动设置为“application/x-www-form-urlencoded”,Content-Length消息头会自动设置为实体内容的长度。 例如: POST /javaForm HTTP/1.1 Host: www.itcast.cn Content-Type: application/x-www-form-urlencoded Content-Length: 17 Name=lee&psd=hnxy 注:其中application/x-www-form-urlencoded: 窗体数据被编码为名称/值对。这是标准的编码格式。
(2)HTTP请求消息头
在HTTP请求消息中,请求行之后,便是若干请求消息头。请求消息头主要用于向服务器端传递附加消息.例如: 客户端可以接收的数据类型、压缩方法、语言以及发送请求的超链接所属页面的URL地址等信息。 这些请求消息头非常重要(比如防止盗链,案例包中也给出了示例).
(3)实体内容,比如上传文件。后面章节在讲 //请求消息体
-
HTTP响应信息(P65)
响应信息
当服务器收到浏览器的请求后,会回送响应消息给客户端。
一个完整的响应消息主要包括响应状态行、响应消息头和实体内容(1)HTTP响应状态行
HTTP响应状态行位于响应消息的第一行,它包括三个部分,分别是HTTP版本、一个表示成功或错误的整数代码(状态码)和对状态码进行描述的文本信息,
具体示例如下:HTTP/1.1 200 OK
状态码很多,记住两个就可以了404表示服务器找不到请求的资源,500服务器端发生错误。 (404:浏览器或浏览器输入地址错误,找不到资源;500:服务器发生错误。)
(2)响应消息头:略。
(3)实体内容:略。
五、HTTP协议样式格式
HTTP1.0版请求格式:
GET / HTTP/1.0
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5)
Accept: */*
回应格式:
HTTP/1.0 200 OK
Content-Type: text/plain
Content-Length: 137582
Expires: Thu, 05 Dec 1997 16:00:00 GMT
Last-Modified: Wed, 5 August 1996 15:55:28 GMT
Server: Apache 0.84
HTTP1.0与HTTP
1.1区别:
1.1 版的最大变化,就是引入了持久连接(persistent connection)。
即TCP连接默认不关闭,可以被多个请求复用,不用声明Connection: keep-alive。
六、Tomcat
-
web服务器,它不仅可以和目前大部分主流服务器(如Apache,HS)一起工作,还可以作为独立的web服务器工作。
-
目录结构
bin :用于存放Tomcat的可执行文件和脚本文件(扩展名为bat的文件),如startup.bat conf:用于存放Tomcat的各种配置文件,如web.xml、server.xml lib :用于存放Tomcat服务器和所有web应用程序需要访问的JAR文件 logs:用于存放Tomcat的日志文件 temp:用于存放Tomcat运行时产生的临时文件 webapps:web应用程序的主要发布目录,通常将要发布的应用程序放到这个目录下 work :Tomcat的工作目录,JSP编译生成的servlet源文件和字节码文件放到这个目录下
-
配置web应用默认页面
如果想将应用中的webcome.html页面配置成默认页面,只需在web.xml中进行如下配置: <welcome-file-list> <welcome-file>webcome.html</welcome-file> </welcome-file-list
七、web.xml样式格式
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
<servlet>
<servlet-name>ListBookServlet</servlet-name>
<servlet-class>
cn.itcast.chapter05.session.exmple01.ListBookServlet
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ListBookServlet</servlet-name>
<url-pattern>/ListBookServlet</url-pattern>
</servlet-mapping>
</web-app>
End。