教 学 纲 要
Java 为我 们 提 供 了 强 有 力 的 网 络 功 能 , 也 正 是 由 于 它 的 强 大 的网 络 功 能 的 支 持 , Java 才 得 到 大 家 如 此 的 青 睐 。 不 信 你去 试 试 , 开 发 类 似 的 网 络 程 序 用 其 他 编 程 语 言 比 用 Java 复 杂 得 多 。
通 过 URL 利 用 网 上 资 源 Java 开 发 环 境 提 供 URL 类 是 为 了 我 们 更方 便 地 利 用 网 上 资 源 , 一 个 URL 类 创 建 的 对 象 就 代 表 了 某一 个 网 络 资 源 。 当 一 个 URL 对 象 建 立 好 后 , 我 们 就 可 以 比较 容 易 地 取 得 这 个 URL 位 置 的 数 据 。
下 面 我 们 介 绍 两 种 简 单 的 通 过 URL 利 用网 上 资 源 的 方 法 , 通 过 URL 获 取 一 幅 图 象 , 通 过 URL 读 取网 络 资 源 的 数 据 。 如 果 有 兴 趣 , 你 可 以 修 改 下 面 的 程 序, 或 编 写 自 己 的 新 程 序 , 实 现 更 多 的 功 能 。
送 你 一 幅 美 丽 的 图 片
使 用 URL 可 以 给 我 们 带 来 网 络 上 美 丽 的图 象 。 想 知 道 方 法 吗 ? 其 实 这 样 的 例 子 比 较 多 , 因 为 这里 用 到 的 方 法 非 常 适 合 我 们 理 解 。
程 序 19.4
// images.java
import java.awt.*; // 引 入 类 及 类 库
import java.applet.Applet;
import java.net.*;public class images extends Applet // 定 义 applet 主类
{
Image image;
public void init( )
{
try{ // 异 常 处 理
URL graphURL ; // 创 建 URL 对 象
graphURL = new URL("http: // www.sun.com/datacenter/products/starfire/images/logo.gif ");
image = getImage(graphURL); // 获 取 图 象
}
catch(MalformedURLException e)
{
System.out.println("MalformedURLException:" e);}
}
public void paint(Graphics g) // 定 义 方 法 paint( )
{
g.drawImage(image,0,0,200,200,this); // 显 示 图象
}
}其 HTML 文 件 如 下 :
< HTML>
< HEAD>
< TITLE>class images < /TITLE>
< /HEAD>
< BODY>
< APPLET CODE = "images.class"WIDTH = 300 HEIGHT = 200></applet>
< /BODY>
< /HTML>在 支 持 Java 的 网 络 浏 览 器 上 运 行 该 程 序, Java Applet 就 会 给 你 带 来 这 幅 美 丽 的 图 片 ( 图 19.2 ) :

图 19.2 程 序 19.4 运 行 结 果方 法 drawImage( ) 的 参 数 分 别 代 表 什 么 ?
是 由 类 java.awt.Graphics 定 义 的 , Graphics 类 定 义 了 四 种 drawImage( ) 方 法 , 我 们 选 择 了 其 中 的 一 种 :
public abstract boolean drawImage(Image img,intx,int y,int width,int height,ImageObserver observer)
其 中 img 表 示 要 显 示 的 图 象 ; ( x,y )表 示 图 象 显 示 位 置 的 左 上 角 的 坐 标 ; width 表 示 图 象 的 宽度 ; height 表 示 图 象 的 高 度 ; observer 表 示 用 于 实 现 ImageObserver 界 面 的 对 象 , 我 们 一 般 取 this 。程 序 结 构 很 简 单 , 首 先 在 方 法 init( ) 中创 建 一 个 URL 对 象 , 并 利 用 方 法 getImage( ) 获 取 图 象 , 然 后在 方 法 paint( ) 中 利 用 类 java.awt.Graphics 提 供 的 显 示 图 象 的方 法 drawImage( ) , 显 示 图 象 。
如 果 我 们 把 这 个 Java applet 放 到 浏 览 器中 运 行 , 图 象 的 获 取 发 生 在 第 一 次 访 问 含 有 该 Java applet 的 主 页 , 只 要 不 退 出 浏 览 器 , 每 次 光 顾 这 个 主 页 时 , Java applet 只 完 成 显 示 图 象 的 过 程 。
方 法 getImage( ) 是 在 哪 定 义 的 ? 为 什 么找 不 到 它 的 定 义 ?
方 法 getImage( ) 并 不 是 在 Java applet 中 直接 定 义 的 , 类 java.applet.Applet 为 我 们 提 供 了 方 法 getImage( ) , getImage( ) 以 包 含 图 象 的 URL 地 址 作 为 参 数 , 获 取 网 络的 图 象 资 源 。通过 数 据 流 读 取 资 源 数 据
我 们 与 网 络 上 的 文 件 就 像 我 们 与 住 在另 一 个 城 市 中 的 朋 友 一 样 , 我 们 要 拜 访 另 一 个 城 市 的 朋友 , 两 个 城 市 之 间 必 须 有 一 条 道 路 。 那 么 网 络 资 源 也 一样 , 我 们 要 访 问 网 络 资 源 , 就 得 先 在 我 们 的 机 器 与 资 源之 间 修 一 条 “ 路 ” , 也 就 是 建 立 一 条 通 信 链 路 。
数 据 流 实 际 就 是 数 据 的 一 种 通 信 通 道, 包 括 数 据 的 起 点 和 终 点 。 例 如 我 们 要 把 网 络 上 的 资 源信 息 读 入 到 本 地 机 器 中 的 一 个 文 件 FILE1 中 , 那 么 如 图 19.3 所 示 , 信 息 的 通 道 就 是 一 个 数 据 流 , 它 的 起 点 是 网 络 资源 , 终 点 是 文 件 FILE1 。

图 19.3 网 络 中 的 数 据 流简 单 的 读 出 资 源 数 据 可 以 由 方 法 openStream( ) 实 现 。 使 用 方 法 openStream( ) 可 以 将 资 源 数 据 转 化 为 数 据流 , 为 网 络 资 源 和 URL 对 象 之 间 建 立 一 条 通 信 链 路 。 下 面是 一 个 通 过 URL 使 用 网 络 资 源 的 例 子 :
程 序 19.5
// useURL.java
import java.net.*; // 引 入 类 库
import java.io.*;
class useURL // 定 义 类 useURL
{
public static void main(String args[])
{
try
{
URL resource = new URL("http: // www.javasoft.com/java/index.html"); // 创 建 URL 对 象
String oneline; // 下 一 条 语 句 建 立 数 据 流
DataInputStream stream = new DataInputStream(resource.openStream( ));
while((oneline = stream.readLine( ))! = null) // 将数 据 一 行 行 读 入 , 存 入 字 符 串 oneline
{System.out.println(oneline);} // 将 数 据 输 出 到屏 幕
stream.close( ); // 关 闭 数 据 流
}
catch(MalformedURLException e){ // 异 常 处 理
System.out.println("MalformedURLException:" e);}
catch(IOException IOe){
System.out.println("IOException:" IOe);}
}
}在 这 个 程 序 中 我 们 首 先 创 建 一 个 URL 对象 , 使 用 URL 类 提 供 的 方 法 openStream( ) 得 到 输 入 流 类 InputStream 的 对 象 。
DataInputStram 是 由 包 含 在 java.io 中 的 一 种输 入 流 , 它 必 须 连 接 到 其 他 的 输 入 流 上 才 能 使 用 。 本 例中 我 们 通 过 下 面 的 语 句 将 它 连 接 到 InputStream 上 , 建 立 数据 流 : DataInputStream stream = new DataInputStream(resource.openStream( ));
建 立 数 据 流 之 后 , 使 用 类 DataInputStream 提 供 的 方 法 readLine 从 文 件 中 一 行 行 地 读 出 数 据 , 返 回 值存 放 到 字 符 串 变 量 oneline 中 。 while 循 环 语 句 控 制 程 序 流程 , 读 出 一 行 , 在 屏 幕 上 输 出 一 行 , 直 到 文 件 结 束 , 用方 法 close( ) 关 闭 数 据 流 。
运 行 程 序 useURL.java , 我 们 可 以 看 到 文件 的 内 容 一 行 一 行 地 显 示 到 屏 幕 上 。
小 结
Java 为 我 们 提 供 了 强 有 力 的 网 络 功 能 ,我 们 在 这 里 只 讨 论 Java 的 一 些 简 单 的 网 络 功 能 , 主 要 介绍 以 下 几 个 方 面 的 内 容 :
- URL 的 结 构 有 一 定 的 规 律 性 , 由 传 输 协 议 和 资源 名 称 两 部 分 组 成 , 中 间 用 “ : // ” 分 隔 开 。
- Java 语 言 提 供 了 URL 类 java.net.URL , 为 我 们 使 用 URL 访 问 网 络 资 源 定 义 了 许 多 方 法 。
- URL 类 有 四 种 构 造 方 法 , 我 们 可 以 根 据 需 要 选择 其 中 一 种 。
- URL 类 提 供 了 许 多 简 单 地 方 法 : 获 取 URL 信 息 ,将 URL 的 内 容 转 成 字 符 串 以 及 比 较 两 个 URL 的 数 据 等 方 法, 通 过 例 程 序 我 们 可 以 很 清 楚 地 了 解 它 们 的 使 用 方 法 。
- 本 章 我 们 只 介 绍 了 简 单 地 通 过 URL 类 访 问 网 络资 源 的 方 法 , 类 java.applet.Applet 提 供 的 方 法 getImage( ) 能 够利 用 URL 对 象 获 取 网 络 上 的 图 象 。 读 取 网 络 资 源 数 据 之 前, 建 立 数 据 流 。
第二十二讲 网络功能(二)
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>

被折叠的 条评论
为什么被折叠?



