第八章 Java Web
Web开发的相关知识
C/S 与 B/S 体系结构:
网络应用程序开发体系结构 客户端/服务器 浏览器/服务器
1.C/S结构
C/S结构是早起出现的一种分布式架构.在这种结构中,客户端需要安装专门的客户端软件,而服务器通常会采用高性能的PC或工作站,并采用大型数据库系统(如oracle,SQL,Server等).
在C/S结构中,客户端程序与数据库会直接建立连接,并且客户端程序需要利用客户机的数据处理能力,完成应用程序中绝大多数的业务逻辑和界面展示,这种方式充分利用了两端硬件的环境优势,将任务合理地分配到客户端和服务器,从而降低系统的通信开销.
2.B/S结构
B/S结构是对C/S结构的一种改进,是Web兴起后的一种网络结构模型.在这种结构中,客户端不需要开发任何软件,而是统一使用浏览器向Web服务器发送请求,由服务器进行处理并返回给客户端.如图所示的B/S体系结构中,浏览器提交的请求会传送给Web服务器,服务器在接收到这个请求后会进行相应的处理(如访问数据库服务器),然后将处理后的结果返回浏览器并显示.
3.B/S和C/S结构的区别
Web 资源
Internet上供外界访问的文件或程序成为Web资源.根据呈现效果的不同,Web资源可分为动态Web资源和静态Web资源.在互联网发展的初期,网络上的页面都是由一些HTML语言编写的,当浏览器在不同时刻或者不同条件下访问时,所获得的页面内容不会发生变化,因此将这些页面称为静态Web资源(或页面).
由上图可以看出,当用户通过浏览器以URL地址的形式向服务器发出访问Web页面的请求后,Web服务器会处理接收到的用户请求,然后将处理结果回传给客户端浏览器并显示.
动态Web资源(页面) 工作原理如下:
由上图可以看出,当客户端通过浏览器向Web服务器发出访问动态网页的请求时,Web服务器不会将程序的源代码直接返回客户端,而是根据用户的请求将页面交给了服务程序引擎,服务程序引擎会扫描整个页面,并根据页面中的脚本代码实现不同的功能,如访问数据库,执行运算等,之后会将执行结果交给Web服务器,由Web服务器将结果和页面上的HTML内容一同传送给客户端显示.
在基于动态web资源的网站上,客户端浏览器看到的内容与传统的静态资源页面没有任何形式上的区别,但是动态的资源页面中所生成的内容是动态变化的,每次返回的结果都可能不同.
XML基础 可扩展标记语言
city.xml
<?xml version="1.0" encoding="UTF- 8" ?>
<中国>
<内蒙古>
<城市>呼和浩特</城市>
<城市>阿尔山</城市>
</内蒙古>
<黑龙江>
<城市>哈尔滨</城市>
<城市>齐齐哈尔</城市>
</黑龙江>
</中国>
在XML文档中,通过元素的嵌套关系可以很准确的买哦书具有树状层次结构的复杂信息,因此,越来越多的应用程序都采用XML格式存放相关的配置信息,以便于读取和修改.
XML和HTML都是标记文本,虽然它们在结构上大致相同,都是以标记的形式描述信息,但它们有着本质的区别,具体如下:
(1)XML用于传输和存储数据,而HTML用于显示数据.
(2)XML严格区分大小写,而HTML不区分大小写.
(3)格式良好的XML有且只有一个根元素,而HTML可以有多个根元素.
(4)XML中的空格不会自动删除,HTML中的空格是自动过滤的.
(5)XML中的标记可以根据需要自行定义,并且可扩展,而HTML中的标记是预定义好的.
注意:XML既不是HTML的升级也不是HTML的替代产品,虽然两者有些相似,但它们的应用领域完全不同.
XML语法
1.文档声明
在一个完整的XML文档中,必须包含一个XML文档的声明,并且该声明必须位于文档的第一行.该声明表示该文档是一个XML文档,以及该文档该遵循哪个XML版本的规范,XML文档声明语法格式如下
<?xml 版本信息 [编码信息] [文档独立性信息] ?>
从上面的语法格式中可以看出,文档声明以符号"<?"开头,以符号"?>"结束,中间可以声明版本信息,编码信息以及文档独立性信息,
需要注意的是,在<和?,?和>以及第一个?和xml之间不能有空格;另外,中括号([])括起来的部分表示其是可选的.
<?xml version="1.0" encoding="UTF- 8" standalone="yes"? >
在上述实力代码中,version属性表示XML的版本.目前最常用的XML版本是1.0,encoding属性用于说明XML文档所使用的编码方式,在默认情况下,XML文档使用UTF-8编码方式.standalone属性用于声明该文档是否是独立的文档,在默认情况下,standalone属性的值为no,表示该文档依赖与外部文档.
2.元素定义
在XML文档中,主体内容都是由元素组成的.元素一般由开始标记,属性,元素内容和结束标记构成,
<城市>北京</城市>
一个元素可以嵌套若干个子元素,如果一个元素没有嵌套在其他元素内,那么成这个元素为根元素.根元素是XML文档定义的第一个元素.如果一个元素中既没有嵌套子元素,也没有包含文本内容,则称这样的元素为空元素,空元素可以不使用结束标记,但必须在起始标记的>前增加一个/以说明该元素是个空元素,例如<img><img/> 可以简写为<img />
3.属性定义
属性是对元素的进一步描述和说明.在一个元素中可以有多个属性,并且每个属性都有自己的名称和取值,
<售价 单位="元">68</售价>
在SML文档中属性的命名规范和元素相同,属性值必须要用双引号或者单引号引起来,不然会报错
4.注释
<!--注释信息-->
DTD约束
在XML文档中,定义了一套规则对文档中的内容进行约束,这套约束被称为XML约束.XML约束根据语法规则的不同,形成了不同的XML约束语言.目前,常用的两种XML约束语言是DTD和Schema
1.DTD约束
DTD约束是早起出现的一种XML约束模式语言,根据其语法创建的文件成为DTD文件.在一个DTD文件中,可以包含元素的定义,元素之间关系的定义,元素属性的定义以及实体和符号的定义.
book.xml
<? xml version="1.0" encoding="UTF- 8"? >
<书架>
<书>
<书名>Java从入门到精通</书名>
<作者>黑马</作者>
<出版社>清华大学出版社</出版社>
</书>
<书>
<书名>Web服务</书名>
<作者>黑马</作者>
<出版社>清华大学出版社</出版社>
</书>
</书架>
book.dtd
<? xml version="1.0" encoding="UTF- 8"?>
<!ELEMENT 书架 (书+)>
<!ELEMENT 书(书名,作者,出版社)>
<!ELEMENT 书名 (#PCDATA)>
<!ELEMENT 作者 (#PCDATA)>
<!ELEMENT 出版社 (#PCDATA)>
book.dtd是一个简单的DTD约束文档.在文件book.xml中定义的每个元素都是按照book.dtd文档所规定的约束进行编写的.
-
在第二行.使用<!ELEMENT ...>语句定义一个元素,其中"书架"是元素的名称,"(书+)"表示书架元素中有一个或多个书元素,字符+用于表示它所修饰的成分必须出现一次或多次.
-
在第三行."书"是元素名称,"(书名,作者,出版社)"表示元素书包含书名,作者,出版社这三个字元素,并且这些子元素要按照顺序依次出现.
-
在4~6行中,"书名"作者""出版社"都是元素名称,(#PCDATA)表示元素中嵌套的内容是普通的文本字符串.
DTD的引入
如果想使用DTD文件约束XML文档,必须在XML文档中引入DTD文件,在XML文档中引入DTD文件常用的两种方式如下:
1 <!DOCTYPE 根元素名称 SYSTEM "外部DTD文件的URI">
2 <!DOCTYPE 根元素名称 PUBLIC "DTD名称" "外部DTD文件的URI">
在上述两种引入DTD文件的方式中,第一种方式用于引用本地的DTD文件,第二种方式用于引用公共的DTD文件,
其中"外部DTD文件的URI(统一资源标识符)"指的是DTD文件的存放位置,对于第一种方式,它既可以是相对于XML文档的相对路径,也可以是一个绝对路径;而对于第二种方式,它是Internet上的一个绝对URL地址.
<? xml version="1.0" encoding="UTF- 8"? >
<!DOCTYPE 书架 SYSTEM "book.dtd">
<书架>
<书>
<书名>Java从入门到精通</书名>
<作者>黑马</作者>
<出版社>清华大学出版社</出版社>
</书>
<书>
<书名>Web服务</书名>
<作者>黑马</作者>
<出版社>清华大学出版社</出版社>
</书>
</书架>
由于引入的是本地的DTD文件,因此,使用的是SYSTEM属性的DOCTYPE声明语句.另外,在XML文档的声明语句中,standalone属性不能设置为yes.
如果希望引入一个公共的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标示名称进行复制并使用即可.
Schema约束
1.Schema约束XML Schema 也是一种用于定义和描述XML文档结构与内容的模式语言,它的出现克服了DTD的局限性。
比较,及Schema的优点:
通过上面的比较可以发现XML Schema的功能比DTD强大很多,但是也复杂很多
Simple.xsd
<?xml version="1.0">
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name ="root" type="xs:string"/>
</xs:schema>
第1行是文档声明,第二行中以xs:schema作为根元素,表示模式定义的开始.由于根元素xs:schema的属性都在http://www.w3.org/2001/XMLSchema名称空间中,因此,在根元素上必须声明该名称空间
2.名称空间
一个XML文档可以引入多个约束文档,但是,由于约束文档中的元素或属性都是自定义的,极有可能出现代表不同含义的同名元素或属性,从而导致名称出现冲突,因此,XML文档提供了名称空间,使用名称空间唯一标识一个元素或者属性.
要使用名称空间,就必须先声明名称空间.名称空间的声明就是在XML文档中某个模式文档的名称空间制定一个临时的简写名称,它通过一系列的保留属性进行声明,这汇总属性的名称必须以"xmlns"或者"xmlns:"作为前缀.
声明格式如下:
<元素名 xmlns:prefixname="URI">
元素名指在哪个元素上声明名称空间,在这个元素上声明的名称空间适用于声明它的元素和属性,以及该元素中嵌套的所有元素及其属性.xmlns:prefixname指的是该元素的属性名,它所对应的值是一个URI引用.,,
用于标识该名称空间的名称
注意:如果有两个URI并且其组成的字符完全相同,就可以认为它们标识的是同一个名称空间。
<?xml version="1.0" encoding="UTF- 8"?>
<itheima: 书架 xmlns:itheima="http://www.itheima.com/xmlbook/schema">
<itheima:书>
<itheima:书名>JAVA</itheima:书名>
<itheima:作者>张晓晓</itheima:作者>
<itheima:售价>39.00元</itheima:售价>
<itheima:书>
<itheima:书架>
shemh
itheima作为多个元素名称的前缀部分.必须通过名称空间声明将它关联到唯一标识某个名称空间的URI上,xmlns:itheima="http://www.itheima.com/xmlbook/schema"语句就是将前缀名itheima关联到名称空间"http://www.itheima.com/xmlbook/schema"上.由此可见,名称空间的应用就是将一个前缀绑定到代表某个名称空间的URI上,然后将前缀添加到元素名称的前面从而说明该元素属于哪个模式文档.
需要注意的是,在声明名称空间时,有两个前缀是不允许使用的,分别是xml和xmlns.xml前缀被定义为与名称空间名字http://www.w3.org/XML/1998/namespace绑定,只能用于XML1.0规范中定义的xml:space和xml:lang属性.前缀xmlns仅用于声明名称空间的绑定,它被定义为与名称空间名字http://www.w3.org/2000/xmlns绑定.
3.引入Schema文档
如果想通过XML Schema文件对某个XML文档进行约束,必须要进行关联.在XML文档中引入Schema文件有两种方式
-
使用名称空间引入XML Schema文档
在使用名称空间引入XML Schema文档时,需要通过属性 xsi:schemaLocation声明名称空间的文档,xsi:schemaLocation 属性是在标准名称空间"http://www.w3.org/2001/XMLSchema-instance"中定义的,该属性包含两个URI,这两个URI之间用空白符分隔.
其中,第一个URI是名称空间的名称,第二个URI是文档的位置.下面进行引入的案例"
namespacebook.xml
<?xml version="1.0" encoding="UTF- 8"?>
<书架 xmlns="http://www.itheima.com/xmlbook/schema">
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.itheima.com/xmlbook/schema
http://www.itheima.com/xmlbook.xsd"
<书>
<书名>JAVA</书名>
<作者>张晓晓</作者>
<售价>39.00元</售价>
</书>
</书架>
schemaLocation属性用于指定名称空间所对应的XML Schema文档的位置,由于schemaLocation属性是在另外一个公认的标准名称空间中定义的,因此,在使用schemaLocation属性时,必须要声明该属性所属的命名空间..
注意:一个 XML实例文档可能引用多个名称空间,这是,可以在schemaLocation属性值中包含多对名称空间与它们的对应的XML Schema文档的存储位置,每一对名称空间的设置信息之间此阿勇空格分隔...
<?xml version="1.0" encoding="UTF- 8"?>
<书架 xmlns="http://www.itheima.com/xmlbook/schema">
xmlns:xdemo="http://www.itheima.com/demo/schema"
xsi:schemaLocation="http://www.itheima.com/xmlbook/schema
http://www.itheima.com/xmlbook.xsd
http://www.itheima.com/demo/schema
http://www.itheima.com/demo.xs "
...
</书架>
2.不使用名称空间引入XML Schema文档
在XML 文档中不进可以通过schemaLocation属性引入名称空间的文档,还可以通过xsi:noNamespaceSchemaLocation属性直接指定XML Schema文档.noNamespaceSchemaLocation属性也是在标准名称空间http://www.w3.org/2001/XMLSchema-instance中定义的,它用于定义指定文档的位置.其使用方法如下:
noNamespaceBook.xml
<?xml version="1.0" encoding="UTF- 8"?>
<书架 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="xmlbook.xsd">
<书>
<书名>JAVA</书名>
<作者>张晓晓</作者>
<售价>39.00元</售价>
</书>
</书架>
HTTP 超文本传输协议 是一种请求/响应式的协议,客户端在与服务器建立连接后,就可以向服务器端发送URL请求,这种请求被称为HTTP请求,服务器端在接收到请求后会做出响应,成为HTTP响应.
HTTP协议具有如下特点:
1.支持客户端(浏览器就是一种Web客户端)/服务器端模式
2.简单快速:客户端向服务器端请求服务时,只需要传送请求方式和路径.常用的请求方式有GET POST,每种方式规定了客户端与服务器端联系的类型不同.由于HTTP比较简单,使得HTTP服务器的程序规模较小,因而通信速度很快.
3.灵活:HTTP允许传输任意类型的数据,正在传输的数据类型由Content-type加以标记
4.无状态:HTTP是无状态协议,无状态是指协议对于事务处理没有记忆能力,如果后续处理需要前面的信息,则HTTP必须重传,这样可能导致每次连接传送的数据量增大.
2.URL地址
在Internet上的Web服务器中,每一个网页文件都会有一个用于唯一标识其位置的访问标记符,这个 访问标记符被称为URL(统一资源定位符).
在一个URL中,通常会包含Web服务器的主机名,端口号,资源名以及所使用的网络协议,其示例如下
http://www.baidu.com:80/index.html
在上面的URL中,http表示传输数据所用的协议,www.baidu.com表示要请求的服务器主机名,80表示要请求的端口号,Index.html表示要请求的资源名称.
3.HTTP1.1
目前网络上所使用的主要版本是HTTP1.1. HTTP1.1版本支持持久连接,也就是说,在一个TCP连接上可以传送多个HTTP请求和响应,从而减少了建立和关闭连接的消耗和延时.
当客户端与服务器端建立连接后,客户端可以向服务器端发送多个请求,并且在发送下一个请求时,无须等待上次请求的返回结果.服务器端必须按照接受客户端请求的先后顺序依次返回响应结果,以保证客户端能够区分每次请求的相应内容.
4.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是通信使用的协议版本.注意:请求行中的每个部分需要用空格分隔,最后要以回车换行结束.
HTTP的请求方式
在HTTP的请求消息中,请求方式有GET,POST,HEAD,OPTIONS,DELETE,TRACE,PUT和CONNECT共八种,每种方式都指明了操作服务器中指定URI资源的方式.然而在实际开发中,使用最多的方式是GET和POST
第八章 Java Web Web开发的相关知识 C/S 与 B/S 体系结构: 网络应用程序开发体系结构 客户端/服务器 浏览器/服务器 1.C/S结构 C/S结构是早起出现的一种分布式架构.在这种结构中,客户端需要安装专门的客户端软件,而服务器通常会采用高性能的PC或工作站,并采用大型数据库系统(如oracle,SQL,Server等). 在C/S结构中,客户端程序与数据库会直接建立连接,并且客户端程序需要利用客户机的数据处理能力,完成应用程序中绝大多数的业务逻辑和界面展示,这种方式充分利用了两端硬件的环境优势,将任务合理地分配到客户端和服务器,从而降低系统的通信开销. 2.B/S结构 B/S结构是对C/S结构的一种改进,是Web兴起后的一种网络结构模型.在这种结构中,客户端不需要开发任何软件,而是统一使用浏览器向Web服务器发送请求,由服务器进行处理并返回给客户端.如图所示的B/S体系结构中,浏览器提交的请求会传送给Web服务器,服务器在接收到这个请求后会进行相应的处理(如访问数据库服务器),然后将处理后的结果返回浏览器并显示.
3.B/S和C/S结构的区别
Web 资源 Internet上供外界访问的文件或程序成为Web资源.根据呈现效果的不同,Web资源可分为动态Web资源和静态Web资源.在互联网发展的初期,网络上的页面都是由一些HTML语言编写的,当浏览器在不同时刻或者不同条件下访问时,所获得的页面内容不会发生变化,因此将这些页面称为静态Web资源(或页面).
由上图可以看出,当用户通过浏览器以URL地址的形式向服务器发出访问Web页面的请求后,Web服务器会处理接收到的用户请求,然后将处理结果回传给客户端浏览器并显示. 动态Web资源(页面) 工作原理如下:
由上图可以看出,当客户端通过浏览器向Web服务器发出访问动态网页的请求时,Web服务器不会将程序的源代码直接返回客户端,而是根据用户的请求将页面交给了服务程序引擎,服务程序引擎会扫描整个页面,并根据页面中的脚本代码实现不同的功能,如访问数据库,执行运算等,之后会将执行结果交给Web服务器,由Web服务器将结果和页面上的HTML内容一同传送给客户端显示. 在基于动态web资源的网站上,客户端浏览器看到的内容与传统的静态资源页面没有任何形式上的区别,但是动态的资源页面中所生成的内容是动态变化的,每次返回的结果都可能不同.
XML基础 可扩展标记语言 city.xml <?xml version="1.0" encoding="UTF- 8" ?> <中国> <内蒙古> <城市>呼和浩特</城市> <城市>阿尔山</城市> </内蒙古> <黑龙江> <城市>哈尔滨</城市> <城市>齐齐哈尔</城市> </黑龙江> </中国>
在XML文档中,通过元素的嵌套关系可以很准确的买哦书具有树状层次结构的复杂信息,因此,越来越多的应用程序都采用XML格式存放相关的配置信息,以便于读取和修改. XML和HTML都是标记文本,虽然它们在结构上大致相同,都是以标记的形式描述信息,但它们有着本质的区别,具体如下: (1)XML用于传输和存储数据,而HTML用于显示数据. (2)XML严格区分大小写,而HTML不区分大小写. (3)格式良好的XML有且只有一个根元素,而HTML可以有多个根元素. (4)XML中的空格不会自动删除,HTML中的空格是自动过滤的. (5)XML中的标记可以根据需要自行定义,并且可扩展,而HTML中的标记是预定义好的. 注意:XML既不是HTML的升级也不是HTML的替代产品,虽然两者有些相似,但它们的应用领域完全不同.
XML语法 1.文档声明 在一个完整的XML文档中,必须包含一个XML文档的声明,并且该声明必须位于文档的第一行.该声明表示该文档是一个XML文档,以及该文档该遵循哪个XML版本的规范,XML文档声明语法格式如下 <?xml 版本信息 [编码信息] [文档独立性信息] ?> 从上面的语法格式中可以看出,文档声明以符号"<?"开头,以符号"?>"结束,中间可以声明版本信息,编码信息以及文档独立性信息, 需要注意的是,在<和?,?和>以及第一个?和xml之间不能有空格;另外,中括号([])括起来的部分表示其是可选的. <?xml version="1.0" encoding="UTF- 8" standalone="yes"? > 在上述实力代码中,version属性表示XML的版本.目前最常用的XML版本是1.0,encoding属性用于说明XML文档所使用的编码方式,在默认情况下,XML文档使用UTF-8编码方式.standalone属性用于声明该文档是否是独立的文档,在默认情况下,standalone属性的值为no,表示该文档依赖与外部文档.
2.元素定义 在XML文档中,主体内容都是由元素组成的.元素一般由开始标记,属性,元素内容和结束标记构成, <城市>北京</城市> 一个元素可以嵌套若干个子元素,如果一个元素没有嵌套在其他元素内,那么成这个元素为根元素.根元素是XML文档定义的第一个元素.如果一个元素中既没有嵌套子元素,也没有包含文本内容,则称这样的元素为空元素,空元素可以不使用结束标记,但必须在起始标记的>前增加一个/以说明该元素是个空元素,例如<img><img/> 可以简写为<img />
3.属性定义 属性是对元素的进一步描述和说明.在一个元素中可以有多个属性,并且每个属性都有自己的名称和取值, <售价 单位="元">68</售价> 在SML文档中属性的命名规范和元素相同,属性值必须要用双引号或者单引号引起来,不然会报错
4.注释 <!--注释信息-->
DTD约束 在XML文档中,定义了一套规则对文档中的内容进行约束,这套约束被称为XML约束.XML约束根据语法规则的不同,形成了不同的XML约束语言.目前,常用的两种XML约束语言是DTD和Schema 1.DTD约束 DTD约束是早起出现的一种XML约束模式语言,根据其语法创建的文件成为DTD文件.在一个DTD文件中,可以包含元素的定义,元素之间关系的定义,元素属性的定义以及实体和符号的定义. book.xml <? xml version="1.0" encoding="UTF- 8"? > <书架> <书> <书名>Java从入门到精通</书名> <作者>黑马</作者> <出版社>清华大学出版社</出版社> </书> <书> <书名>Web服务</书名> <作者>黑马</作者> <出版社>清华大学出版社</出版社> </书> </书架>
book.dtd <? xml version="1.0" encoding="UTF- 8"?> <!ELEMENT 书架 (书+)> <!ELEMENT 书(书名,作者,出版社)> <!ELEMENT 书名 (#PCDATA)> <!ELEMENT 作者 (#PCDATA)> <!ELEMENT 出版社 (#PCDATA)> book.dtd是一个简单的DTD约束文档.在文件book.xml中定义的每个元素都是按照book.dtd文档所规定的约束进行编写的.
DTD的引入 如果想使用DTD文件约束XML文档,必须在XML文档中引入DTD文件,在XML文档中引入DTD文件常用的两种方式如下: 1 <!DOCTYPE 根元素名称 SYSTEM "外部DTD文件的URI"> 2 <!DOCTYPE 根元素名称 PUBLIC "DTD名称" "外部DTD文件的URI"> 在上述两种引入DTD文件的方式中,第一种方式用于引用本地的DTD文件,第二种方式用于引用公共的DTD文件, 其中"外部DTD文件的URI(统一资源标识符)"指的是DTD文件的存放位置,对于第一种方式,它既可以是相对于XML文档的相对路径,也可以是一个绝对路径;而对于第二种方式,它是Internet上的一个绝对URL地址.
<? xml version="1.0" encoding="UTF- 8"? > <!DOCTYPE 书架 SYSTEM "book.dtd"> <书架> <书> <书名>Java从入门到精通</书名> <作者>黑马</作者> <出版社>清华大学出版社</出版社> </书> <书> <书名>Web服务</书名> <作者>黑马</作者> <出版社>清华大学出版社</出版社> </书> </书架>
由于引入的是本地的DTD文件,因此,使用的是SYSTEM属性的DOCTYPE声明语句.另外,在XML文档的声明语句中,standalone属性不能设置为yes. 如果希望引入一个公共的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标示名称进行复制并使用即可.
Schema约束 1.Schema约束XML Schema 也是一种用于定义和描述XML文档结构与内容的模式语言,它的出现克服了DTD的局限性。 比较,及Schema的优点:
通过上面的比较可以发现XML Schema的功能比DTD强大很多,但是也复杂很多 Simple.xsd <?xml version="1.0"> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name ="root" type="xs:string"/> </xs:schema> 第1行是文档声明,第二行中以xs:schema作为根元素,表示模式定义的开始.由于根元素xs:schema的属性都在http://www.w3.org/2001/XMLSchema名称空间中,因此,在根元素上必须声明该名称空间
2.名称空间 一个XML文档可以引入多个约束文档,但是,由于约束文档中的元素或属性都是自定义的,极有可能出现代表不同含义的同名元素或属性,从而导致名称出现冲突,因此,XML文档提供了名称空间,使用名称空间唯一标识一个元素或者属性. 要使用名称空间,就必须先声明名称空间.名称空间的声明就是在XML文档中某个模式文档的名称空间制定一个临时的简写名称,它通过一系列的保留属性进行声明,这汇总属性的名称必须以"xmlns"或者"xmlns:"作为前缀. 声明格式如下: <元素名 xmlns:prefixname="URI"> 元素名指在哪个元素上声明名称空间,在这个元素上声明的名称空间适用于声明它的元素和属性,以及该元素中嵌套的所有元素及其属性.xmlns:prefixname指的是该元素的属性名,它所对应的值是一个URI引用.,, 用于标识该名称空间的名称 注意:如果有两个URI并且其组成的字符完全相同,就可以认为它们标识的是同一个名称空间。 <?xml version="1.0" encoding="UTF- 8"?> <itheima: 书架 xmlns:itheima="http://www.itheima.com/xmlbook/schema"> <itheima:书> <itheima:书名>JAVA</itheima:书名> <itheima:作者>张晓晓</itheima:作者> <itheima:售价>39.00元</itheima:售价> <itheima:书> <itheima:书架> shemh itheima作为多个元素名称的前缀部分.必须通过名称空间声明将它关联到唯一标识某个名称空间的URI上,xmlns:itheima="http://www.itheima.com/xmlbook/schema"语句就是将前缀名itheima关联到名称空间"http://www.itheima.com/xmlbook/schema"上.由此可见,名称空间的应用就是将一个前缀绑定到代表某个名称空间的URI上,然后将前缀添加到元素名称的前面从而说明该元素属于哪个模式文档. 需要注意的是,在声明名称空间时,有两个前缀是不允许使用的,分别是xml和xmlns.xml前缀被定义为与名称空间名字http://www.w3.org/XML/1998/namespace绑定,只能用于XML1.0规范中定义的xml:space和xml:lang属性.前缀xmlns仅用于声明名称空间的绑定,它被定义为与名称空间名字http://www.w3.org/2000/xmlns绑定.
3.引入Schema文档 如果想通过XML Schema文件对某个XML文档进行约束,必须要进行关联.在XML文档中引入Schema文件有两种方式
在使用名称空间引入XML Schema文档时,需要通过属性 xsi:schemaLocation声明名称空间的文档,xsi:schemaLocation 属性是在标准名称空间"http://www.w3.org/2001/XMLSchema-instance"中定义的,该属性包含两个URI,这两个URI之间用空白符分隔. 其中,第一个URI是名称空间的名称,第二个URI是文档的位置.下面进行引入的案例" namespacebook.xml <?xml version="1.0" encoding="UTF- 8"?> <书架 xmlns="http://www.itheima.com/xmlbook/schema"> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.itheima.com/xmlbook/schema http://www.itheima.com/xmlbook.xsd" <书> <书名>JAVA</书名> <作者>张晓晓</作者> <售价>39.00元</售价> </书> </书架>
schemaLocation属性用于指定名称空间所对应的XML Schema文档的位置,由于schemaLocation属性是在另外一个公认的标准名称空间中定义的,因此,在使用schemaLocation属性时,必须要声明该属性所属的命名空间.. 注意:一个 XML实例文档可能引用多个名称空间,这是,可以在schemaLocation属性值中包含多对名称空间与它们的对应的XML Schema文档的存储位置,每一对名称空间的设置信息之间此阿勇空格分隔... <?xml version="1.0" encoding="UTF- 8"?> <书架 xmlns="http://www.itheima.com/xmlbook/schema"> xmlns:xdemo="http://www.itheima.com/demo/schema" xsi:schemaLocation="http://www.itheima.com/xmlbook/schema http://www.itheima.com/xmlbook.xsd http://www.itheima.com/demo/schema http://www.itheima.com/demo.xs " ... </书架>
2.不使用名称空间引入XML Schema文档 在XML 文档中不进可以通过schemaLocation属性引入名称空间的文档,还可以通过xsi:noNamespaceSchemaLocation属性直接指定XML Schema文档.noNamespaceSchemaLocation属性也是在标准名称空间http://www.w3.org/2001/XMLSchema-instance中定义的,它用于定义指定文档的位置.其使用方法如下:
noNamespaceBook.xml <?xml version="1.0" encoding="UTF- 8"?> <书架 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="xmlbook.xsd"> <书> <书名>JAVA</书名> <作者>张晓晓</作者> <售价>39.00元</售价> </书> </书架>
HTTP 超文本传输协议 是一种请求/响应式的协议,客户端在与服务器建立连接后,就可以向服务器端发送URL请求,这种请求被称为HTTP请求,服务器端在接收到请求后会做出响应,成为HTTP响应.
HTTP协议具有如下特点: 1.支持客户端(浏览器就是一种Web客户端)/服务器端模式 2.简单快速:客户端向服务器端请求服务时,只需要传送请求方式和路径.常用的请求方式有GET POST,每种方式规定了客户端与服务器端联系的类型不同.由于HTTP比较简单,使得HTTP服务器的程序规模较小,因而通信速度很快. 3.灵活:HTTP允许传输任意类型的数据,正在传输的数据类型由Content-type加以标记 4.无状态:HTTP是无状态协议,无状态是指协议对于事务处理没有记忆能力,如果后续处理需要前面的信息,则HTTP必须重传,这样可能导致每次连接传送的数据量增大.
2.URL地址 在Internet上的Web服务器中,每一个网页文件都会有一个用于唯一标识其位置的访问标记符,这个 访问标记符被称为URL(统一资源定位符). 在一个URL中,通常会包含Web服务器的主机名,端口号,资源名以及所使用的网络协议,其示例如下 http://www.baidu.com:80/index.html 在上面的URL中,http表示传输数据所用的协议,www.baidu.com表示要请求的服务器主机名,80表示要请求的端口号,Index.html表示要请求的资源名称.
3.HTTP1.1 目前网络上所使用的主要版本是HTTP1.1. HTTP1.1版本支持持久连接,也就是说,在一个TCP连接上可以传送多个HTTP请求和响应,从而减少了建立和关闭连接的消耗和延时.
当客户端与服务器端建立连接后,客户端可以向服务器端发送多个请求,并且在发送下一个请求时,无须等待上次请求的返回结果.服务器端必须按照接受客户端请求的先后顺序依次返回响应结果,以保证客户端能够区分每次请求的相应内容.
4.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是通信使用的协议版本.注意:请求行中的每个部分需要用空格分隔,最后要以回车换行结束. HTTP的请求方式 在HTTP的请求消息中,请求方式有GET,POST,HEAD,OPTIONS,DELETE,TRACE,PUT和CONNECT共八种,每种方式都指明了操作服务器中指定URI资源的方式.然而在实际开发中,使用最多的方式是GET和POST
详细讲解: (1)GET方式 当用户在浏览器地址栏中直接输入某个URL地址或者单击网页上的某个超链接时,浏览器将使用GET方式发送请求. 如果将网页上的form表单的method属性设置为GET或者不设置method属性(默认为GET),那么当用户提交表单时,浏览器也将使用GET方式发送请求. 如果浏览器请求的URL中有参数部分,那么浏览器生成的请求消息中,参数部分将附加在请求行中的资源路径后边. http://www.baidu.com/javaForum? name=zhangsan&age=23 在上述URL中 ?后面的内容为参数信息.参数是由参数名和参数值组成的,并且在中间使用等号(=)进行连接.需要注意的是,如果URL地址中有多个参数,参数之间使用&分隔. 当浏览器向服务器发送请求消息时,上述URL种的参数部分会附加在需要访问的URI资源后面. GET /javaForum? name=zhangsan&age=23 HTTP/1.1 需要注意的是,使用GET方式传送的数据量有限,最多不能超过1KB. (2)POST方式 如果将网上的form表单的method属性设置为POST,那么当用户提交表单时,浏览器将使用POST方式提交表单内容,并把各个表单元素及数据作为HTTP消息的实体内容发送给服务器,而不是作为URI的参数传递.另外,在使用POST方式向服务器传递数据时,Content-Type消息头会自动设置为application/x-www-form-urlencoded,Content-Length消息头会自动设置为实体内容的长度.如下所示: POST /javaForum HTTP/1.1 Host: www.itheima.com Content-Type: application/x-www-form-urlencoded Content-Length: 17 name=lee&psd=hhxy 对于POST方式传递的请求信息,服务器端程序会采用与获取URI后面参数相同的方式获取表单各个字段的数据. 一般都使用POST方式发送请求,原因如下: 一.POST传输的数据大小无限制.由于GET请求方式是通过请求参数传递数据的,因此最多可传递1KB的数据,而POST请求方式是通过实体内容传递数据的,因此传递数据的大小没有限制. 二.POST方式比GET请求方式更安全.由于GET请求方式的参数信息都会在URL地址栏中明文显示,而POST请求方式传递的参数隐藏在实体内容中,用户是看不到的.
2.HTTP请求消息头 在HTTP请求消息中,在请求行之后便是若干请求消息头.请求消息头主要用于向服务器端传递附加信息,例如客户端可以接受的数据类型,压缩方法,语言以及发送请求的超链接所属页面的URL地址等信息,具体如下: HOST: localhost:8080 Accept: image/gif,image/x-xbitmap, * Referer: http://localhost:8080/itcast/ Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding: gzip,deflate Content-Type: Content-Type: application/x-www-form-urlencoded User-Agent: Mozilla/4.0 (compatible;MSIE 7.0;Windows NT 5.1;GTB6.5;CIBA) Connection: Keep-Alive Cache-Control: no-Cache
请求头字段
HTTP响应消息 当服务器收到浏览器的请求后,会回送响应消息给客户端.一个完整的响应消息主要包括状态行,响应消息头和实体内容.其中 1.HTTP响应状态行 HTTP响应状态行位于响应消息的第一行,它包括三个部分,分别是HTTP版本,一个表示成功或错误的整数代码(状态码)和对状态码进行描述的文本信息 HTTP/1.1 200 OK 版本 状态码 状态描述 状态码:第一个数字 五种取值 1**:表示请求已接收,需要继续处理 2**表示请求已成功被服务器接收,理解并接受 3**为完成请求,客户端需要进一步细化请求 4**客户端的请求有错误 5**服务器端出现错误 HTTP的状态码数量众多,下面是最常见的
HTTP响应消息头 HTTP的响应消息中,第一行为响应状态行,随后就是若干响应消息头. 服务器端通过响应消息头向客户端传递附加信息,包括服务程序名,被请求的资源需要的认证方式,客户端请求资源的最后修改时间,重定向地址等信息.
常用的响应消息头字段:
JAVA 2017-11-26 视频讲Servlet
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
详细讲解:
(1)GET方式
当用户在浏览器地址栏中直接输入某个URL地址或者单击网页上的某个超链接时,浏览器将使用GET方式发送请求. 如果将网页上的form表单的method属性设置为GET或者不设置method属性(默认为GET),那么当用户提交表单时,浏览器也将使用GET方式发送请求.
如果浏览器请求的URL中有参数部分,那么浏览器生成的请求消息中,参数部分将附加在请求行中的资源路径后边.
http://www.baidu.com/javaForum? name=zhangsan&age=23
在上述URL中 ?后面的内容为参数信息.参数是由参数名和参数值组成的,并且在中间使用等号(=)进行连接.需要注意的是,如果URL地址中有多个参数,参数之间使用&分隔.
当浏览器向服务器发送请求消息时,上述URL种的参数部分会附加在需要访问的URI资源后面.
GET /javaForum? name=zhangsan&age=23 HTTP/1.1
需要注意的是,使用GET方式传送的数据量有限,最多不能超过1KB.
(2)POST方式
如果将网上的form表单的method属性设置为POST,那么当用户提交表单时,浏览器将使用POST方式提交表单内容,并把各个表单元素及数据作为HTTP消息的实体内容发送给服务器,而不是作为URI的参数传递.另外,在使用POST方式向服务器传递数据时,Content-Type消息头会自动设置为application/x-www-form-urlencoded,Content-Length消息头会自动设置为实体内容的长度.如下所示:
POST /javaForum HTTP/1.1
Host: www.itheima.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 17
name=lee&psd=hhxy
对于POST方式传递的请求信息,服务器端程序会采用与获取URI后面参数相同的方式获取表单各个字段的数据.
一般都使用POST方式发送请求,原因如下:
一.POST传输的数据大小无限制.由于GET请求方式是通过请求参数传递数据的,因此最多可传递1KB的数据,而POST请求方式是通过实体内容传递数据的,因此传递数据的大小没有限制.
二.POST方式比GET请求方式更安全.由于GET请求方式的参数信息都会在URL地址栏中明文显示,而POST请求方式传递的参数隐藏在实体内容中,用户是看不到的.
2.HTTP请求消息头
在HTTP请求消息中,在请求行之后便是若干请求消息头.请求消息头主要用于向服务器端传递附加信息,例如客户端可以接受的数据类型,压缩方法,语言以及发送请求的超链接所属页面的URL地址等信息,具体如下:
HOST: localhost:8080
Accept: image/gif,image/x-xbitmap, *
Referer: http://localhost:8080/itcast/
Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Content-Type: Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/4.0 (compatible;MSIE 7.0;Windows NT 5.1;GTB6.5;CIBA)
Connection: Keep-Alive
Cache-Control: no-Cache
请求头字段
头字段 | 说明 |
Accept | 设置接受的内容类型 |
Accept-Charset | 设置接受的字符编码 |
Accept-Encoding | 设置接受的数据编码格式,通常指某种压缩方式 |
Accept-Language | 设置接受的语言 |
Authorization | 设置HTTP身份验证的凭证 |
Proxy-Authorization | 服务器端向代理发送的验证信息 |
HOST | 指定资源所在的主机名和端口号 |
If-Match | 设置客户端的ETag,当时客户端ETag和服务器生成的ETag一致才执行,适用于更新自从上次更新之后没有改变的资源 |
If-Modified-Since | 设置更新时间,从更新时间到服务端接受请求这段时间内如果资源没有改变,允许服务端返回304 Not Modified |
Referer | 常被网站管理人员用于追踪网站的访问者是如何导航进入网站的.,可用于网站的防盗链 |
User-Agent | 用户代理,它用于指定浏览器或者其他客户端程序使用的操作系统及版本,浏览器及版本,浏览器渲染引擎,浏览器语言等,以便服务器针对不同类型的浏览器返回不同的内容 |
If-Range | 设置客户端ETag,如果和服务端接受请求生成的ETage相同,返回缺失的实体部分;否则返回整个新的实体 |
Range | 请求部分实体,设置请求实体的字节数范围 |
HTTP响应消息
当服务器收到浏览器的请求后,会回送响应消息给客户端.一个完整的响应消息主要包括状态行,响应消息头和实体内容.其中
1.HTTP响应状态行
HTTP响应状态行位于响应消息的第一行,它包括三个部分,分别是HTTP版本,一个表示成功或错误的整数代码(状态码)和对状态码进行描述的文本信息
HTTP/1.1 200 OK
版本 状态码 状态描述
状态码:第一个数字 五种取值
1**:表示请求已接收,需要继续处理
2**表示请求已成功被服务器接收,理解并接受
3**为完成请求,客户端需要进一步细化请求
4**客户端的请求有错误
5**服务器端出现错误
HTTP的状态码数量众多,下面是最常见的
状态码 | 说明 |
200 | 成功处理了请求.客户端请求成功,响应消息返回正常的请求结果 |
302 | 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。 (临时移动) |
304 | (未修改)自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容。 |
404 | 服务器找不到请求的网页。 |
500 | (服务器内部错误) 服务器遇到错误,无法完成请求。 |
HTTP响应消息头
HTTP的响应消息中,第一行为响应状态行,随后就是若干响应消息头.
服务器端通过响应消息头向客户端传递附加信息,包括服务程序名,被请求的资源需要的认证方式,客户端请求资源的最后修改时间,重定向地址等信息.
常用的响应消息头字段:
头字段 | 说明 |
Accept-Range | 用于说明服务器是否接受客户端使用Range请求头字段请求资源 |
Age | 用于支出当前网页文档可以在客户端或代理服务器中缓存的有效时间,设置值为一个以秒为单位的时间数 |
Etag | 用于向客户端传送带表实体内容特征的标记信息,这些标记信息成为实体标签,每个版本的资源的实体标签是不同的,通过实体标签可以判断在不同时间获得的统一资源路径下的实体内容是否相同 |
Location | 用于通知客户端获取请求文档的新地址,其值为一个使用绝对路径的URL地址 |
Server | 用于指定服务器软件产品的名称 |
Retry-After | 可以与503状态码配合使用,告诉客户端在什么时间可以重新发送请求,也可以与任何一个3**状态码配合使用,告诉客户端处理重定向的最小延时时间,Retry-After头字段的值可以是GMT格式的时间,也可以是一个秒为单位的时间数 |
Vary | 用于指定影响服务器所生成的相应内容的请求头字段名 |
WWW-Authenticate | 表明客户端请求实体应该使用的授权方案 |
Proxy-Authenticate | 设置访问代理的请求权限 用户信息验证 |
Refresh | 用于告诉浏览器自动刷新页面的时间,它的值是一个时间数 |
Content-Disposition | 如果服务器希望浏览器不直接处理响应的 |
JAVA 2017-11-26 视频讲Servlet