第九章 Internet/Intranet原理和应用简介 (2)
9.4 WWW技术
9.5 面向对象的程序设计语言 ----Java
WWW技术
WWW技术 (World Wide Web)是九十年代初从欧洲粒子物理研究中心 (CERN)发展起来的。是目前最为广泛使用的 Internet技术。
WWW技术的基础有两个方面,超文本传输协议
(HTTP:HyperText Transmission Protocol)和超文本标记语言 (HTML:HyperText Markup Language) 。
WWW也是一种客户机 /服务器技术,它的服务器称为
WWW服务器 (或 Web服务器 ),它的客户机称为浏览器
(Browser) 。
WWW服务器和浏览器之间通过 HTTP传递信息,信息则以 HTML格式 编写,浏览器则把 HTML信息显示在用户屏幕上。
超文本传输协议 (HTTP)
HTTP是用于 WWW客户机和服务器之间进行信息传输的协议。是一种请求响应类型的协议:
客户机向服务器发送请求,服务器对这个请求作出回答。
在 HTTP/0.9和 HTTP/1.0中,通常不同的请求使用不同的连接,HTTP/1.1引入持续连接作为默认的行为。
HTTP是无状态的协议,服务器在不同的请求之间不保留任何信息。
HTTP中的三类请求 —响应链 (1)
第一类,客户机直接向服务器发送请求。
客户机直接向服务器建立 TCP连接,默认端口是 80,然后在这个连接上发送请求。服务器监听连接上的请求,对于每一个请求服务器启动一个线程或进程来对他进行服务。一旦请求处理完毕,服务器把响应在这个连接上送回给原来的客户机。
客户机 服务器
T CP 端口 80
请求响应
HTTP中的三类请求 —响应链 (2)
第二类,通过代理服务器 (Proxy Server),实现客户机和服务器之间的请求-响应操作。
用户向代理服务器建立连接并发送请求,代理服务器再向 WWW服务器发送请求,WWW服务器向代理服务器回送响应,最后,代理向用户发回响应。
í?§?ú
WWW
·t÷
ó
ì ó|
′ú àí
·t÷
ó
ì ó|
HTTP中的三类请求 —响应链 (3)
第三类和第二类相似,也有一个中间节点,
成为隧道。
隧道只是一个用户向 WWW服务器发送请求以及从服务器接收响应的通道,它不作其他任何功能。隧道一般用于连接非 TCP/IP网络。
代理和隧道可以是多重的
HTTP/0.9
请求的格式为:
GET 文档名,html <CRLF>
不支持其它方法。
WWW服务器回送的是纯字符型的 HTML文本,
没有内容信息,MIME类型、没有多媒体信息等,一旦 WWW服务器把 HTML文档发送完毕,
这个连接就被释放。
HTTP/0.9是一个十分简单的协议,HTTP服务器(即 WWW服务器 )的实现只要很简单的几行内容即可。
HTTP/1.0
HTTP/1.0是对 HTTP/0.9的扩展,是一个非标准的 RFC建议 。
HTTP/1.0的 出发点是为了能在客户机和服务器之间交换更多的信息,从而成为实现分布式超媒体信息系统的基础。
HTTP/1.0对 HTTP/0.9的扩充 (1)
在请求和响应中引入了 MIME信息类型
在请求中,信息格式如下所示:
Full-Request = Method SP Request-URISP HTTP-Version
<CRLF>
*( General-Header |
Request-Header |
Entity-Header )<CRLF>
[ Entity-Body ]
HTTP/1.0对 HTTP/0.9的扩充 (2)
在请求和响应中引入了 MIME信息类型
服务器向客户发送响应,格式如下:
Full-Response = HTTP-Version SP Status-Code SP Reason-Phrase
<CRLF>
*( General-Header |
Response-Header |
Entity-Header )
<CRLF>
[ Entity-Body
HTTP/1.0对 HTTP/0.9的扩充 (3)
定义了新的方法:对 HTTP/0.9的方法继续支持,同时引入了 HEAD和 POST。
HEAD方法和 GET一样,不同点是 HEAD不允许 WWW服务器返回 Entity-Body信息。
POST方法为 WWW带来了交互功能,允许客户机向 WWW服务器发送信息,这样,
WWW可以用来输入信息。
HTTP/1.1
HTTP/1.1在以下几个方面对 HTTP/1.0作了改进:
新的请求方法
持续连接
大块编码
字节范围操作
内容协商
摘要鉴别
快存 (Caching)
HTTP/1.1(2)
新的请求方法
新增加了 PUT,DELETE,OPTIONS,TRACE方法。
PUT方法 允许用户向服务器发送资源,这样用户可以在本地创建页面,然后通过 PUT把这些页面存放在 WWW服务器上。
DELETE方法请求服务器把 request-URI所指定的资源删除。
OPTIONS方法用于询问服务器或服务器某特定资源的能力。
TRACE方法用于实现应用软件的调试,通过这个方法,客户机可以要求服务器把请求信息回送给客户机。
HTTP/1.1(3)
持续连接
从 HTTP/1.1开始,持续连接是一个默认行为。
一旦客户机和服务器建立了连接,这个连接一直保持,直到一方释放这个连接。
一旦建立连接,客户机和服务器在这个连接上可以进行多次请求-响应交换,而且客户机可以发送多个请求而不必等待服务器的响应。
HTTP/1.1(4)
大块编码
在持续连接的情况下,服务器和客户机不能通过连接的释放来表明信息的结尾。
使用大块编码,服务器或 CGI进程返回的信息虽然长度不定,但是把这个信息分割成固定长度的信息块。
大块信息包括大块信息的长度(字节数)和大块信息本身,最后如果全部信息传递完毕,
服务器发送一个 长度为 0的信息。
HTTP/1.1(5)
字节范围操作
客户机在发送字节范围操作时不仅有常规的信息,
还包涵了一个范围信息:要求返回的信息范围。
在一个请求中可以有多个范围信息,极大地提高了信息传输的效率。
字节范围操作是一个可选功能,目前已经有一些服务器能提供这个功能。
HTTP/1.1(6)
内容协商
第一种形式是服务器驱动协商,由服务器在客户机的请求下发起,服务器检查客户机发出的 Accept信息,然后向客户机发出最适合的信息。
第二种形式是客户机驱动协商,服务器向客户机提供有关表达形式的信息,然后客户机根据收到的信息,对将要显示的信息作出适当的处理。
第三种内容协商方法是透明协商,在这种方案里,
有一个中间服务器,这个服务器往往同时实现服务器驱动和客户机驱动内容协商。
HTTP/1.1(7)
摘要鉴别
在摘要鉴别中,有一个秘密口令,这个秘密口令由服务器和客户机双方共享。
服务器和客户机对秘密口令(再加几个其他值)使用 MD5[2]计算出一个摘要值,这个摘要值在网络上传送,客户机可以计算这个摘要值,服务器收到以后可以进行检查。
安全性并不十分高,仅仅是基本鉴别方法的一种替换。
HTTP/1.1(8)
快存
客户机把接收的响应保存在本地硬盘,如果下一次请求相同的资源,客户机不必把请求发送给服务器,
直接从本地的硬盘中把响应取出即可。
HTTP/1.1描述了什么是可以快存的,什么是不可以的。
服务器可以使用五类指示:可快存的、不可快存的、
快存保留时间多少、禁止超时服务、禁止变换。
客户机也可以控制快存,有三类基本指示:不可快存、快存时间和禁止发出新请求。
超文本标记语言
HTML 3.2是 W3C(World Wide Web Consortium)
的 HTML规范,通常以文件形式存储在 Web服务器上,因此常常把这样的文件称为 HTML文件。
HTML文件由一系列称为标记的元素组成,标记用 <>框定,大部分元素有起始标记和结束标记,部分标记只有起始标记。所有 HTML文件中的各种元素均有标记表示。
一个典型的 HTML文件
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD>
<TITLE>
{此处是 HTML文件的标题 }
</TITLE>
</HEAD>
<BODY>
{此处是 HTML文件的主题内容部分 }
</BODY>
</HTML>
HTML文件的结构 (1)
HTML文件以 <!DOCTYPE>开始,随后有两部分组成,文件头部和文件体部。
文件头部
文件头部用 <HEAD>和 </HEAD>框定
TITLE:定义 HTML文件的标题,通常是必需的。
ISINDEX:用于简单的查询。
BASE:定义基 URL,用于解析相对 URL。
META:用于提供 meta信息。
HTML文件的结构 (2)
文件体部
文件体部由 <BODY>和 </BODY>框定。
文件体部是 HTML文档的主要部分,Internet
上 Web信息内容主要通过文件体部提供。
一个 <BODY>标记的例子:
<body bgcolor=white text=black link=red
vlink=maroon alink=fuchsia>
HTML文件的结构 (3)
文本格式
包括标题 (Heading)格式,段落等。
标题格式有 H1,H2,H3,H4,H 5,H6等 6
种格式,一般情况下,H1字体最大,表示最重要的信息,一般是一个页面的标题,H2用来表示次重要的信息,依次类推。
大部分信息是通过段落来表达的,段落标记是,<P>和 </P> 。
HTML文件的结构 (4)
列表
HTML中有三种列表:无序列表 (Unordered List)、有序列表 (Ordered List)和定义列表 (Definition List)。
无序列表使用 <UL>标记,每个列表项都以 <LI>开头,无序列表可以有一个列表标题,用 <LH>标记。
有序列表与无序列表相似,但是每个列表项在显示时有一个序号,有序列表用 <OL>标记 。
定义列表相当于一种词汇表 (glossary),是一种用来定义术语的特殊列表,定义列表的表项有两个部分:
被定义的术语和术语的定义。定义列表的标记是
<DL>和 </DL>,被定义的术语标记是 <DT>,术语的定义标记是 <DD> 。
HTML文件的结构 (5)
预排格式
以文本编辑时定义的格式显示文本信息,所用标记是 <pre>和 </pre> 。
字型元素
控制所显示字型的元素。
Address
用来表示某种地址信息,如联系人等。
HTML文件的结构 (6)
表格
由表格名称,表格行等组成。
表格标记为 <TABLE>和 </TABLE>
表格名称用 <CAPTION>和 </CAPTION>标记。
表格行用 <TR>标记,首行内的表格单元可以使用 <TH>标记,其它行内表格单元使用
<TD>标记。
HTML文件的结构 (7)
锚点
锚点定义了 HTML文档中的超文本引用,利用锚点可以将 HTML文档 (也称页面 )中的某个热点链接到其它页面、同一页面中的其它部分、电子邮件,ftp
站点等等,锚点还可以用来定义文档的位置,以供其他锚点对它的引用。
锚点的标记是 <A>和 </A>,典型的锚点如下所示:
<A HREF=http://www.fudan.edu.cn/introduction.html>复旦大学简介
</A>
HTML文件的结构 (8)
内插图片
是 HTML处理多媒体信息的主要方法。
基本格式:
<IMG SRC=“图片的 URL” alt=“图片的文字”
align=“对齐方式”
width=“图片的宽度” height=“图片的高度”
border=“图片的边框”
hspace=“图片左右两边的留空” vspace=“图片上下两边的留空” >
表单 (Form)和公共网 关 接口
(CGI)
在表单的单元内输入信息,
然后按相应的按钮。
Web服务器接受信息,把信息传递给指定的程序并启动这个程序,这个程序称为 CGI
( Common Gateway
Interface) 。
CGI程序经过处理,把返回结果传递给 Web服务器。
Web服务器把返回信息传递给客户机浏览器,由浏览器显示这些信息 。
C l e a rSu b m i t
姓名地址城市请输入:
W e b 服务器
CGI 程序浏览器
1
2 3
4
表单表单
表单有四种基本元素
ACTION
METHOD
ENCTYPE
SCRIPT
表单使用 <form>和 </form>来标记。
表单有三类输入域
INPUT
SELECT
TEXTAREA
CGI
CGI程序是 Web服务器上的一个软件,可以用各种语言编写。
目前使用最多的 CGI编程语言有 perl,
asp,php等。
如果要求通过 Web来查询某个数据库,
通常使用的方法是编制 CGI程序来实现对数据库的访问,从而实现数据的动态查询(早期的 Web都是静态数据)。
Java的特性
简单
面向对象
面向网络
健壮性
安全性
硬件平台独立性和可移植性
多线程
解释执行
Java小程序 (Applet)
丰富的类库
Java程序设计
Java程序由一系列的类 (Class)组成,类中有一系列的方法 (Method),最基本的 Java程序有一个类和一个方法,这个方法必须以 main命名。如下所示:
class HelloWorldApp{ // 应用程序
public static void main(String args[]){ // main 方法
System.out.println(“Hello World!”); // 显示 Hello World!
} // main方法定义结束
} // 应用程序结束
Java语言数据类型数据类型简单数据类型 复杂数据类型数值类型 字符类型 布尔类型整数类型 浮点数类型
(cha r) ( boolean)
byt e
short
i nt
l ong
fl oat
doubl e
类 接口类型
class inter fac e
数组类型
Java语言状态转换图新线程可运行 不可运行结束
n e w T h re a d ()
s t o p () s t o p ()
ru n () 退出或 s t o p ()
y i e l d ()
Applet的设计和实现
通过内置在 Web浏览器中的 Java虚拟机来解释执行。
浏览器把制定的 Applet下载到浏览器,由客户端运行。
需要对 Applet的运行环境提供安全的运行机制。
一个简单的 Client/Server程序 (1)
客户机软件接受键盘的输入(以 bye为结束标志),把接受到的输入信息发送到服务器软件,服务器回送从键盘上接收到的信息,客户机软件接收服务器回送的信息,并且在显示器上显示,整个过程一直循环,直到客户机从键盘上接受到 bye、服务器接收到 bye为止。
一个简单的 Client/Server程序 (2)
客户机程序,
import java.io.*;
import java.net.*;
public class talkClient{
public static void main(String arg[]){
Socket socket=new Socket(“kps”,1000);
OutStream os=socket.getOutputStream();
DataInputStream is=new
DataInputStream(socket.getInputStream());
String readline;
continued…
一个简单的 Client/Server程序 (3)
While((readline=System.in.readLine())!=”bye”){
os.println(readline);
System.out.println(“Client:”+readline);
System.out.println(“Server:”+is.readLine());
}
os.close();
is.close();
socket.close();
}
}
一个简单的 Client/Server程序 (4)
服务器程序:
import java.io.*;
import java.net.*;
public class talkServer{
public static void main(String args[]){
try{
ServerSocket server=null;
Try{
Server=new ServerSocket(4700);
}catch(Exception e){
System.out.println(“Can not listen to:”+e);
}
Socket socket=null;
continued…,
一个简单的 Client/Server程序 (5)
Try{
Socket=server.accept();
}catche(Exception e){
System.out.println(“Error:”+e);
}
String line;
DataInputStream is=new DataInputStream(new
BufferedInputStream(socket.getInputStream()));
PrintStream os=new PrintStream(new
BufferedOutputStream(socket.getOutputStream()));
DataInputStream sis=new DataInputStream(new
BufferedInputStream(System.in));
System.out.println(“Client:”+is.readLine());
line=sin.readLine();
continued…
一个简单的 Client/Server程序 (6)
while (!line.equals(“bye”)){
os.println(line);
os.flush();
System.out.println(“Server:”+line);
System.out.println(“Client:”+is.readLine());
Line=sin.readLine();
}
is.cloes();
os.close();
socket.close();
server.close();
}catch(Exception e){
System.out.println(“Error:”+e);
}
}
}
习题
9.4
9.5
9.6
9.12