Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1528468
  • 博文数量: 3500
  • 博客积分: 6000
  • 博客等级: 准将
  • 技术积分: 43870
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-03 20:31
文章分类

全部博文(3500)

文章存档

2008年(3500)

我的朋友

分类:

2008-05-04 19:14:12

一起学习

    教 学 纲 要

    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>
    < /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 的 一 些 简 单 的 网 络 功 能 , 主 要 介绍 以 下 几 个 方 面 的 内 容 :

    • URL 的 结 构 有 一 定 的 规 律 性 , 由 传 输 协 议 和 资源 名 称 两 部 分 组 成 , 中 间 用 “ : // ” 分 隔 开 。
    • Java 语 言 提 供 了 URL 类 java.net.URL , 为 我 们 使 用 URL 访 问 网 络 资 源 定 义 了 许 多 方 法 。
    • URL 类 有 四 种 构 造 方 法 , 我 们 可 以 根 据 需 要 选择 其 中 一 种 。
    • URL 类 提 供 了 许 多 简 单 地 方 法 : 获 取 URL 信 息 ,将 URL 的 内 容 转 成 字 符 串 以 及 比 较 两 个 URL 的 数 据 等 方 法, 通 过 例 程 序 我 们 可 以 很 清 楚 地 了 解 它 们 的 使 用 方 法 。
    • 本 章 我 们 只 介 绍 了 简 单 地 通 过 URL 类 访 问 网 络资 源 的 方 法 , 类 java.applet.Applet 提 供 的 方 法 getImage( ) 能 够利 用 URL 对 象 获 取 网 络 上 的 图 象 。 读 取 网 络 资 源 数 据 之 前, 建 立 数 据 流 。

     

下载本文示例代码


第二十二讲 网络功能(二)第二十二讲 网络功能(二)第二十二讲 网络功能(二)第二十二讲 网络功能(二)第二十二讲 网络功能(二)第二十二讲 网络功能(二)第二十二讲 网络功能(二)第二十二讲 网络功能(二)第二十二讲 网络功能(二)第二十二讲 网络功能(二)第二十二讲 网络功能(二)第二十二讲 网络功能(二)
阅读(128) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~