2008年(3500)
分类:
2008-05-04 19:14:12
教 学 纲 要
Java 为我 们 提 供 了 强 有 力 的 网 络 功 能 , 也 正 是 由 于 它 的 强 大 的网 络 功 能 的 支 持 , Java 才 得 到 大 家 如 此 的 青 睐 。 不 信 你去 试 试 , 开 发 类 似 的 网 络 程 序 用 其 他 编 程 语 言 比 用 Java 复 杂 得 多 。
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>
< /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: // );
// 创 建 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 的 一 些 简 单 的 网 络 功 能 , 主 要 介绍 以 下 几 个 方 面 的 内 容 :