153
第9第 第第第第第第 9 1 HTML 第第 9 2 ASP 第第第第 9 3 JAVA 第第第第第第第第第 9 4 JSP 第第第第 9 5 第第 9

第 9 章 网络编程技术

  • Upload
    tasha

  • View
    139

  • Download
    0

Embed Size (px)

DESCRIPTION

第 9 章 网络编程技术. 9 .1 HTML 基础 9 .2 ASP 编程技术 9 .3 JAVA 语言的网络程序设计 9 .4 JSP 编程技术 9 . 5 习题 9. 9 . 1 HTML 基础 9 . 1 . 1 HTML 语言基础 - PowerPoint PPT Presentation

Citation preview

Page 1: 第 9 章   网络编程技术

第 9章 网络编程技术

9 . 1 HTML 基础 9 . 2 ASP 编程技术 9 . 3 JAVA 语言的网络程序设计 9 . 4 JSP 编程技术 9 . 5 习题 9

Page 2: 第 9 章   网络编程技术

9 . 1 HTML 基础9 . 1 . 1 HTML 语言基础 HTML(Hyper Text Markup Language) 超文本标记语

言 是 网 页 设 计 的 基 础 , 源 于 标 准 通 用 标 志 语 言SGML(Standard Markup Language) 。 利 用 HTML语言编写的 Web 网页,实质上就是纯文本文件,可用任何文本编辑器阅读和编辑。 HTML 文档通过标记( TAG )和属性对超文本的语义进行描述,这些TAG 用于描述网页内容在浏览器中的显示方式,产生所需的各种效果。 HTML 作为一种标记语言,用来创建与系统平台无关的文档,即任何可以运行浏览器的计算机都能阅读并显示 HTML 。

Page 3: 第 9 章   网络编程技术

• HTML 有以下用途:• · 用标题、文本、表格、列表、照片等发布在线信息。• · 通过超文本链接,在鼠标点击时取得在线信息。• · 设计表格与远程服务通讯,查询信息、进行预订、订购产

品等。• · 把样式表、视频剪辑、音频剪辑和其它应用程序包含在文

档中。• 浏览器能够阅读的 HTML 文本包括如下两种类型的信息:• · 标记信息:该部分信息用来控制文档内部的显示方式,并

允许 WEB 设计人员指定与其他文档的连接。• · 内容信息:该部分信息就是浏览器显示的文本、图形和声

音信息,简称为文件块。• HTML 文档是由标记和文件块组成的。下面简单介绍 HTML

的使用。

Page 4: 第 9 章   网络编程技术

• 1. HTML 元素• HTML 文件所有的控制语句称为标记 (TAG) ,元素 (Element) 由标记和文件块组成。标记全部放在一对尖括号之中,如“ <…>” 的形式。在 HTML中,典型的元素由三部分组成:起始标记、文件块和结束标记。格式为:

• < 标记 > 受影响的文本 </ 标记 > • 元素的起始标记写作 <ElementName> ,其中

ElementName 为此元素的名称。元素结束标记为在元素名称前面加一斜杠,形如 </ElementName> 。例如:

• <head>HTML 的基本语法 </head>• 对标记的使用有以下一些约定:

Page 5: 第 9 章   网络编程技术

• ( 1 )大多数标记都是成对出现的,称为“双标记”,它由“起始标记”和“结束标记”两部分构成,而且必须成对使用。

• 例如: <TR>和 </TR> 为表的行标记,用于定义数据行。 <TD>和 </TD> 为表的数据标记,用于定义每行内单元格。

• 也有少部分标记无尾标记,称为“单标记”或“空标记”。它们只需要单独使用就能完整地表达意思,最常见的单标签是 <BR> 表示强迫换行。

• ( 2 )标记的字母可以大写,也可以小写,二者作用完全一样。因此说, <head>与 <HEAD> 效果是一样的。

• ( 3 )标记可以联合使用,也可以嵌套。

Page 6: 第 9 章   网络编程技术

• 2. HTML 元素的属性• HTML 元素具有相关属性,可对这些属性赋予适当的值,制作各种效果。一个元素可以具有多个属性,其属性名和属性值都必须出现在该起始标记结束符之前,彼此以空格隔开,各属性的顺序可以是任意的,语法格式为:

• < 标记 属性 1 属性 2 属性 3 …> …… </ 标记〉• 属性值使用英文双引号或单引号括起来。当使用双引号时,属性值内可使用单引号,反之亦然。某些情况下, HTML 中也可以不使用引号指明属性值。

• 例如,下面的代码将 H1 元素的 align 属性设为center

• <H1 align="center"></H1>

Page 7: 第 9 章   网络编程技术

• 各属性之间无先后次序,属性也可省略 ( 即取默认值 ) 。

• 应该注意,属性名也是不区分大小写的,同时属性值中只能包含字母、数字、连字符或者句点。

• 3. HTML 文件的注释• HTML 文件注释的基本格式如下:• <!-- 此处为 HTML 文件的注释 -->

Page 8: 第 9 章   网络编程技术

• 4. HTML 文件的基本结构• 所有的 HTML 文件的结构都可以划分成两个基本

部分:文件头 <HEAD> 和文件主体 <BODY> 它们可由三对标记构成:

• <HTML>• <HEAD>• 头部信息• </HEAD>• <BODY>• 文档主体,正文部分• </BODY>• </HTML>

Page 9: 第 9 章   网络编程技术

• 1 )文挡标记 <HTML>• HTML 文件以 <HTML>开头,以 </HTML> 结尾。格式为:• <HTML> HTML 文档内容 </HTML>• <HTML>处于文档的最前面,表示 HTML 文档的开始,

即浏览器从 <HTML>开始解释,直到遇到 </HTML> 为止。• 2 )文件头标记 <HEAD>• HTML 文件头标记的格式为:• <HEAD> 头部信息 </HEAD>• 本标记在 HTML 文件中不是必须的,如果没有,浏览器也会照常解读文件。

• 文件头部在 <HTML> 之后,在开始标记 <HEAD> 和结束标记 </ HEAD >间定义。其内容可以是标题,文本文件地址、创作信息等网页信息说明,对应于相应的标记有:标题 <TITLE> 、基地址 <BASE> 、下一个标识 <NEXTID> 、索引文件 <INDEX> 、相关资料 <META> 。

Page 10: 第 9 章   网络编程技术

• ①标题 (Title) :给出文件的总标题,格式如下:• <TITLE> 标题 </TITLE>• 一对 <TITLE> 标签用于显示 Web 页面的总标题。通常

Web 浏览器把总标题显示在一个特殊的区域内。例如Netscape 把总标题显示在窗口顶端标题栏内。

• ②基地址 (BASE) :该元素用来指定涉及整个 HTML 文件各部分链接路径的起点。如果需要,必须在文件头部说明。例如: (BASEHREF= http://www.cs.edu.cn/)

• ③下一个标识 (NEXTID)• 当文本编辑器要给带有特定编号 (ID) 的页面进行标记时,根据 NEXTID 元素给出下一个页的 ID 的值,表示下一个标识,这里的属性“ N=”向编辑器表明自己的编号。

• ④索引文件 (INDEX) :说明该文件是用户可以检索的索引文件。它告诉浏览器该文件可以检索。但服务器必须提供检索功能,否则,不起作用。

Page 11: 第 9 章   网络编程技术

·⑤相关资料元素 (META) :该元素用来说明与文本有关的资料信息,包括资料名称 (NAME) 和内容说明 (CONTENT) 两个字段。

• 大部分头部元素可以省略。

• 例 9.1 :设计网页。标题为:E xample;网页显示文字内容为:没有使用〈 head〉标记,而单独使用〈 title〉标记仍起作用。

• <html>• <title>• E xample • </title>• <body>

Page 12: 第 9 章   网络编程技术

•  没有使用 &lt;head&gt; 标记,而单独使用&lt;title&gt; 标记仍起作用

• </body>• </html>• 例题中用到几个特殊的符号“ &lt;”和“ &g

t;”,它们在网页中分别显示“ ”〈 和“ ”〉 。因为浏览器解释 HTML 文件时,是根据“ ”〈 与“ ”〉 来识别标记的,然后再确定这两个符号中的内容是否为 HTML 文件标记。若是,则按其规则解读。所以,要在网页中显示“ ”〈 和“ ”〉 ,就要使用特殊字符。其他常用的特殊符号见表⒐ 1 所示

Page 13: 第 9 章   网络编程技术

表⒐1特殊替换字符

特殊符号 所替代的

字符

说明

& 特殊字符的开始

; 特殊组符的结束

Lt < 小于号

Gt > 大于号

Quot “ 双引号

Page 14: 第 9 章   网络编程技术

单击此处编辑母版标题样式

• 单击此处编辑母版副标题样式

• 表 9.1 特殊替换字符

特殊符号 所替代的字符 说明

& 特殊字符的开始

; 特殊组符的结束

Lt < 小于号

  Gt  > 大于号

Quot " 双引号

Page 15: 第 9 章   网络编程技术

3 )文件主体标记 <BODY>

• 文件主体标记一般不省略,位于头部之后,它是 HTML 文档的最主要部分,超文本的其他语句几乎都是写在主体部分中。主体元素还可以包含各种参数部分。格式如下:

• < BODY >background="文件名" text="颜色值" link="颜色值" vlink="颜色值" alink="颜色值"

• ......• </ BODY >

• 〈 BODY〉的属性定义为 BACKGROUND、 BGCOLOR、 TEXT、 LINK、 VLINK和 ALINK ,用来设定背景图象、背景颜色、前台文字颜色及超文本连接颜色。 LINK 设定未阅读过的超文本连接颜色 ,缺省值是蓝色。 VLINK 设定阅读过的超文本连接颜色 ,缺省值是紫色 ,ALINK 设定动作中的超文本连接颜色 ,缺省值是紫色。

Page 16: 第 9 章   网络编程技术

不设置时取相应属性的默认值。颜色可以用相应英文单词或以“#”引导的一个十六进制数代码来表示,见表 9.2 所示

表 9.2 颜色代码表 颜色名 颜色英文名 十六进制代码 颜色名 颜色英文名 十六进制代码黑色 Black #000000 粉红色 Pink #FFC0CB

蓝色 Blue #0000FF 红色 Red #FF0000

棕色 Brown #A52A2A 白色 White #FFFFFF

青色 Cyan #00FFFF 黄绿色 Yellow #FFFF00

灰色 Gray #808080 深红色 Crimson #CD061F

绿色 Green #008000 黄绿色 Greenyellow #0B6FFF

乳白色 Ivory #FFFFF0 水蓝色 Dodgerblue #0B6EFF

桔黄色 Orange #FFA500 淡紫色 Lavender #DBDBF8

Page 17: 第 9 章   网络编程技术

• 4) 设置标题格式 <Hn>• 在页面中,标题是一段文字内容的核心,可以通过

设置字体大小不同的标题,为文章增加条理。与用<TITLE> ... </TITLE> 定义的网页标题不同,标题格式显示在浏览器窗口内,而不是显示在浏览器的标题栏中中。格式为:

• <Hn align= 对齐方式 > 标题  </Hn>• 属性 align 用来设置文字的对齐方式: left(左对齐)、 center(居中)、 right(右对齐)。

• 属性 n 用来指定标题文字的大小。 N取 1到 6 的整数值,取 1 时文字最大,缺省时是 <h6> 。在一个标题行中无法使用大小不同的字体。

Page 18: 第 9 章   网络编程技术

• 5)强制换行标记 <BR>• 格式为: 文字 <BR>• 浏览器解释时,从该处换行。这是一个单标记。• 6)设置文字格式• ① 标记 <FONT>。 <FONT> 标记可设定文字的字体、字号和颜色。格式为:

• <font size= 数字 face= 字体名 color=颜色 > 被设置的文字  </font>

• size 用来设置文字的大小。数字的取值从1~7, size取 1 时最小,取 7 时最大。

• face 用来设置文字的字体。字体名可以为:宋体、楷体、黑体等汉字字体;也可以为 Time New Roman 等约50

Page 19: 第 9 章   网络编程技术

• 种字体。这里的字体名其实就是在W ord 的“字体”工具栏中显示的字体名字。

• color 用来设置文字的颜色,颜色的取值与<BODY text=颜色 > 的取值方法相同。当 <body>与 <font> 标记同时对文字颜色进行定义时, <font> 标记优先。

• ②设置字型:字型就是文字的风格,如加粗、斜体、带下划线、上标、下标等。字型的控制标记见表9.3 所示。

Page 20: 第 9 章   网络编程技术

标记格式 字体结果 标记格式 字体结果<B> 文字 </B> 黑体 <I> 文字 </I> 斜体<u> 文字 </u> 带下划线 <tt> 文字 </tt> 标准打印机字体

<strick> 文 字 </strick>

带删除线 <sub> 文字 </sub>

下标

<sup> 文字 </sup> 上标 <big> 文 字 </big>

大字体文本

<small> 文 字 </small>

小字体文本

表 9.3 设置各种字型的标记

Page 21: 第 9 章   网络编程技术

• 例 9.2 :在网页上设置文字格式• <html>

• <head>

• <title> 设置文字格式 </title>

• </head>

• <body>

• <h1>今天天气真好 </h1>

• <font size=3 face=黑体 color=red> 显示红色黑体 3号字 </font><br>

• 正常字显示 <u>带下划线显示 </u><br>

• </body>

• </html>

• 7 )排 版

Page 22: 第 9 章   网络编程技术

• 排版使用段落的成对标记 <P>和 </P>, <P>和 </P> 之间包含的一段文字为一个段落。标记 <P> 的参数 align 表示整个段落的对齐方式, 与标题标记 <Hn>的 align 格式相同,align 的可选参数有 left、 center和 right ,分别为左、中和右对齐。中间对齐也可用成对标记 <Center> 完成。

• 例如: • HTML 语句 页面效果• <P align=left> 左对齐的段落 </P> 左对齐的段落• <P align=right> 右对齐 <br>右对齐的段落 </P> 右对齐

的段落• <P align=center> 中间对齐的段落 </P> 中间对齐的段落<Center> 中间对齐的段落 2</Center> 中间对齐的段落2

Page 23: 第 9 章   网络编程技术

• 行缩进引用标记 <Blockquote> 来表示缩进。一对标记中的文字将向右缩进一段。 例如:

• HTML 语句 页面效果• 第一层 第一层

<blockquote> 第二层 第二层<blockquote>第三层 第三层</blockquote>第二层 第二层</blockquote>第一层 第一层

• 下面是一个最简单的 Homepage 源文件,页面效果参见图 9.1 :

Page 24: 第 9 章   网络编程技术

• 例 9.3 <HTML>• <HEAD>• <TITLE> 简单的主页实例 </TITLE>• </HEAD>• <! 以上是文件头部 >• <BODY>• <H1>欢迎光临 HTML世界。 </H1>• html 简单示例• 其乐无穷 ! <P>• 欢迎学习使用 HTML 编制编制出自己的主

页。 <BR>• 祝你成功!• </BODY>• <!以上是主体部分 >• </HTML>• <! 这是文件的结束标签 >

Page 25: 第 9 章   网络编程技术

图 9.1 HTML主页

Page 26: 第 9 章   网络编程技术

• 5. 加入超链接• 通过前面的介绍就可以创建简单的 HTML 文档,但当文本较复杂时常常需将一份文档与另一份文档连接起来。 HTML 的主要特性之一就是链接。要在Web 页面中加入超链接,可按以下进行:

• (1)开始标记 <A>;• (2) 要链接的目标文档名; • (3) 要链接的文本(超文本)• (4) 结束标记 </A> 。 • 要创建完整的链接标记,必须在开始标记 <A> 中

设置超文本引用 (HREF) 属性。 HREF 描 述了点击该链结后文档跳转的目的地。例如要创建一个指向文档间的链接,可以使用以下链接

Page 27: 第 9 章   网络编程技术

• <A HREF= “http://www.microsoft.com”>微软公司 </A>

• 要创建超链接,必须指明链接目标文件的存储位置,如果目标文档与当前文档存储在同一计算机内,可以使用绝对(完全的)地址路径或相对地址路径指明该文件的位置。如果使用绝对地址,必须在超链接标记内写明目标文档的完整路径,绝对寻址方式的主要问题是移动文件困难,因为每次移动文档的存储位置后,都必须修正每一条绝对路径;而使用相对寻址可以简化移动文件的过程。使用相对寻址方式,需要指明该文档相对与其他文档的位置。表9.4 列出了相对寻址和绝对寻址的不同点。

Page 28: 第 9 章   网络编程技术

表 9.4 相对寻址和绝对寻址的不同点 路径名 寻址方式和绝对寻址的不同点index.html 相对寻址。该超连接目标文件与源 HTML 文件在同一目录下

temp/index.html 相对寻址。该超连接目标文件放在当前目录的 temp 子目录下?index.html 相对寻址。该超连接目标文件放在当前目录的上一级目录中 c:\

temp\index.html 绝对寻址。该超连接目标文件放在 c 盘驱动器的 temp 目录下

Page 29: 第 9 章   网络编程技术

• 在大多数情况下,应该使用相对寻址。相对寻址很容易把全部文件从一个目录拷贝到另一个目录,从一个驱动器拷贝到另一个驱动器,或从一个平台拷贝到另一个平台。

• HTML 允许定义文档内部的链接, 例如 <A name=firstanchor></A> Anchor1 说 明 了 在“ Anchor 1” 前有一个跳转点。 用 <A href="#firstanchor"> Goto Anchor1 </a> 则可跳转至 Anchor1处。

• 6.图象及动画的嵌入• 1 )图象的嵌入• 图象嵌入的标记为 <Img>, 其属性为

Src, Alt, Align,Width, Height, Border , HSpace和 VSpace 。

• Src 指定嵌入图象的图象文件名。例如 src=" images/Red_flag.gif"

• Alt 指定图象文件尚未装入时,代替图象显示的文字。

Page 30: 第 9 章   网络编程技术

• 例如 < img src=" images/ blue_arrow.gif" alt="→" > 该语句表示将在图象尚未装入时显示一个箭头。

• Width和 Height 分别指定图象的宽和高。 • Border 指定图象边框的宽度。• HSpace和 VSpace 分别指定图象外水平和竖直留空的宽度。• 2) 动画的嵌入• 浏览器支持 GIF 格式的动画文件。只需生成这种动画文件,

和图象文件完全一样, 嵌入 HTML 即可。可以用 Gif Constructor工具来生成这种动画文件。

• 7. 列表• 列表适合于罗列有关信息内容。列表项可以是段落、有格

式文本或超媒体连接。列表可以嵌套 , 显示时按层次缩进。列表可分为三种 :枚举式、编号式、定义式。

Page 31: 第 9 章   网络编程技术

• 1 )枚举式列表• 枚举式列表使用成对标记〈 UL〉和一个以上的〈 LI〉语

句来定义。列表项目以数字、字母顺序排列。每个〈 LI〉标示一项列表项。可以用 TYPE 属性定义 UL和 LI 元素的风格。显示时 , 每个〈 LI〉定义的项目前均有 3个黑圆点作前导记号 。 例 :

• 〈 UL〉• 〈 LI〉 ...first list item• 〈 LI〉 ...second list item• ...• 〈 /UL〉• 2 )编号式列表• 编号式列表使用成对标记 〈 OL〉和一个以上的 〈 LI〉

语句来定义。显示时每个〈 LI〉定义的项目前均自动加有序列编号。例如 :

• 〈 OL〉• 〈 LI〉 ...first list item

Page 32: 第 9 章   网络编程技术

• 〈 LI〉 ...second list item• ...• 〈 /OL〉 • 3 )定义式列表• 定义式列表使用成对标记〈 DL〉来定义,该列表分为两层。

使用标记 <DT>和〈 DD〉来定义层次。 <DT> 标记标示被定义的目的标题;〈 DD〉标记标示定义内容。显示时每个〈 DT〉定义的列表项的下面,产生一段由〈 DD〉定义的说明文字。例如 :

• 〈 DL〉• 〈 DT〉 term name• 〈 DD〉 term definition• ...• 〈 /DL〉• 8. 表格

Page 33: 第 9 章   网络编程技术

• 1 )表格的属性• 表格是由成对标记 <table> 来标识的。它的属性有

对齐方式 align 、表格宽度 width 、表格边界宽度border 、表格中元素分隔线宽度 cellspacing 和元素与分隔线之间的距离 cellpadding 。属性 align 的参数为 left、 right和 center;属性 width 的参数为 n和 n% 、属性 border、 cellspacing和cellpadding 的参数均为 n 。

• 表格宽度 width 是指该表格的宽度,若是数字 n则表示表格绝对宽度为 n个象素;而若是百分数 n% ,指表格的宽度为其所在窗口宽度的百分之 n ,例如:百分之 50 。表格边界宽度 border 指表格的外部边界的宽度。

Page 34: 第 9 章   网络编程技术

• 2 )建立表格• 建立表格的标记为成对标记 <tr> 、 <th> 和

<td> 。 标记 <tr> 说明表格的一行; <th> 说明表格的列标题; <td> 说明表格的元素。其实列标题也是表格的元素,只是以标题字体显示 而已。

• 表格行 <tr> 的属性有 align和 valign 。属性 valign说明了表格行的元素的垂直对齐情况。属性 valign的参数有 top、 bottom、middle和 baseline 。这里 top、 bottom和middle 分别指的是元素顶对齐、底对齐、中间对齐,而 baseline 指各元素按其第一行字的底线对齐。

• 9.可点图• 1 )可点图类型

Page 35: 第 9 章   网络编程技术

• 可点图类型有两种,服务器端图和客户端图。服务器端图在作为链接的图象成对标记 <img> 中加入参数 ISMap 即可。例如

• <a href="http://www.npn.edu.cn"> <img src="images/campus.gif" ISMap> </a>

•   建好图区域并命名后, 还需在图象标记 <img>中引用参数 usemap=#client 。

• 例如 <img src="images/board.gif" usemap=#client> 。

• 2 )建立图区域的工具• 在建立图区域时,特别是图象较复杂时,大量的坐

标容易出错。可使用网页制作工具来建立图区域。例如 FrontPage 等。

Page 36: 第 9 章   网络编程技术

• 10.表单 (FORM)

• ( 1 )表单的基本属性• 表单使用成对标记 <FORM >和 </FORM> 来定义,属性包括 ACTION 、 METHOD 、 ENCTYPE 。动作属性action 为递送信息的表单指定的 URL 地址,

• 例如: <FORM NAME="F1 ACTION"=http://www.pnp.edu.cn/asp/mm.asp>

• 方式属性 METHOD 指明填表信息传输的方式,如何将表单提交给服务器,有两种标准方式可选 :GET(获得)和 POST(邮递),默认方式为 GET。 GET将输入的信息转至 ACTION 所指定的 URL位置作进一步处理 ,将表单中的参数信息合成在 URL 中,问号开头,使用“ &” 号分割参数。

• 例如,一个表单有一个 http://www.pnp.edu.cn/asp/mm.asp

Page 37: 第 9 章   网络编程技术

• 的 ACTION ,并有 NAME为 Userfirst Name 的字段,在该字段中输入的文件名为 Wenjian,则该表单将链接到

• http://www.pnp.edu.cn/asp/mm.asp? Userfirst Name=Wenjian 的位置上。在服务器端的 mm.asp 程序将截取问号之后的文本作为作为表单内容处理。

• POST 可将无限的信息发往 ACTION 所指定的文件储存。其将传递的参数信息放置在 http协议的 request 部分,在地址栏看不到表单的信息。两种方法各有优缺点。

• 表单 FORM 的常用控件有输入( INPUT )、列表框( SELECT )和文本框( TEXTAREA )

• 2 )输入控件• 输入标记 INPUT 包含很多类型:参见图 9.2

Page 38: 第 9 章   网络编程技术

text

******

Submi t

文 本 输 入( text)

密 码 输 入( password)

多 选 框( checkbox)

单 选 框( radio)

提 交 按 钮( submit)

复 位 按 钮( resest)

普 通 按 钮( button)  

图 画( image)

隐 藏 项( hidden ) ? ? ?

Reset

图 9.2 标记 INPUT 的输入类型

Page 39: 第 9 章   网络编程技术

• 每个标记 <input>均包含两个属性 TYPE和 NAME ,属性type 定义了输入的类型,例如: TYPE=text/password/checkbox/radio/submit/reset/button/image/hidden;属性NAME 定义了该输入的名称,以便于接收信息的程序分辨各个参数,以及用于 Javascript 的引用;大多数包含VALUE 属性。

• ①文本输入: value=" a string"说明了文本的初值。 maxlength = n 说明了文本的最大长度。 size =n 说明文本条的长度为 n个字符。如果输入的文本长度大于文本条的长度,则文本自动滚动。

• ②密码输入:同文本输入,但输入的文字皆显示为“ *” 。• ③多选框:参数 value=" a string"指明该多选框在提交

时的值。参数 checked 说明该多选框初始为选择态:

Page 40: 第 9 章   网络编程技术

• 多选框提交时若被选择,则以name=value( value缺省为" on",即缺省为name=on )的方式提交,否则被忽略,不提交。

• ④单选框:基本同多选框。但是单选框需要分组, name相同的分为一组,提交时以 name=value(选中单选框的 value )的方式提交。

• ⑤提交按钮: value = " a string"说 明 按 钮 的 标 题。一个表单中可有若干个提交按钮。当某一个按下后,该填表中的信息将提交给 Form中 Action参数指定的文件(程序),若 它有 name 参数,它将参与提交: name = value;否则,被忽略。

• ⑥复位按钮: value =" a string"说明按钮的标题。复位按钮不参与提交。

• ⑦按 钮: value =" a string"说明了按钮的标题。

Page 41: 第 9 章   网络编程技术

• ⑧隐藏项:参数为 name和 value 。不在屏幕上显示出来,通常与 Javascript 或动态生成 HTML 有关。可以利用Javascript修改它的 value;动态生成 HTML 的程序,也可以保存某些参数。

• ⑨图画:参数为 align src和 name 。图画类似于一个submit按钮,只是显示的是一个图画,在提交时鼠标点击的位置也以 "name.x=n&name.y=n" 的方式一并提交服务器。

• 例如:生成文本输入框,宽为 20个字符,字符数大于 20 时,出现滚动条。

• <INPUT NAME=" a" TYPE=" text" SIZE=" 20"MAXLENGTH=" 50" >

• 3 )列表框• 列表框使用成对标记 <SELECT> 来定义。属性 NAME 定

义了列表框的名字,如同多选框的一样。

Page 42: 第 9 章   网络编程技术

• 在 < SELECT>和 </SELECT> 之间,成对标记 <OPTION>定义了列表框的项。

• 它的属性 value=" value1"定义了当表单提交时,若列表框中该项被选中,提交的信息为 selectname =" value1",selectname 为列表框的名字。在 <OPTION>与 </OPTION> 之间的文字即为该项在列表框中显示的文字。例如

• < OPTION VALUE=" PNP" > 学生成绩查询 </ OPTION >

• < OPTION > 的另一属性 SELECTED 指定列表框初始选择该项。又例如

• < OPTION VALUE =" PNP" SELECTED>学生成绩查询 </ OPTION >

• 以上是 HTML 的部分内容,限于篇幅,不再详述。下面来看看动态的 HTML ,即 DHTML 。

Page 43: 第 9 章   网络编程技术

• 9. 1. 2 DHTML 语言基础 • 动态超文本标记语言( DHTML )是在保持与现有

HTML兼容的基础上扩展出来的几种新功能的总称。它将 HTML 标志与脚本语言组合起来,进行定位、利用 CSS 等操作文档的动态外观。其主要功能如下:

• ( 1 )定义分层结构,显示 Web 文档的所有部分;• ( 2 )通过增加和删除内容来修改结构• ( 3 )监视和管理网页目录特征的方法• ( 4 )提供网页上内容如何与用户互动以及相互影响

的方法。• 1998年万维网协会 (World Wide Web Consontium) 制

定了一个与平台和语言无关的规范,即文档对象模块DOM(Document Object Model) 。

Page 44: 第 9 章   网络编程技术

• Internet Explorer动态 HTML 对象模块是对该规范的实施方案,它能使开发人员能通过编程控制网页上的所有情况,并可随时进行实质上的改变。 DOM将 HTML、 CSS(层叠样式表 ) 和脚本语言联合起来组成一个或多个人都能实现的互操作模型。

• 1. DHTML 对象模块的基本组件• DHTML 对象模块由对象、属性、事件和方法构成,使开发人员能通过编程控制网页上所有情况,并可随时进行实质上的改变。

• 1 )对象• 网页上 HTML 中每个元素在动态对象模块中都表现为对象,例如图像、文本框等。对象模块是所有这些对象的分层表示,最高层是当前网页的框架或者浏览器窗口。对象命名后,通过脚本语言来引用它。

Page 45: 第 9 章   网络编程技术

• 2 )属性• 属性描述一个对象的信息。在 DHTML 中对象的属性通过 CSS 来指定。

• 3 )事件• 网页上每一个发生的动作,例如鼠标双击,都称为事件。当网页事件发生时,接收事件的项会通知动态对象模块事件发生,如果编制的脚本程序规定对事件的触发做出响应,则执行该脚本。

• 4 )方法• 方法描述了对于对象所采取的措施。例如,使窗口对象能打开新的浏览器的方法。

• 5 )对象及属性的实例• Miccrosoft Internet Explorer支持 DHTML 对象模块中的对象、属性、事件和方法。如果使用脚本语言编程操纵网页上的对象则可以控制网页的变化。下面介绍使文字移动的方法和多媒体页面显示的对象和属性。

Page 46: 第 9 章   网络编程技术

• 移动文字使用成对标记 <MARQUEE> ... </ MARQUEE > ,将要移动的文字放在该标记中,文字则会动起来。该标记的属性有direction, bihavior, loop, scrolldelay, scrolldelay,Align, bgcolor, height, width和Margins

• 方向属性 direction ,可设置为 left, right;格式为• <direction=#> #=left, right• 方式属性 bihavior 可设置为 scroll, slide, alternate ,格

式为• <bihavior=#> #=scroll, slide, alternate• 循环属性 loop 可设置循环次数,格式为• <loop=#> #=次数 ;若未指定则循环不止 (infinite)• 速度属性 scrollamount 设置文字移动的快慢,可设置为数

字,格式为• <scrollamount=#> #=速度单位值• 延时属性 scrolldelay 设置文字移动时停顿的间隔时间,可

设置为数字。格式为• <scrolldelay=#> #=延时单位值

Page 47: 第 9 章   网络编程技术

• 外观设置 (Layout) 包括 Align, bgcolor, height, width和Margins

• 对齐方式属性 Align 可设置为对齐上沿、中间、下沿。格式为

• <align=#> #=top, middle, bottom• 底色属性 bgcolor 可设置为预定义色彩 Black, Olive, Teal,

Red, Blue, Maroon, Navy, Gray, Lime, Fuchsia, White, Green, Purple, Silver, Yellow, Aqua 。格式为

• <bgcolor=#> #=rrggbb 16 进制数码,或者是预定义色彩:

• 面积属性有 height和 width ,格式为• <height=# width=#> #= 面积单位值• 空白(Margins )属性有 hspace和 vspace ,格式为• <hspace=# vspace=#> #= 空白单位值• 多媒体页面 (Alternative Inline Elements) 包括多媒体文本、背景音乐和视频播放。

Page 48: 第 9 章   网络编程技术

• · 嵌入多媒体文本 (EMBED) ,该标记可以用来在主页中嵌入多媒体文本,多媒体文本可以为电影 (movie), 声音(sound), 虚拟现实语言 (vrml) 等。格式为

• <embed src=#> #=URL• ·背景音乐 ( BGSOUND ),格式为• <bgsound src=#> #= 音乐文件的 URL

<bgsound loop=#> #=循环数• 例如: <bgsound src=" sound.wav" loop=3> • ·插入视频剪辑 ( DYNSRC) , 格式为• <dynsrc=#> #= 视频文件• 例如: <img src=" Red.gif" dynsrc=" Red.avi" >• 播放视频文件 Red.avi ,在浏览器尚未完全读入 AVI 文件

时,先在 AVI 播放区域显示 Red.gif 图象,开始播放 AVI 的时间控制格式为

• <img start=#> #=fileopen, mouseover• 默认值是 #=fileopen ,即在链接到含本标记的页面 ( 如本页 ) 时开始播放 AVI 。

Page 49: 第 9 章   网络编程技术

• #=mouseover 是当鼠标移到 AVI 播放区域之上时才开始播放 AVI 。也可以两者同时设置:

• <img start=fileopen,mouseover>• 控制条 <img controls> ,用来在视频窗口下附加

WINDOWS的 AVI播放控制条。 • <img src=" Red.gif" dynsrc=" Red.avi " controls>• 循环播放 <img loop=#> #=循环数• <loop=infinite> 将循环播放不止。 • <img src=" Red.gif" dynsrc="Red.avi" loop=3>• 延时 <img loopdelay=#> #=毫秒数• 2.脚本编辑• DHTML将每个对象向一个编程和脚本语言的框架开放,

可使用编程语言 C++操纵网页上的对象,也可使用 Java script、 VBscript操纵网页上的对象。脚本嵌在 Web 页中。Internet Explorer 是一个脚本编辑主机。

Page 50: 第 9 章   网络编程技术

• VBscript 是在 Visual Basic 基础上设计的,这一语言通过微软的信息服务器( IIS )和活动服务器网页( ASP )在Web 服务器方得到支持。采用 VBscript 编写的脚本放在标记 <% .... %> 之间。

• Java script 使用了一些和 Java相同的结构和语法。采用Java script 编写的脚本,脚本必须写在一系列脚本标记中,格式如下:

• <SCRIPT LANGUAGE=“JavaScript”> • <! • [The actual script commands]• >• </SCRIPT> • 第一行为开始脚本编辑,指定了一种语言;最后一行为结

束脚本编辑。脚本就是操作页面的短程序,通过<SCRIPT>和 </SCRIPT> 标志插入到 HTML 文档中。

Page 51: 第 9 章   网络编程技术

• <! 和 >符号是 HTML 的开始和结束注释符号;//在 Javascript 中允许换行进行注释。

• [The actual script commands] 中为用指定语言编写的命令;

• DHTML 的可编程性,给Web 页带来了新的功能。例如,以前在改变Web 页的元素时,只能等待网页的重新下载,而使用 DHTML ,可以单击屏幕上方的某个图像,就可以使屏幕下方的段落立刻发生变化,而不必再访问服务器,这一改变是通过编辑脚本程序实现的。通过编辑脚本程序,所有的表格可变成活的数据库,用户可以动态和排序地筛选其中的数据。这样一来,就减少了对服务器的请求,因此降低了服务器的负荷,提高了客户机和服务器的总体性能。

Page 52: 第 9 章   网络编程技术

• 3.使用样式表 CSS

• HTML 的基础是层叠样式表 CSS(Cascading Style Sheets) ,样式是指由 Web 页作者定义的一组显示和定位属性。 CSS最大的特点是面向对象的网页设计,解决Web 页面的继承和显示问题。也就是说,把每一页、每一段落、每个图像和表格都看成是一个对象。然后声明该对象的每个实例。每个实例都有一种样式 (Style) ,即一组属性或显示指令。只要声明一次,这些属性就会贯穿在整个网页甚至整个站点中。可以对每一种样式赋予一个名字,如 H1、 Li 如果该样式的名称与一个有效的 DHTML 元素 ( 或标记 ) 的名称相同,则该样式就自动地作用于该元素的每一个实例;如果给一种样式所起的名称没有相应的 DHTML 标记,就必须人工地将该样式施加到希望它出现的地方。

Page 53: 第 9 章   网络编程技术

• CSS 所能改变的属性包括:字体、文字间的间距、列表、颜色、背景、页边距和位置。

• CSS 的格式有两种,嵌入式格式和格式页。嵌入式格式使用 STYLE 属性将格式应用在单个元素上。而使用格式页可将格式应用在网页或整个Web站点上。格式页可以是链接到 HTML 文档的一个外部文件,也可以包含在文档之中。

• · 嵌入式格式• 使用 STYLE 属性可以将嵌入式格式应用在网页

的任何标记上。• 例如: <SPAN STYLE="font-

weight:bold">This text is in a SPAN. </SPAN> 这里成对标记 <SPAN> 为不带任何格式的文本容器,当使用嵌入式格式 STYLE="font-weight:bold"将文本改为粗体字。

Page 54: 第 9 章   网络编程技术

• · 格式页• 格式页包含一个或多个格式定义,采用

<STYLE>和 </STYLE> 标记定义其边界。一个格式定义由跟在声明块后面的选择器组成。格式如下所示 :

• Selectctor{property: Value; property:Value;… }

• 其中, selector 表示要修改的元素,可以通过标记来定义,例如用 A、 P 等,也可以通过 ID 来定义,还可以通过 class 定义; Property 表示要修改的属性,例如: color: value 表示 property 的值,例如,对应 color ,可以将 value 的值设置为blue 。下面是一个应用 CSS 的典型例子。

Page 55: 第 9 章   网络编程技术

图 9.3 使用样式表 CSS

Page 56: 第 9 章   网络编程技术

• 例 9.4• <html>• <head>• <style>• A{color: blue }• P{background-color: red; color:yellow}• </style> • </head>• <body> • <A href="http://www.microsoft.com">您好 </A>

• <P>请注意这一段文字的颜色和背景 </P>• </body>

Page 57: 第 9 章   网络编程技术

</html>程序的运行结果如图 9.3 所示。• 程序的运行结果如图 9.3 所示。• 1 )定义使用样式以及类• 下面的程序段中有两个样式: H1和

B.typel。 H1 是一个有效的 DHTML 元素,在程序中由 <H1></H1> 标记的部分将继承样式 H1 的全部属性。类定义格式是元素名后加上一个圆点和类名。本例用户创建的 B 元素类 .typel ,引用时要用<class> 来声明, <B></B> 标记的部分将继承样式B 的全部属性。

• 例 9.5 使用样式和类设计网页,运行结果如图 9.4所示

Page 58: 第 9 章   网络编程技术

• <HTML>• <HEAD><TITLE>Welcome</TITLE>• <STYLE>• H1{FONT-SIZE: 10pt; COLOR: blue} / 定义样式 H1/• B.type{FONT-SIZE: 16pt; COLOR:red} / 定义样式 B/• </STYLE>• </HEAD>• <BODY>• <B class="type" >THIS IS A PICTURE</B> <HR> / 使用样式 B/• <TD valign="top"><IMG height=100 src="Do you like this.files/1.jpg"

width=200> • </TD><HR>• <H1>DO YOU LIKE THIS? </H> / 使用样式 H1/• </BODY>• </HTML>

Page 59: 第 9 章   网络编程技术

图 9.4 使用样式和类

Page 60: 第 9 章   网络编程技术

• 定义类 class 定义的类,是从现有类派生出来的,标志 <B class="title">具有 <B> 标志的所有属性。

• 2 )使用外部样式• 样式表还可以存放在外部文件中,这个文件与页

面的联系可以通过 IMPOKT或 LINK 实现,例如,样式表存放在文件 mysite.css 中,在文档中可以插入下列代码调用外部样式表 :

• <LINKREL=STYLESHEETHREF="mysite.css" TYPE="text/css" Title="Test Style">

• 4.实现交互功能• CSS 本身没有交互功能,要实现交互,就须将 CSS

定义的对象与文档模型 (DOM) 结合在一起,将Web 文档转换为 DHTML 文档。

Page 61: 第 9 章   网络编程技术

• DOM提供了脚本语言访问页上元素的途径, Microsoft和Netscape支持的对象模型有一些不同。

• 在Microsoft 的模型中,脚本语言可以访问 HTML 页面上的所有元素,所有元素都被反映为 document.all 中的对象。下面的程序段用于写出页面中所有的元素:

• for(I=0;I<document.all.length;I++>• {• document.write(document.all [I].tagname+"\n");• }• 在 Netscape 的模型中,脚本语言可以访问 HTML 页面

上特定集合的元素,如 <layer> 标签中的内容。下面的程序段用于写出页面中所有 layer 的名称 :

• for (I=0;I <docment.layers.length;I++)• {• document.write(document.layers [I].name+"\n");• }

Page 62: 第 9 章   网络编程技术

• 9. 2 ASP 编程技术• 1. ASP 技术的工作原理• Microsoft Active Server Pages(ASP) 是一个位于

Web 服务器端的开发环境,属于 ActiveX 技术中的Server端技术。通过这种环境,用户可以创建和运行动态的交互式 Web 服务器应用程序,如交互式的网页,包括使用 HTML 表单收集和处理信息。利用它可以产生和运行动态的、交互的、高性能的Web 服务应用程序。

Page 63: 第 9 章   网络编程技术

• 一般的 HTML 页面访问,首先根据 HTML 文件的 URL 地址,用户通过浏览器将网页请求发送到服务器端,服务器收到请求,根据扩展名 .html 或者 .htm判断 HTML 文件的请求,将相应的 HTML文件从磁盘中取出送回浏览器,经浏览器程序解释后在浏览器窗口显示结果。在请求 ASP 程序的过程时,大部分过程与上面一样, ASP 中的命令和Script 语句都是由服务器来解释执行的,执行结果动态生成 Web 页面,回送到浏览器。具体说,当判断出 ASP 文件并从磁盘取出时,它是向特定的ASP.dll 程序发送该文件,从上向下处理,执行这个请求文件中的所有语句,然后生成一个 HTML文件,结果以纯 HTML代码形式发送到客户端浏览器,经过客户端浏览器解释后在浏览器中显示。请参看图 9.5 ASP 运行的原理图:

Page 64: 第 9 章   网络编程技术

图 9.5 ASP 运行原理图

浏览器程序

网页URL: www.npu.edu

ActiveServerPages

客户机 服务器HTTP 请求

HTTP 应答

Page 65: 第 9 章   网络编程技术

• ASP 文件的后缀名为. asp ,相当于一个可执行文件,放在 Web 服务器上有可执行权限的目录下。当浏览器向Web Server请求调用 ASP 文件时,就启动了 ASP。Web Server开始调用 ASP ,执行每一个命令,然后动态生成一个 HTML 页面并送到浏览器。

• 2. ASP 运行环境和技术特点• 1 )运行环境• Active Server Pages 是由 Microsoft公司推出的,

因此 Microsoft公司推出的 Internet 信息服务器( Internet Information Server, IIS )能实现Acdve Server Pages 的强大功能,还有一些其他的服务器在安装了 ASP 组件后也能实现这个功能,运行 ASP 程序。

Page 66: 第 9 章   网络编程技术

• 安装 IIS步骤为:在控制面板下→选择添加或删除程序→选择添加 /删除Windows 组件→选择 Internet 信息服务 (IIS) 。安装 IIS后,在 C盘会建立一个根目录 Inetpub ,其子目录wwwroot则支持信息发布。如果将 *.asp 程序置于 c:\Inetput\wwwroot目录下,在地址栏输入 http://localhost/*.asp则可发布信息了。

• 2 )特点• 由于 ASP 是在服务器端执行的,则访问这些以 .asp 为后缀

的文件时,不能用实际的物理路径,而只能用其虚拟路径。而服务器端程序执行完毕后,服务器仅将执行的结果返回给客户端浏览器,减轻了客户端浏览器的负担。 ASP 有如下特点:

• ①无需编译,可直接在服务器端运行。• ②可以使用了各种脚本语言,并使用普通的文本编辑器进

行编辑。

Page 67: 第 9 章   网络编程技术

③ASP 的运行与浏览器无关,用户端浏览器只解释和显示转换为 HTML代码的 Active Server Pages 所设计的网页内容。

• ④由于 ASP 程序的源代码不会被传到客户端,因而具有较高的安全性。

• 3)Web 应用程序目录• Web 应用程序的起始文件是使用者执行整个Web 应用程

序的进入点,它的地位相当于 C 程序的 main()函数。必须将Web 应用程序起始文件 (默认的主文件名可以是 index或 default ,文件扩展名可以是 .htm、 .html 或 .asp)和Global.asa 等文件放在虚拟的根目录中。每当客户机连接服务器而不指定文档名时,自动打开一个 Default.htm 文件。

• GlobaL.asa 一定得放在虚拟根目录之下,否则,就完全没有作用。 GlobaL 文件中存放 Web 应用程序所需的使用层次 (Session) 、系统层次 (Application) 等对象或变量的声明。

Page 68: 第 9 章   网络编程技术

由一个虚拟根目录之下的所有 ASP 文件构成了一个Web应用程序。一般可将编写的 Web 程序放在根目录 \Inetpub\wwwroot 下,当 .htm和 .asp 这一类的文件数量通常很多时,也可以在目录 \Inetpub\wwwroot 下建立一些新的目录。对于多媒体文件一般建一个新的目录专门存放。对于程序控件也应该建立一些专门存放的目录,例如 \ActiveX或 \Java。\ActiveX专门存放 ActiveX 控制项,它们可能是 .dll或 .ocx等文件类型;而 \Java则专门存放 Javaapplet及其相关类文件 ( 可能是 .class或 .zip 文件 ) 。对于小规模的 Web 应用程序也可以用一个 \Bin存放所有的控制文件。 无论任何类型的数据文件,也应该适当分类,并且存放在各自的目录里面。例如,可以为纯文本类型的数据文件建立一个 \Text目录,或者根据数据内容建立一个 \MailAddress 的目录。如果数据文件不多,可以只建个 \Data目录集中存放。

Page 69: 第 9 章   网络编程技术

• 4) ASP 与脚本语言的关系• 由 HTML 页、脚本命令以及 ActiveX 组件构成的 ASP 文

档可以在 ASP环境下运行,脚本命令嵌在 HTML 文档里,实现交互式的网页,所有的处理都在服务器端进行。 ASP作为服务器端的对象模型,通过 ASP 对象所提供的方法和属性,可以很容易的操作服务器端的数据。 ASP不是一种编程语言,通过 JavaScript、 VBScript和 Java、 ActiveX Server Component 来实现 ASP 页面。

• 例 9.6 ASP 与脚本语言的关系。• <%• if Session("UsrFName")="clound" then• result="he has login"• else• result="he has notlogin" • Endif• %>

Page 70: 第 9 章   网络编程技术

• 在例 9.6 中, if 语句和赋值语句均为脚本语言VBScript 的标准语法;而 Session("Name")则是ASP中 Session 对象的一个引用。

• 5 )服务器组件• 一个服务器组件提供属性和方法来使用服务器资

源, ASP提供了 5个服务器组件,其中最重要的两个是数据库访问构件 ADODB 和文件访问构件FileSystemObject 。调用服务器组件,先利用Server 对象中的方法 Create Object 产生服务器组件对象实例,如下所示:

• Server.CreateObject(ProgID)• ProgID 指定了构件标识,构件可以是各种形式的

可执行程序 (如 DLL、 EXE等 ) ,不必考虑它的位置

Page 71: 第 9 章   网络编程技术

• 只要在 WindowsNT/98 中注册了这些程序, COM就会在系统资料库 (Registry)里维护这些资料,同时以 ProgID让程序员调用。登记用 regsvr32 程序,可以用 RegEdit 程序来看 ProgID 。构件产生后,就可以使用它的方法和属性进行工作。

• 一般使用 Server 构件的程序片段如下:• set obj=Server.CreateObject("ProgID") ' 产生构

件• obj.Method ‘ 使用它的方法• 3. ASP 应用实例• 例 9.7 编写客户端网页和服务器端的程序,实现留言板功能。客户端网页程序名为MessageBoard.htm;服务器端的 ASP 程序名为MessageBoard.asp 。运行结果参见图 9.6 。

Page 72: 第 9 章   网络编程技术

• MessageBoard.htm• <HTML><HEAD><TITLE>填写留言 </TITLE>• </HEAD>• <BODY><TD valign="top" >• <P align=center size=6><IMG height=67 • src="message board.files/Lunjilyb.gif" width=333></P><TR>• <FORM name=form1 action=message board.asp method=post>• <TABLE width=500 align=center border=0>• <TBODY>• <TR>• <TD width=100>姓名 :</TD>• <TD><INPUT id=author name=author></TD></TR>• <TR>• <TD>EMAIL:</TD>• <TD><INPUT id=email name=email></TD></TR>• <TR>

Page 73: 第 9 章   网络编程技术

• <TD>留言 :</TD>• <TD><TEXTAREA id=msg name=msg rows=4

cols=36></TEXTAREA></TD>• </TR></TBODY></TABLE>• <TABLE width=500 align=center border=0>• <TBODY>• <TR>• <TD align=middle><INPUT onclick="YY_checkform;return

document.MM_returnValue" • type=submit value=提交 name=Submit> • &nbsp; <INPUT type=reset value=重置 name=Submit2> • </TD></TR></TBODY></TABLE></TR></FORM>• </BODY>• </HTML> • MessageBoard.asp• <%• author = request("author")

Page 74: 第 9 章   网络编程技术

• email = request("email")• qq = request("qq")• msg = request("msg")• post_time = now()• dim conn• Set conn = Server.CreateObject("ADODB.Connection")• conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="• & Server.MapPath("data.mdb")• dim sql• sql = "INSERT INTO gbook (author,email,qq,msg,post_time)

values•

('"&author&"','"&email&"','"&qq&"','"&msg&"','"&post_time&"')“• conn.execute(sql)• response.redirect "Ack.htm"• %>

Page 75: 第 9 章   网络编程技术

图 9.6 留言板主页本例中用户将表格中的数据存入 Access 数据库中,库文件名为DATA.mdb。 Ack.htm 程序功能为将存入数据库中的数据显示出来,程序省略。

Page 76: 第 9 章   网络编程技术

• 9. 3 JAVA 语言的网络程序设计• JAVA 技术具有强大的网络功能和全新的理念,作

为一种跨平台的面向对象程序设计语言,随着Internet 的兴盛而更加风靡。

• 9. 3. 1 Java 的特征• Sun 公司在 “ Java白皮书”中的定义, Java 是

一种“简单、面向对象、分布式、解释型、健壮、安全、体系结构中立、可移植、高性能、多线程和动态”的编程语言。

• 1.简单性。其简单性体现在以下几方面:• ⑴ Java 是“纯”面向对象语言,它摒弃了 C++ 的

过程式成分,从而使语法和和语义都比较单纯容易学习和使用。

Page 77: 第 9 章   网络编程技术

• ⑵ Java对 C++ 中容易引起软件错误的成分进行了相当成功的改造,例如取掉指针,取消多重继承和运算符重载( OPERATOR overloading ),将内存管理任务由程序员移向 Java 内嵌的自动内存回收机制等,从而简化语义,减少了程序员负担。

• ⑶Java提供大量功能丰富的可重用类库,简化了编程工作量。例如,访问远程 internet 资源、打开 JPEG 和 GIF 格式的图象文件,在 C++ 中需要编写大量复杂的程序,但使用 Java 只需数行代码,其余工作由 Java 类库完成。

• 2.面向对象• ⑴ 与 C++ 一样, Java 的对象有模块化性质和信息隐藏能力,满足面向对象的封装要求。

• ⑵ Java 对面向对象的继承性的支持方式与 C++ 类似。

Page 78: 第 9 章   网络编程技术

• ⑶ Java 通过抽象类和接口 (interface)支持面向对象的多态性要求,一个对外接口,多种内部实现。

• 3.分布式特征• 分布式包括数据分布和操作分布。数据分布指数据可以分散储存在不同的网络结点上,操作分布指计算可由不同的网络结点完成。通过 Java 的 URL 类, Java 程序可以访问网络上的各类信息资源,访问方式完全类似于本地文件系统。此外, Java 通过嵌在 WWW 传输数据中的小应用程序将计算从服务器分布至客户机,小应用程序由 WWW 浏览器在客户端执行,从而避免了网络拥挤,提高了系统效率。

• 4.半编译,半解释特征• Java 应用程序的执行过程如下: Java 源程序生成 Java虚拟的机器指令——字节码 (bytecode ),然后由 Java解释器对字节码解释执行。

Page 79: 第 9 章   网络编程技术

• 这种半编译、半解释的执行过程兼具编译执行的效率优势和解释执行的灵活性,同时提高了 Java 的可移植性:不仅源程序可移植,编译后的中间代码(字节码)也可以移植。但是,解释过程必然损失部分执行效率,弥补这种损失的方法便是研制直接以字节码为机器指令系统的 Java芯片。

• 5.可移植性• Java 是迄今为止对可移植性提供最佳支持的编译

语言。任何机器只要配备了 Java 解释器,便可运行 Java 程序。在移植过程中, Java 源程序不需修改,甚至也不需重新编译。这种可移植性一方面源于 Java 的半编译、半解释特征,另一方面也得益于 Java 采用标准的独立于硬件平台的数据类型。

Page 80: 第 9 章   网络编程技术

• 6.安全性• Java 通过以下手段提供网络编程的安全性:• ⑴ 在语言级, Java 通过 protected和 private 关键

字限制外界使用对象的属性和方法;通过 final 关键字禁止类的继承或子类对父类方法的修改;取消指针,自动进行内存管理并对数组下标进行检查,从而确保 Java 程序无法破坏不属于它的内存空间。

• ⑵ 在字节码传输过程中采用公共密钥加密机制( PKC )进行加密处理。

• ⑶ 当字节码进入解释器时,字节码校验器将进行检查,以确保编译后到解释执行前这一期间字节码不被恶意篡改。

Page 81: 第 9 章   网络编程技术

• ⑷ 此后, Java 运行系统装载器( class loader )将再次进行安全性检查,包括确定程序是否违反存储权限,方法调用的参数型是否正确等。 Java 程序执行时的内存布局也由类装载器动态确定。这样,破坏者就不能通过预知的内存布局进行破坏或窃密。

• ⑸ 最后, WWW 浏览器在运行 Java 小应用程序时可以对其资源配额、权限和行为进行限制,进一步提高系统的安全性。

• 7. 多线程• 线程是比进程更小、更为经济的并发执行单位,它

与进程的主要差异在于它不拥有单独的内存空间,而是与其他线程共享内存,这样就简化了处理器切换线程的工作量。 Java 对多线程的支持体现在两个方面:

Page 82: 第 9 章   网络编程技术

• ⑴ Java 运行系统具有多线程特征,可以利用系统空闲完成内存回收等动作。

• ⑵ Java 在语言级提供了多线程编程设施,从而大大方便了多线程程序设计。

• 综上所述, Java 的设计体现了许多重要的软件工程原则,例如简单性、模块化、信息隐藏、可重用、可移植,等等。

• 9. 3. 2 Java 的语法机制• 由于 Java 的基本语法机制(例如数据类型、表达式、程序流程机制、结构化异常处理等)都脱胎于 C++ ,所以,本小节只讨论 Java明显区别于 C++ 的语法机制,它们包括:类、接口、程序包()、自动内存回收以及多线程。

• 1.类• 类是 Java 中最基本、最重要的语法设施。 Java 中类的定

义与类的继承都与 C++ 相类似,参见例 9.8 。它们之间的区别主要有:

Page 83: 第 9 章   网络编程技术

• ⑴ Java 不允许一个类同时继承多个父类。在 Java 中,多重继承必须通过接口来实现。

• ⑵ 除 C++ 的修饰词 public, protected 和 private 之外,Java 还引进了 abstract 和 final 修饰词。在类的定义中,如果出现了带 abstract 修饰词,那么该类的定义也必须以abstract 修饰。带 abstract 的类称为抽象类。抽象类的抽象方法只定义方法的原型接口(函数名、参数及其类型),没有方法体。抽象类只能供其他类作为父类使用,不能直接通过 new 算符产生抽象类的对象。 abstract 在 Java 中的作用类似于 C++ 的 virtual ,但它的语法较 virtual更为简单、清晰。 Java 可修饰类、属性或方法。带 final 的属性在定义时必须赋初值,此后该属性将成为常量。此方法定义时使用 final 修饰词可以防止子类重设( overriding )该方法。

Page 84: 第 9 章   网络编程技术

• 例 9.8 抽象方法与抽象类。• 抽象类 GraphicObject 含有抽象方法 draw ,子类 Circle 给出了 draw 的方法体。

• import java.awt.Point;• import java.awt.Graphics;• abstract class GraphicObject• { // 成员变量说明• protected Point m_prPos; • void moveTo(Point ptNew) //将图形对象移至新位置• {• m_prPos=ptNew;• }• abstract void draw(Graphics g);• }

Page 85: 第 9 章   网络编程技术

• class Circle extends GraphicObject• {• protected int m_nRadius• protected Point m_ptPos; • public Circle(Point ptPos,int nRadius)• { // 构造子类• m_ptPos=ptPos;• m_nRadius=nRadius;• } • void draw(Graphics g)• { //给出以 m-ptPos 为圆心、 Radius 为半径的圆• g.drawOval(m_ptPos.x – m_nRadius,m_ptPos.y-

m_nRadius,2 * m_nRadius,2 * m_nRadius);• }• }

Page 86: 第 9 章   网络编程技术

• 2.接口• 接口是一种抽象类,其中只能出现静态常量或抽象方法的

定义。接口的定义形式参见例 9.9。 Java 引进接口的主要目的是实现多重继承功能,同时又避免 C++ 多重继承语义上的复杂性。类可以实现一个或多个接口。如果类是接口的实现,但类又没有为接口中的抽象方法定义实现体,那么该类就必须是抽象类。

• 例 9.9 接口。• 类 Stack 和类 Queue 对接口 Storege 的抽象方法 put 和

get 给出了两种不同的实现。类 StorageManager 和 DemoStorageManager 说明了接口及其实现类的使用方法。

• import java.awt.Point;• import java.awt.Graphics;• interface Storage

Page 87: 第 9 章   网络编程技术

• {• void put(int n);• int get();• }• class Stack implements Storage • {• private int m_arrBuffer[ ];• private int m_nLength,m_nTop; • public Stack(int nLength) • { • m_arrBuffer = new int[nlength];• m_nLength = nLength;• m_nTop = 0;• }•

Page 88: 第 9 章   网络编程技术

• public void put(int n)

• { //压栈操作• if (m_nTop + 1 < m_nLength)

• m_arrBuffer[m_nTop ++]=n;

• }

• public int get()

• { // 出栈操作• if (m_nTop>0)

• return m_arrBuffer[m_nTop--];

• else

• return 0;

• }

• }

Page 89: 第 9 章   网络编程技术

• class Queue implements Storage • {• private int m_arrBuffer[];• private int m_nLength,m_nTop;m_nBottom;• public Queue(int nLength) • {• m_arrBuffer =new int[nLength];• m_nLength = nLength;• m_nTop = 0;• m_nBottom = 0;• }• public void put(int n)• { // 进队操作• if (m_nTop + 1 <m_nLength)• m_arrBuffer[m_nTop ++ ] = n;• }

Page 90: 第 9 章   网络编程技术

• public int get()• { // 出队操作• if (m_nBottom < m_nTop && m_nBottom +1 < m_nLength)• return m_arrBuffer[m_nBottom ++ ];• else• return 0;• }• }• class StorageManager• {• void putData(Storage store,int nData) • {• store.put (nData);• }• int getData(Storage stor) • {• return store.get();• }• }

Page 91: 第 9 章   网络编程技术

• class DataStorageManager • {• private int m_nLength;• private Stack m_nstock;• private Queue m_nqueue;• private StorageManager m_manager ;• public void DataStorageManager(int nLength)• {• m_nstack = new Stack(nLength);• m_nqueue = new Queue(nLength);• m_manager = new StorageManager();• }• public void Data (Graphics g,int nDrawFromX,int nDraFromY) • { • int nFontHeight = g.getFontMetrics().getHeight();• int nLineHeight = nFontHeight + 5;• Point ptDraw = new Point(nDrawFromX,nDrawFromY); //演示操

Page 92: 第 9 章   网络编程技术

• g.drawstring("100 and 200 are pushed into stak ",ptDraw.x,ptDraw.y);

• ptDraw.y + = nLineHeight;• m_manager.putData(m_stack,100);• m_manager.putData(m_stack,200);• g.drawString("The following numbers are popped from

stack,in order: ",• ptDraw.x,ptDraw.y);• ptDraw.y + = nLineHeight;• g.drawString("Thy 2nd number is " +

m_manager.getData(m_stack), • ptDraw.x,ptDraw.y);• ptDraw.y + = nLineHeight; //演示队列操作• ptDraw.y + = nLineHeight;• g.drawstring(("300 and 400 are set into

queue",ptDraw.x,ptDraw.y);

Page 93: 第 9 章   网络编程技术

• ptDraw.y + = nLineHeight;• m_manager.putData(m_queue,300);• m_manager.putData(m_queue,400);• g.drawString("The 1st numbers are fetched from

queue,in order: ",• ptDraw.x,ptDraw.y);• ptDraw.y + = nLineHeight;• g.drawstring("The 1st number is" +

m_manager.getData(m_queue),• ptDraw.x,ptDraw.y);• ptDraw.y + = nLineHeight;• g.drawString("The 2nd number is " +

m_manager.getData(m_queue),• ptDraw.x,ptDraw.y);• }• }

Page 94: 第 9 章   网络编程技术

• 3.程序包• 程序包是一些相关类或接口的集合,参见例

9.10。 Java 系统提供的可重用类都以包的形式提供给软件开发人员使用。这些程序包包括 Java 语言包( Java.lang ), I/O 包 (Java.io) ,实用工具包 (Java.util) ,网络包 (Java.net) ,小应用程序包(Java.applet) ,抽象界面工具包 (Java.awt) 。无论是使用 Java 系统提供的标准程序包,还是使用自定义程序包,只需在程序中加上相应的 import 语句即可。例如:

• import java.io.FileInputStream /* 使用 java.io 包的 FileInputStream 类 */

• 或 import java.io.* /* 使用 java.io 包中所有的类和接口 */

Page 95: 第 9 章   网络编程技术

• 例 9.10 程序包• package Images;• class Bitmap• {• …• }• class GIF• {• …• }• class LPEG• {• …• }

Page 96: 第 9 章   网络编程技术

• 4.自动内存回收• C++ 的指针是一种有争议的语法机制。一方面,它非常灵活,程序员可利用它指向任意内存块;另一方面;它也是公认的较易引发程序错误和内存泄露(memory lack )的语法设施。 Java 取消了指针类型,并将程序员从繁重的内存回收任务中解放出来,由系统自动进行内存垃圾回收( garbage collection ),在 Java 程序中,所有动态内存的申请均通过 new 算符进行,连数组内存空间的申请也不例外,与 C++ 完全不同的是, Java 数组类型的定义并不同时产生数组所需的内存空间,必须通过 new 算符指定数组维数长度并分配内存之后,才能使用数组元素。参见例 9.9 。在 Java 中,通过new 得到的不是指针,而是引用( reference )。

Page 97: 第 9 章   网络编程技术

• Java 程序只能通过引用访问数组元素或对象,不能像使用指针那样通过修改引用的值来指向另一内存区。这样即减少了出错机会,也是系统能够自动判别某块内存是否可回收。

• 9. 4. 3 Java在 Internet环境下的软件开发• 在 Internet 环境下使用 Java 进行软件开发的主要任务之一

是,制作功能丰富并具有交互能力的 WWW主页( HomePage )。如前所述,在 Java 进入WWW 程序之前, WWW主页只是用 HTML 语言中引进了” APPLET” 标记。嵌在主页中的 Java 程序被称为小应用浏览器用于解释执行 HTML 程序。

• 本节将依次介绍在 Innterbet环境下使用 Java 进行软件开发所涉及的软件技术,包括,多媒体主页与交互式主页制作技术、图形界面技术、网络程序设计技术。

Page 98: 第 9 章   网络编程技术

• 1.基于 Java 的软件开发过程• 与一般的软件开发过程一样, Java 软件的开发也要经历需求分析、软件设计、实现、调试、维护等阶段。本小节结合一个简单的实例介绍 java 小应用程序的编程、编译和执行过程。

• ⑴. 编写源程序。见例 9.11• ⑵. 准备 HTML 程序以供调试或运行 java 小应用程序。• 例 9. 11• <html>• <head>• <title>DemoImage</title>• </head> • <body>• <applet>• code=DemoImage.class

Page 99: 第 9 章   网络编程技术

• id=DemoImage

• width=320

• hight=240

• <param name = ImageFileName value = “file:// ~:/Flower.jpg”>

• </applet>

• </body>

• </html>

• ⑶ 编译小应用程序。采用以下命令行或在 Java 集成环境(例如, Microdoft Visual J++ )选择相应菜单即可生成Java 的字节码程序 Demoimage.class:

• Javac Demoimage.java

• ⑷ 在WWW 浏览器中装载前述 HTML 程序或在 java 集成环境中选取相应菜单即可执行或调试小应用程序。

Page 100: 第 9 章   网络编程技术

• 2. Java 与多媒体主页的制作• 本小节依次介绍如何使用 java 在主页上绘图、装载图象文件,以及如何利用多线程机制在主页上制作动画。

• ⑴ 在主页上绘制图形。 Java 类库中的 Graphics类提供了画线、矩形、圆角矩形、椭圆、线、多边形等绘图能力,参见例 9.8 。

• ⑵ 装载并显示图像文件。在 java 类库中, Java.applet.Applet 类和 Java.awt.Toolkit 都提供了 getImage 方法,它可以直接装载本地或远程网络结点上的 GIF 和 JPEG 文件,程序员不必关心网络传输问题,也不必编写复杂的GIF、 JPEG 解压缩算法,这些动作均由 Java 类库自动完成。

Page 101: 第 9 章   网络编程技术

• 类 Java.applet.Applet 中 getImage 函数的原型是:• Image getImage( URL url ); 或 Image getImage( URL url,String name )。

• 类 Java.awt.Toolkit 中 getImage函斏原型:• Image getImage(String filename);或 Image

getImage(URL url) 。• 其中, Image 是程序包 Java.awt 中的类, URL是

Java.net 中的类。 URL 是统一资源定位器( Uniform Resource Locator )的缩写, URL 类的对象表示 Innternet上资源的位置。最常用的 URL 构造函数是:

• URL( String addr ); /* 直接以 Internet 地址指定 URL 的内容 */

• URL( URL urlContext,string spec ) /*先指定资源所在的 URL ,再给出资源名称 */

Page 102: 第 9 章   网络编程技术

• 当使用 Innternet 地址构造 URL 对象时,必须处理 Malformed URLException 异常,因为系统不能保证用户所给的 URL 是合法的 Internet 地址,也不能保证在任何时刻该地址都是可访问的。

• 使用 getImage 得到 Image 类的对象之后,即可通过Graphics 类的 drawImage 显示图象,参见例 9.12 。

• 必须指出的是, getmage 将产生另一线程去读取图象文件,该函数在生成 Image 对象之后,并不等于文件下载和解压缩的实际完成。

• 例 9.12 图象的装载与显示• import java.applet.*;

• import java.awt.*: importjava.net *;

Page 103: 第 9 章   网络编程技术

• public class DemoImage extends Applet {

• private Image m-image;• private String m-strImageFileName = "";• private final String PARAM-ImageFileName =

"ImageFileName"; • public void init() • { //从小应用程序中获取图象文件的地址与名称• String param = getParaneter(PARAM-

ImageFikleName);• If (param ! = null)• m_strImageFileName = param;• resize(320,240); // 设定小应用程序所占区域的尺寸

Page 104: 第 9 章   网络编程技术

• try • { // 构造 URL 对象并获取 image 对象• URL url = new URL(m_strImageFileName);• m_image = getImage(url);• }• catch (Execption e) • { //handle exception • m_image = null;• }• }• public void paint(Graphics g)• {• if (m_image ! = null)• g.drawImager(m_image,10,10,this); // 以( 10, 10 )为左上角显示图象

• }• }

Page 105: 第 9 章   网络编程技术

• ⑶ 在主页上演示动画• 与动画卡通原理一样,计算机动画也是通过快速放映多张

图片,利用人眼的视觉暂留来实现动画效果。一般而言,计算机动画速度通常在每秒 10 到 20 帧之间,每帧为一个画面。速度越快,动作就越平滑。

• 例 9.13 给出了一个完整的动画演播小应用程序。它实现了支持多线程的接口 Runable。 Runable 的四个抽象方法 init、 start、 stop 和 run 是实现多线程的关键。

• Init 方法负责小应用程序初始化。例 9.13的 init 方法较简单,仅读取小应用程序的参数。

• WWW 浏览器 在每次进入小应用程序所在页面时都会执行 start 方法。在例 9.12 中,该方法首先装载并循环播放动画配音。声音及音乐的装载方法与图象类似,只不过装载方法要改用 java.applet.Applet 类的 getAudioClip 方法。然后, start 方法创建一个新线程 m_animateThread ,并启动它开始执行。

Page 106: 第 9 章   网络编程技术

• 在 Start 方法执行之后,程序将有两个线程在执行: • m_animateThread 线程执行 run 方法体的代码,按演播速度循环刷新画面,直到小应用程序退出时由 stop 方法终止 m_animateThread;另一线程负责执行类 DemoAnimation 中除 run 方法之外的其它代码,实现帧的绘制工作。

• run 方法是 m_animateThread 线程的执行体。在例 9.13中,该方法将动画的图象系列装载至 Image 数组,并利用小应用程序参数计算动画帧之间的延迟时间。待图象装载全部完成后开始演播。

• WWW 浏览器在每次退出小应用程序所在页面时都会执行 stop 方法。在例 9.13 中,该方法终止动画配音的播放,并终止 m—animateThread 线程的执行。

Page 107: 第 9 章   网络编程技术

• 例 9.13 利用多线程机制实现动画• import java.applet.*;• import java.awt.*;

public class DemoAnimation extends Applet implements Runnable

• {• Thread m_animateThread = null;• private Graphics m_Graphics;• private Image m_Image[];• private AudiaoClip m_Audio;• private int m_nCurImage;• private int m_ImageWidth = 0;• private int m_ ImageHeight=0;• private Boolean m_ fAllLoaded = false;• private final int NUM_IMAGES=18;

Page 108: 第 9 章   网络编程技术

• private String m_strImageFileName = "";• private String m_strAudioFileName = "";• private int m_nFramePerSecond = 0;• private final String PARAM_ImageFileName =

"ImageFileName "; //参数名• private final String PARAM_AudioFileName =

"AudioFileName";• private final String PARAM_FramePerSecond =

"FramePerSecond";• public void init() • { //获取小应用程序参数• String param

=getParameter(PARAM_ImageFileName);• If (param ! = null)• m_strImageFileName = param;• param = getParameter(PARAM_AudioFileName);

Page 109: 第 9 章   网络编程技术

• If (param ! = null)• m_strAudioFileName = param;• param = getParameter(PARAM_FramePerSecond);• If (param ! = null)• m_nFramePerSecond = Integer.parseInt(param);• resize(320,240);• }• private void displayImage(Graphics g) • {• if (! m_fAllLoaded)• return;• // 显示第m_nCurImage幅图象• g.drawImage(m_Image[m_nCurImage],• (size().width – m_nImageWidth)/2,• (size().height– m_nImageHeight) /2,null)) ;• }

Page 110: 第 9 章   网络编程技术

• public void paint(Garphics g) • { // 如果所有图象均已装载,则调用 displayImage 显示当前

图象。否则显示状态信息• if (m_fAllLoaded) • { • Rectangle rect = g.getClipRect();• g.clearRect(rect.x,rect.y,rect.width,rect.hight);• displayImage(g);• }• }• public void start() • { //装载背景音乐• string strAudio = "audios\ + m_strAudioFileName + .au";• m_Audio = getAudioClip(getDocumentBase(),strAudio);

Page 111: 第 9 章   网络编程技术

• if (m_Audio != null) //循环播放背景音乐• m_Audio.loop();• if (m_animateThread == null) • { // 生成并启动新线程• m_animateThread = new Thread(this);• m_animateThread.star();• }• }• public void stop() • { //停播背景音乐• if (m_Audio ! = null)• m_Audio.stop();• if (m_animateThread ! = null) • { //终止新线程• m_animateThread.stop();• m_animateThread=null;• }• }

Page 112: 第 9 章   网络编程技术

• public void run()

• {

• m_nCurImage = 0;• //if re-entering the page,then the images

• //have already been loaded,and m_fAllLOADED = = TRUE.

• If (! m_fAllLoaded)

• {

• repaint();• m_Graphics = getGraphics();• m_Images = new Image[NUM_IMAGES];• MediaTracker tracker = new_MediaTracker(this);• // 构造每幅图象的路径,并将它们装载至m_Images 数组• String strImage;

Page 113: 第 9 章   网络编程技术

• for (int i = 1; i <= NUM_IMAGES; i + + ) • {• strImage = "images\"+m_strImageFileName+" (i < 10) ?

0: """) + i + "gif";• m_Images[i –1] =getImage(getDocumentBase(),strImage);• //将m_Images[i-1] 的装载过程列入 tracker 的监控范围• tracker.addImage(m_Images[i – 1],0);• }• try• { // 等待图象动作全部完成• tracker.waitForAll();• m_fAllLoaded = ! tracker.isErrorAny();• }• catch (InteruptedException e) { }

Page 114: 第 9 章   网络编程技术

• for (int i = 1; i <= NUM_IMAGES; i + + ) • {• strImage = "images\"+m_strImageFileName+" (i < 10) ?

0: """) + i + "gif";• m_Images[i –1] =getImage(getDocumentBase(),strImage);• //将m_Images[i-1] 的装载过程列入 tracker 的监控范围• tracker.addImage(m_Images[i – 1],0);• }• try• { // 等待图象动作全部完成• tracker.waitForAll();• m_fAllLoaded = ! tracker.isErrorAny();• }• catch (InteruptedException e) { }

Page 115: 第 9 章   网络编程技术

• while (true) • { // 每隔 nDelayTime 显示下一幅图象• try • {• displayImage(m_Graphics);• m_nCurImage + +;• if (m_nCurImage = = NUM_IMAGES)• m_nCurImage = 0;• Thread.sleep(nDelayTime);• }• catch (InterruptedException e)• {• stop();• }• }• }• }

Page 116: 第 9 章   网络编程技术

• 3. Java 与交互式主页的制作• 在 Java 程序中使用 Java.awt.Event 类可以对键盘

和鼠标事件进行响应和处理。将这样的小应用程序嵌入主页,将使主页与一般的应用程序一样具有很好的用户交互能力,从而消除了主页只能被动地呈现静态数据的缺陷。

• 在例 9.14 中,类 DemoInteractive 重设了 Event 类的事件处理方法 mouseDown ,其功能是在用户每次按下鼠标后以鼠标按下位置为圆心画出直径为 10 象素的圆。

• 例 9.14 界面事件的响应与处理。• import java.applet.*;• import java.awt.*;

Page 117: 第 9 章   网络编程技术

• public class DemoInteractive exteds Applet • {• Private Point m_ptDown; • public void init() • {• resize(320,240);• m_ptDown = new Point(-1,-1);• }• public void paint(Graphics g) • {• if (m_ptDown.x >= 10 && m_ptDown.y >= 10)• g.drawOval(m_ptDown.x – 10,m_ptDown.y – 10,20,20);• else• g.drawString("please click mouse here. ",40,40);• }

Page 118: 第 9 章   网络编程技术

• public boolean mouseDown(Event evt,int x,int y)

• { // 响应鼠标按下事件• m_ptDown.x = x;

• m_ptDown.y = y;

• repaint();

• return true;

• }

• }

• 4. Java 与图形界面• 要真正实现交互式主页,仅有事件处理机制是不够的,还

必须在界面上设置各种用户接口对象,包括按扭、滚动条、列表框、文字编辑等通常的对话框结构,以便使 Java软件的用户界面与其他窗口系统应用程序一样简单直观。

Page 119: 第 9 章   网络编程技术

• 为此, Java 的抽象窗口工具集( Abstract Window Toolkit 简称 AWT )在程序包 java.awt 中包含了如图 9.7 所示的AWT 的类结构图,用来描述 Java 应用程序的界面对象。

• 类 Component 是所有其他界面构件类的父类,它为软件开发人员提供了所有界面对象的基本操作接口。其中常用的方法有:

• enable/disable:改变界面对象的使能状态。只有使能(变亮)的对象才能响应界面事件。

• isEnabled:返回界面对象的使能状态。• getBackground , getForeground,getFont: 分别获取界面对象的背景颜色、前景颜色和字型。

• setBackground,setForeground,setFont :分别设置界面对象的背景颜色、前景颜色和字型。

Page 120: 第 9 章   网络编程技术

图 9.7 AWT 的类结构图

component

button

scrollbar

list

textComponent

Dialog

textFiled

container

panel

Applet

window

textArea

Frame

FileDialog

Page 121: 第 9 章   网络编程技术

• show/hide :显示或隐藏界面对象。• isShowing :判别界面对象是否正显示在屏幕上。• isVisible :判别界面对象是否已被方法 hide 所隐藏。

• repaint :重画界面对象。• inside :判别坐标值是否位于界面对象之中。• move/resize :移动界面对象 /改变其尺寸。• location :分别获取界面对象的位置和尺寸。• locate :获取位于给定位置的界面对象。• KeyDown, keyUp,mouseDown,mouseup,

mouseEnter,mouseexit,mouseMove,mouseDrag :相应的键盘或鼠标事件发生时被调用的事件处理程序。

Page 122: 第 9 章   网络编程技术

• 在WAT 的类结构图中, container 类是所有界面对象包容器的父类。包容器主要用来放置界面对象。窗口、对话框、小应用程序所占区域都是典型的包容器。

• 安排包容器中所有界面对象的位置和大小通常采用“所见即所得”的资源编辑器(例如 Borland C++的 Resource Workshop ,Visual C++ 的 Appstudio )。但是,这种方法与开发环境和运行环境所处的操作系统平台关系极大,因而是不可移植的。 Java 为了实现彻底的可移植性,不得不舍弃“所见既所得”的编辑方式,转而选取一种比较抽象的方法:利用 Container 类的 setLayout 方法为每个包容器配置“外观管理器”( Layout manager ) 。

Page 123: 第 9 章   网络编程技术

• 外观管理器是实现 LayoutManager 接口的 Java 对象,它负责确定包容器中所有界面对象的位置和尺寸。按照从简单到复杂的顺序,以下对标准的外观管理器作一简单介绍 .

• ( 1) BorderLayout 。从类 BorderLayout 生成的外观管理器将包容器分为东、南、西、北、中五个区域。区域的大小由置入该区域的界面对象的尺寸来决定。用户在包容器放置界面对象时必须指明区域名称,例如:

• add(“center",new Button(“OK”)) /*将 OK 按扭置于中央区域 */

• ( 2) CardLayout 。这种外观管理器将包容器视为卡片盒,每次只能显示一张卡片(界面对象)。卡片序号依界面对象加入包容器的先后次序而定。 CardLayout 提供的的主要方法如下:

• First/last/next/previons : 显示第一张 / 最后一张 / 下一张 /前一张卡片。

Page 124: 第 9 章   网络编程技术

• show :按界面对象的名称显示指定卡片。• ( 3) FlowLayout 。这种外观管理器将包容器中的所有界

面按它们加入包容器的先后次序从左至右、从上至下排列。最后未排满的行按生成 FlowLayout 外观管理器时所指定的对齐方式(齐左、居中或齐右)安排位置。 FlowLayout外观管理器是包容器的的缺陷外观管理器。

• ( 4) GridLayout 。这种外观管理器将包容器平分为一些方格,再将界面对象一次置于这些方格中。在构造这种外观管理器时,程序员必须指明行数和列数,还可以指明方格之间的水平、垂直间距。

• ( 5) GridBagLayout 。这种外观管理器是 Java 中最复杂,同时也最为灵活的管理器。类似于 GridLayout外观管理器,它也将包容器分为一些方格,但它不要求事先给定方格的行数和列数,也不要求所有方格具有相同的尺寸。

Page 125: 第 9 章   网络编程技术

• 如果包容器使用 GridBagLayout 对象作为外观管理器,那么,加入其中的每个界面对象都应附带一个类 GridBagLayout 的对象。外观管理器将根据 GridBagLayout 对象所给的限制条件,再加上其他条件(例如界面对象的最小尺寸)来决定包容器外观。通过GridBagLayout 可以设置以下限制条件:

• ( 1) gridwidth 和 gridheigh :指定界面对象横向和纵向分别占用的方格数。

• ( 2) gridx和 gridy :指定界面对象的方格坐标。第一行第一列的方格坐标是( 0, 0 )第二行第三列的方格坐标是( 1, 2 ),依此类推。

• ( 3) weightx和 weighty :在 GridBagLayout 按照其他限制条件将界面对象安置妥当以后,如果包容器仍有剩余空间,则按照 weightx 和 weighty 指定的权值比例为该界面对象分配剩余空间。

Page 126: 第 9 章   网络编程技术

• ( 4) fill :如果界面对象得到的空间比例比需要的空间多,则根据 fill 值调整对象尺寸, fill 的取值及含义罗列如下:

• GridBagConstraints.NONE :不调整尺寸。• GridBagConstraints.HORIZONTAL :将水平方向的多余

空间补满。• GridBagConstraints.VERTICAL :将垂直方向的多余空间补满。

• GridBagConstraints.BOTH :将水平、垂直两个方向的多余空间补满。

• ( 5) ipadx 和 ipady: 用来改变界面对象本身所需的尺寸。例如,如果某对象的最小宽度为 20 象素, ipadx 的值为 3 ,那么 GridBagLayout 将认为该对象的最小宽度为 20+( 2×3 )= 26 像素。

• ( 6) insets: 用于设置界面对象在上、下、左、右四个方向与相邻对象之间的间距。

Page 127: 第 9 章   网络编程技术

• ( 7) anchor: 如果界面对象不足以填满它所分配到的空间,则 GridBagLayout 使用 anchor 值(正中、左上角、左方等)在这一空间中放置该对象。

• 从理论上讲,使用 Java 标准的外观管理器可以设计出任意复杂的界面外观,但是,这种方法毕竟不具有“所见即所得”方式的优越性。目前,一些 Java 集成开发环境(如Microsft Visual J ++ )正在尝试向开发人员提供“所见即所得”的图形界面编辑工具,这种工具可以根据开发人员在编辑器中按直观方式设定的位置自动生成抽象的外观管理器。这样既可以实现“所见即所得“,又不会损害 Java 的可移植性。对此有兴趣的读者不妨使用 Visual J ++ 的对话框(该工具的使用方法与 Visual C ++ 的对话框工具完全一样),然后再检查该工具自动生成的外观管理器。

Page 128: 第 9 章   网络编程技术

• 5. Java 与网络程序设计• 作为一种网络程序设计语言, Java 必须能够存取各种网络资源并与服务器建立各种传输通道。为此, Java 通过Java.net 程序包提供了许多网络功能。这些功能分为三大类: URL, Socket与 Datagram 。限于篇幅,只简介其中最高级、最简单的 URL功能。

• 前面已经介绍过 URL 对象的构造方法和获取网络资源的方法,这里不再重复。下面讨论如何利用 URLconnection 类建立 Java 应用程序与 WWW 服务器之间的双向连接,从而实现双向通信。

• 首先,利用 URL 类的 openConnection 方法可获得一个URLConnection 对象,再通过 URLConnection 类的getInputStream和 getOutputstream 可分别得到输入流和输出流,最后使用通常的流读写操作即可完成双向通信。比较完整的编程实例请见例 9.15 。

Page 129: 第 9 章   网络编程技术

• 例 9.15 双向通信• import java.net.*;• import java.io.*;• class DemoBiConnection • {• private int m_nLength;• private int m_arrData[];• public DemoBiConnection(int nDataLength) • { // 构造子对成员变量进行初始化• m_nLength = nDataLength;• m_arrData = new int[nDataLength];• for ( int n=0; n<nDataLength; n++ )• m_arrData[n]= n*10;• }•

Page 130: 第 9 章   网络编程技术

• public void connect(URL url) • {• try • {• URLConnection con = url.openConnection();• ////向远程 url 地址发行数据• Printstream outStream = new

Printstream( con.getOutputstream());• for (int n =0;n < m_nLength;n + + )• outstream.print(m_arrData[n] + "");• outStream.println();• outStream.close();• System.out.println(“Data sent.”);• ////从远程 url 地址读取数据

Page 131: 第 9 章   网络编程技术

• System.out.println(“Data from server:”);• DataInputStream instream = new

DataInputStream(con.getInputStream());• String strLine;• strline = instream.readLine();• while (strLine ! = null)• System.out.print(strLine);• instream.close();• System.out.println(“End of data from server “);• }• catch (IOException ioe) • {• System.out.println(“ioeXECPTION:” + ioe);• }• }• }

Page 132: 第 9 章   网络编程技术

• 9. 4 JSP 编程技术 • Sun推出的 JSP( Java Server Pages )是一种执行于服务

器端的动态网页开发技术,它基于 Java 技术。 JSP 技术用Java 语言作为脚本语言。在服务器端, Web Sever会自动将基于 JSP 技术写成的 Java 程序代码段转换成 Java servlets ,然后由 Java虚拟机解释执行。正是由于 JSP 是以 Java 语言为基础的,它才具有了强大的功能,并获得广泛的运用。

• JSP 的运行环境和技术特点• 1) JSP 的运行环境和技术特点• 执行 JSP 时需要在 Web 服务器上架设一个编译 JSP 网页的引擎。配置 JSP 环境可以有多种途径,但主要工作就是安装和配置Web 服务器和 JSP引擎。下面以 Tomcat 作为JSP引擎,配合 Tomcat、 Apache、 IIS 这三种 Web 服务器来讲述 3 种搭建 JSP 运行环境的方案。

Page 133: 第 9 章   网络编程技术

• 建立 JSP 运行环境需要的相关软件包括: Java2 的软件开发工具 J2SDK; Apache 服务器;

• Apache 组织开发的 JSP引擎 Tomcat 服务器,使 Apache支持 Tomcat 的插件 mod_jk.dll;使 IIS支持 Tomcat 的插件 tc4ntiis.zip 。

• ( 1 )安装 J2SDK• 在Windows 下,直接运行下载的 j2sdk-1_4_1_01-windows-

i586.exe 文件,根据安装向导安装到一个目录,例如安装到f:\j2sdk 1.4.1;

• ( 2 )添加环境变量• 在Win2000环境下配置环境变量。右键单击“我的电脑”,

在弹出菜单中选择“属性”→“系统特性” →“高级” →“环境变量”, 弹出环境变量对话框,就可以编辑系统的环境变量了。添加 PATH、 JAVA_HOME和 CLASSPATH三个变量,变量值为:

Page 134: 第 9 章   网络编程技术

• PATH=% PATH%;f:\j2sdk1.4.1\bin

• SET JAVA_HOME=f:\j2sdk1.4.1

• SET CLASSPATH=f:\j2sdk1.4.1\lib\tools.jar 。• ( 3) JSP环境的配置方案• JSP环境的配置方案有多种,• 方案一, J2SDK+ Tomcat 。在这种方案里 Tomcat既作为

JSP引擎又作为 Web 服务器,配置比较简单。• 方案二, J2SDK+ Apache+ Tomcat 。虽然 Tomcat 也可

以作 Web 服务器 ,但其处理静态 HTML 的速度比不上Apache ,且其作为 Web 服务器的功能远不如 Apache ,因此把 Apache和 Tomcat集成起来,用 Apache充当Web 服务器,而 Tomcat 作为专用的 JSP引擎。这种方案的配置比较复杂,但是能让 Apache和 Tomcat 完美整合,实现强大的功能。

Page 135: 第 9 章   网络编程技术

• 方案三: J2SDK+ IIS+ Tomcat。Windows 平台下最常用的 Web 服务器无疑是 IIS ,正常情况下 IIS不支持 JSP ,我们可以通过使用一个 IIS到 Tomcat重定向插件,使 IIS能够将所有的 JSP请求发送到 Tomcat执行,可以使 IIS增加处理 JSP 的功能。如果你已经习惯了使用 IIS ,那么可以尝试这种配置。配置所需的软件均可从网上下载。

• ·J2SDK+ Tomcat配置方案• 安装 Tomcat 可直接运行下载的 jakarta-tomcat-4.0.1.exe ,安装时它会自动寻找 J2SDK 的位置。例如安装到 f:\tomcat4。 Tomcat安装后,还要配置环境变量,添加一个新的环境变量 TOMCAT_HOME ,变量值为 f:\tomcat4 ,添加方法同 J2SDK环境变量的配置方法。设置完毕后就可以运行 Tomcat 服务器了。用 f:\tomcat4\bin\startup.exe启动 Tomcat ,用 f:\tomcat4\bin\shutdown.exe 关闭 Tomcat 。启动 Tomcat后,打开浏览器,在地址栏中输 http://localhost:8080( Tomcat默认端口为 8080 ),

Page 136: 第 9 章   网络编程技术

• 如果在浏览器中看到 Tomcat 的欢迎界面,表示 Tomcat工作正常。将编写的 *.jsp 放在 f:\Tomcat\webapps\examples\jsp目录下 , 在地址栏中输入http://localhost:8080/examples/jsp/*.jsp则可实现信息发布。

• 2 ) JSP特点• JSP是 Java Server Pages 的缩写。 JSP具有以下 5 大特

点。• ( 1 )将内表的生成和显示进行分离• 使用 JSP 技术, Web 页面开发人员可以使用 HTML 或者 XML 标识来设计和格式化最终页面。使用 JSP 标识或者脚本来生成页面上的动态内容 ( 内容是根据请求来变化的 ) 。生成内容的逻辑被封装在标识和 JavaBeans 组件中,并且捆绑在脚本中,所有的脚本在服务器端运行。如果核心逻辑被封装在标识和 Beans 中,那么其他人,例如 Web管理人员和页面设计者,能够编辑和使用 JSP 页面,而不影响内容的生成。

Page 137: 第 9 章   网络编程技术

• 在服务器端, JSP引擎解释 JSP 标识和脚本,生成所请求的内容 ( 例如,通过访问 JavaBeans 组件,使用 DBCTM技术访问数据库,或者包含文件 ) ,并且将结果以 HTML( 或者 XML) 页面的形式发送回浏览器。

• ( 2 )生成了重用的组件• 绝大多数 JSP 页面依赖于可重用的,跨平台的组件

(JavaBeans 或者 Enterprise JavaBeans TM 组件 ) 来执行应用程序所要求的各种复杂的处理。

• ( 3 ) 采用标识简化页面开发• Java Server Page 技术封装了许多功能,这些功能是与

JSP相关的 XML 标识中进行动态内容生成所需要的。标准的 JSP 标识能够访问和实例化 JavaBeans 组件,设置或者检索组件属性,下载 Applet ,以及执行用其他方法更难于编码和耗时的功能。

Page 138: 第 9 章   网络编程技术

• ( 4 ) 健壮的存储管理和安全性 • 由于 JSP 页面的内置脚本语言是基于 Java 的编程语言,而

且所有的 JSP 页面都被译成为 JavaServlet ,所以 JSP 页面就具有 Java 技术的所有优势,包括健壮的存储管理和安全性。

• JSP模型是在 ASP 之后定义的,它借用了 ASP 的许多优点,如 Session、 Application 等对象。同时 JSP 使用灵活而强大的 JAVA 语言,而不是低效的 Scripting 语言。 ASP开发者只能使用基于 Windows 平台的技术,而 Java和 JSP是跨平台的。

• 2. JSP 基础• JSP 技术允许 Web开发设计者轻松地创建能够处理现有商业系统的动态Web 页面。作为 Java 技术家族的成员,它能够快速地发展基于 Web 的与平台无关的应用。

Page 139: 第 9 章   网络编程技术

• JSP将用户界面和内容产生轻松地分离开来,使得开发者可以全面地改变版面而不用修改底层的动态内容。从最简单的角度来说, JSP 页面首先是一个简单的 HTML Web 页面。我们先来看一个简单的实例,参见例 9.16

• 例 9.16 第一个 JSP 程序• 首先,我们编写一个静态的 HTML 文件,在这个文件里面,我们显示一句话: Hello World!我们把它命名为:hello.htm ,代码如下

• <html>

• <head>

• <title> 这个静态 Html 文件从 1 号字到 6 号字显示: Hello,World!</title>

• </head>

• <body bgcolor="#FFFFFF"text="#000000">

Page 140: 第 9 章   网络编程技术

• <table width="400' border="0", cellspacing="0" cellpadding="0" align="center"

• height="300">• <tr>• <td><fontsize="1">Hello, welcome into HTML World!</font></td>• </tr>• <tr>• <td><fontsize="2">Hello, welcome into HTML World!</font></td>• </tr>• <tr>• <td><fontsize="3">Hello, welcome into HTML World!</font></td>• </tr>• <tr>• <td><fontsize="4">Hello, welcome into HTML World!</font></td>• </tr>• <tr>• <td><fontsize="5">Hello, welcome into HTML World!</font></td>• </tr>

Page 141: 第 9 章   网络编程技术

• <tr>• <td><fontsize="6">Hello, welcome into HTML

World!</font></td>• </tr>• </table>• </body>• </html>• 下面,我们书写一个 JSP 页面,这个页面显示效果和上面

的静态 HTML 文件一模一样。• 例 9.17 JSP 页面• <html>• <head>• <title> 这个动态 JSP 文件从 1 号字到 6 号字显示

Hello, welcome into HTML World:</title>• </head>• <bodybgcolor="#FFFFFF"text="#000000">

Page 142: 第 9 章   网络编程技术

• <table width="400" border="0" cellspacing="0" cellpadding="0" align="center"

• height="300">• <%for(int i=1;i<=6;i++){%>• <tr>• <td>• <font size="<%=i%>">• Hello, welcome into HTML world!• </font>• </td>• </tr>• <%}%>• </table>• </body>• </html>

Page 143: 第 9 章   网络编程技术

• 可以看出, JSP 文件其实就是在 HTML 文件中插入了一些程序段,这些程序段用于处理能够产生动态内容的逻辑应用程序。

• 同时,这些逻辑应用程序也许会包含一个JavaBeans ,或者是一个 JDBC 对象,也或者是一个 Enterprise JavaBeans ,也许是一个 Remote Method Invocation(RMI 远程的方法调用 ) 对象。所有这些都能够轻松地访问 JSP 页面。

• 3. 在 JSP 页中使用 JavaBeans• 使用 JavaBean是 JSP 的最突出的特性之一,我们知道 JavaBeans 的强大、灵活和跨平台性,是微软的 Com不能比拟的,使用 JavaBeans 使得JSP更加强大了 。

Page 144: 第 9 章   网络编程技术

• JavaBean 实际上是一种 Java 类 (class) ,通过封装属性和方法成为具有某种功能或者处理某个业务的对象。 JavaBean被组织成为 package( 数据包 ) 以便进行管理,实际上就是把一组 JavaBean 一起放在某某目录中,每个类的定义前加上 package某某,本例中为 example 。目录 example 必须放在系统环境 CLASSPATH 包含的目录下,系统才能找到其中的 JavaBean。 JSWDK 在缺省状态下将 \jswdk-1.0.1 \webpages \WEB-INF \jsp \beansh 加入CLASSPATH 。建立自己的 JavaBean和 package时,就放在这个目录中也不失为一种简易的方法。

• 下面介绍一个简单的 JavaBean框架。• 例 9.18 用文本编辑器创建一个文本文件

helloWorld.java ,其内容如下:

Page 145: 第 9 章   网络编程技术

• 用 JavaBeans 的形式书写一个从 1 号字到 6 号字的 JSP页面。 JavaBeans 源文件的文件名为 TestFontjava

• public class TestFont{• int count= 1;• public void setCount(int count){• this.count= count;• }• public String show(){• String str = "";• for(int i=1;I<count+1;i++)• str=str+"<font size=\""+I+""\">Hello welcome into HTML

world</font></br>";• return str;• }• }

Page 146: 第 9 章   网络编程技术

• 这个 Java 文件从外部接受一个变量 : count 。方法 : setCount 设置了要显示的最大字号。整个程序比较简单,编写好这样一个 Java 文件以后,必须要编译成为 Class 文件,才能在 JSP 页面中直接引用。 helloWorld.java 编辑好后,在 DOS状态下,用 JDK的 javac命令编译 hello World.java 如下:

• javac helloWorld.java

• [注意 ]Java 是区分大小写的,在程序中,编译命令行中字母的大小写都不能写错。

• 编译成功就表示建立了一个 JavaBean 。• 例 9.19 在 JSP 中使用这个 JavaBean 。用文本编辑器创建

一个文本文件 firstbean.jsp ,其内容如下:• <html>

• <head>

Page 147: 第 9 章   网络编程技术

• <title>调用 Beans 实现从 1 号字到 6 号字显示Hello, welcome into HTML World!</title>

• </head>• <body bgcolor="#FFFFFF"text="#000000">• <table width="400" border="0" cellpadding="0'

align="center"• height"300">• <tr>• <td>•

<jsp:useBeanid="fount"scope="page"class="TestFont"/> //引用 Beans 。

• <%fountsetCount(6);%> //setCount 方法,定义最大显示字号

• <%=font.show()%> //show 方法,显示内容

• >• </td>

Page 148: 第 9 章   网络编程技术

• </tr>• </table>• </body>• </html>• 从这里可以看出来,在一个 JSP 页面中,将用户界面和程

序逻辑分离开来,可以非常便利地为 Web 页面设计人员分派任务。这也使得程序开发者可以开发出更有利于更新和重复利用的应用程序。因此, JSP 结合 JavaBeans做网站开发,是比 JavaServlet更灵活的产生动态页面的途径。

• 4. Java Servlet• 关于 Servlet诞生的最初念头是想把 Java代码嵌入到

HTML 或者 XML代码文件中去,后来就产生了 Java Servlet。 Java Servlet 能够产生动态的内容。在 Java Servlet中 Java代码是焦点所在,静态的 HTML代码只是在需要的地方通过 Java代码输出到浏览器端。所以对于大多数人来说一旦要测试、重载一个新的 Servlet状态、修改(哪怕是修改一个静态的 HTML 标记 ) 的时候就必须对源文件重新编译,这无疑是让人烦恼的事情。

Page 149: 第 9 章   网络编程技术

• 当 SUN公司的程序员在编写 Java Web Sewer 的时候,产生了一种设想,他们想改变这种观念,焦点不再放在 Java代码上,而是放在 HTML 语句上,因为 HTML代码能够很方便地被页面制作者修改和维护,而 Java 程序员也能够自如地驾驭程序代码。于是 Java Server Pages 应运而生,原来乏味的卸载和重载 Servlet 的过程被简单的 JSP 服务器动作代替,这个 JSP 服务器能够检测到 JSP 页面的改变。

• Java Servlet 可以创建动态的页面,包含从服务器端传送数据的对象。 Servlet 产生 Web 页面是将所有的 HTML代码和应用程序陈述代码都放在一个 Java 类里面,这就意味着如果要修改应用程序代码就必须修改和重新编译 Servlet源文件。因为编写 HTML代码和编写 Servlet 源代码也许不是同一个人,所以更新 Servlet 基于 Web 的应用程序是一个棘手的问题。

Page 150: 第 9 章   网络编程技术

• 例 9.20 JSP与 JavaServlet 程序比较实例 • import java.io.*;

• import javax.servlet.http.*;

• public class Hello WWW extends HttpServlet{

• public void doGet(HttpServletRequest request, HttpServletResponse response)

• throws ServletException,IOException{

• response.setContentType("text/html");

• PrintWriter out=response.getWriter();

• out.println("<!DOCTYPE HTML PUBLIC\"-//W3C//DTD HTML 4.0"+

• "Transitional//EN\">\n"+

• "<HTML>\n"+

Page 151: 第 9 章   网络编程技术

• "<HEAD>\n"+• "<TITLE>调用 Beans 实现从 1 号字到 6 号字显示 Hello, welcome into HTML World!</TITLE>\n"+

• "</HEAD>\n"+• "<BODY>\n"+• "<table border=0 align=center>\n");• for(int i=1;i<7;i++){• out.println("<tr>\n"+• "<td>\n"+• "<font size=1>Hello welcome into HTML World!</H1>\n"+• "</td>\n"+• "</tr>\n");• }• out.println("</BODY></HTML>");• }• }

Page 152: 第 9 章   网络编程技术

• 相反,如果将 JSP 页面作为 Java Servlet 应用程序接口,一切将会变得简单。实际上也是如此, JSP 页面在执行前被编译成为 Servlet ,所以 JSP 包含 Servlet 的所有优点。包括调用 Java API 。

• JSP 大体上提供一个更高级的产生 Servlet 的途径 ;• · JSP 可以轻松地和静态的 HTML、 XML 结合,产生动态内容 ;

• · JSP 页面在被请求时被动态地编译成为 Servlet ,便于更新,而且在需要的时候可以提前预编译 ;

• · 调用 JavaBeans的 JSP 标签完全地操纵 JavaBeans 部分,屏蔽了复杂的应用程序代码 ;

• · 开发者可以提供一个 JSP 标签库,页面作者可以用类XML 的语法加以调用 .

• 页面作者可以编辑一个页面中固定的模板而不会影响逻辑应用程序;同样,开发者可以改变应用程序逻辑,不用去修改那些调用了这些逻辑的页面。

Page 153: 第 9 章   网络编程技术

习题 9

(1)HTML是——————的语法基础,最早源与————标志语言 SGML。 HTML 文件是由 ___________和___________ 组成的。

(2)试使用超文本标记语言 HTML 编写一个校园介绍的主页。(3 )试使用 DHTML 语言编写一个课程介绍的主页。(4) 试简述 Java 语言的特点 (5) 什么是 ASP 技术?试简述 ASP 技术的特点。(6) 试利用 ASP 技术编写一个学习指导的交互式网页。(7) 什么是 JSP 技术?试简述 JSP 技术的特点。(8) 试利用 JSP 技术编写一个学习指导的交互式网页。