学习网考试学习资料

Gzu521.com

Java的网络知识

Java教程   点击:次   发布时间:2005-9-14   【字体: 】   来源:Gzu521.com
贵 州 学 习 网

  1) 从网络上加载apple(小应用程序)

  现在的大多数浏览器都不约而同地对Java进行支持。在html语言中,在.html文件的任何的位置上有一个特殊标记。这句话就是对小应用程序的引用。小应用程序没有受到地域的限制,它可以在本地,也可以在internet上的任何一个地方。其位置对于用户来讲是透明的。而对于浏览器来讲,其位置在中被读出,然后进行定位小应用程序,并运行它。如果小应用程序位于远程计算机上,那么浏览器就必须小载它,然后才可运行。

  (2) 从url加载图像

  首先,必须先介绍url。它表示一个通过资源定位器(uniform resource locator),是网络上某些资源的地址。java程序可以使用一个url来引用或连接网络资源。如:
  如果需要从远程加载一张图时,java程序必须先创建一个url,以包含图像的地址。
  url是java程序里高级别的交互功能。

  二、url及其使用

  url代表通用资源定位器。将url提供给网络浏览器,那么它就可以在internet上寻找并定位文件。在编写java程序时,也可以用url在互联网上寻找希望访问的资源。类组java.net中包含一个名为url的类,java可以使用它来表示一个url地址。
  这里需要区别的是:url地址表示一个internet地址,而url对象则指代java程序中的类url的一个实例。

  (1) url的定义

  url是一个缩写,代表通过资源定位(uniform resource locator),是对internet资源的一个引用(一个地址)。
  url不但可以表示网络上的一个文件的名称,而且可以指向网络上的其它资源,如:数据库查询和命令输出。如:
  http://java.SUN.com//
  所有的url拥有两个主要的组成部分:
  (1) 协议辨识符;
  (2) 资源名称。
  上面的例子中,http为协议辨识符,而//java.sun.com/为资源名称。
  协议辨识符说明被使用来获取资源的协议的名称。示例使用超文本传输协议(http),它用在超文本文档服务中使用。http只是被用来访问网上不同类型资源的多种不同协议之一。其它的协议还包括文件传输协议(Ftp)、gopher、文件(file)和新闻(news)。
  资源名称是资源的完整地址。资源名称的格式完全依赖于使用的协议,但对于大多数格式而言,资源名称包括下面组件的一种或多种:
  (1) 宿主名称:资源所处的机器的名称。
  (2) 文件名:机器上文件的路径。
  (3) 端口号:连接的端口号(一般为可选项)。
  (4) 引用:对于资源内部一个有名连接(anchor)的一个引用;它常常指代一个文件内的特定位置(一般为可选项)。
  大多数情况下,宿主名称和文件名是必须的,而端口号以及引用则是可选的。上面的示例中java.sun.com为宿主名称,冒号后的第一个斜线’/’是文件/index.html的简写。
  在构建任何url的时候,都应该将协议辨识符放在首位,后面紧跟冒号’:’,然后才是资源名称,即:
  protocolid:resourcename
  在类组java.net中包含一个类url,java程序使用它代表一个url地址。java程序可以构造一个url对象,打开对它的一个连接,然后在这个连接中读入和写出。

  三、创建一个url

  在java程序中,可以创建一个url对象以表示一个url地址。url对象总是指向一个绝对的url,但它可以由一个绝对的url、一个相对的url或url组件构造而来。
  创建一个url对象的最简单的方法就是从一个表示url地址的“可阅读”形式的字符串创建。
  在java中,可以使用上述文字的字符串创建一个url对象:
  url gamelan=new url(http://www.LINUXaid.com.cn/)
  这种方法创建的url对象表示一个绝对的url。一个绝对的url包含了到达资源所需的所有信息。另外,还可以由一个相对的url地址创建url对象。

  (1) 相对url

  一个相对url只包含到达对于另一个url(或处于另一个url上下文之中)的资源的足够信息。
  在html文件中常常使用相对的url指定资源的位置。如有两个文件1.html、2.html和3.html,并且它们在同一个目录下面,那么在1.html中如果需要调用2.html和3.html则必须写入:
  my story   picture of my PETS   这些url均为相对的url,即:这些url相对于包含它们的文件1.html。
  在java中中,可以由一个相对的url指定创建一个url对象。例如,假设程序已经为http://www.linuxaid.com.cn/创建了一个url对象,而且已经知道该站点的一个文件的名称为linuxaid.animation.html,则就可以在初始的linuxaid url上下文中,通过简单地指定文件名,为linuxaid站点的这个文件创建url:
  url linuxaid = new url(http://www.javaworld.com/);
  url linuxaidanimation = new url(linuxaid,”linuxaid.animation.html”);
  上面的代码使用用了类url的另一种形式的构造过程,它允许你由一个url对象(基本url)和一个相对的url创建一个对象。
  这个构造过程也可以用来创建对一个文件中的有名连接(引用)的url对象。例如,假设文件“linuxaid.animation.html”中包含一个有名连接bottom,它在文件的底部,
  则可以使用相对url构造过程创建一个url对象(在下面的语句中bottom前的字符#是必须的):
  url linuxaidanimationbottom=new url(linuxaid,”#bottom”);
  这种url构造过程的一般形式为:
  url(url baseurl,string relativeurl)
  其中,第一个参数是一个url对象,指定新的url的基址,第二个参数为一个string对象,是对相对于基址的资源名称的描述。如果baseurl为null,那么这个构造过程就将relativeurl视为一个绝对的url指定。但如果relativeurl是一个绝对的url指定,那么构造过程将忽略baseurl。

  (2)其它的url构造过程

  除前面介绍的类url的构造过程外,类url还提供了另外两个构造过程。当你使用url的时候,例如http的url,它的资源名称部分包含宿主名称、文件名称、端口号和
  引用等组件,这些构造过程就很有用了。如果不清楚包含完整url的string对象,只要知道url的不同组件,使用这两个构造过程就显得非常方便。
  如果需要设计一个网络程序,让用户使用鼠标选择协议、宿主名称、端口号和文件名,则可以由这些组件构造一个url。类url提供了用协议、宿主名称和文件名创建一个url的构造过程。下面的代码就创建了一个指向linuxaid站点的linuxaid.animation.html文件的url:
  url linuxaid = new url(“http”,”www.linuxaid.com.cn”,”/linuxaid.animation.html”);
  该语句和url linuxaid=url(http://www.linuxaid.com.cn/linuxaid.animation.html);是等价的。其中,第一个参数为协议,第二个参数为宿主名称,最后一个为文件的路径名。
  注意,文件名的开头为一个斜线’/’,说明文件名相对于宿主的根目录。
  类url的另一个构造过程还在参数列表中添加了端口号,例如:
  url linuxaid = new url(“http”,www.linuxaid.com,80,”/linuxaid.animation.html”);
  其中,80是端口号,别的参数同前。该语句创建了如下的一个url对象:
  http://www.linunaid.com.cn:80/linunxaid.animation.html
  如果使用这些过程创建一个url对象,就可以通过使用url的过程tostring()或过程toexternalform()得到一个包含完整url地址的string对象。

  (2) 异常malformedurlexception

  在类url的构造过程的两个版本中,当传递给它们的参数指向一个空的或不知道的协议时,它们都抛出一个malformedurlexception异常。如果希望捕捉和处理这个异常,只要将url的构造过程语句放在一个try/catch中即可。例如:
  try{
  url url=new url(….);
  }catch (malformedurlexception e){
  //异常处理代码
  }

  四、分析一个url

  类url提供一些查询url对象的过程,可以用它们获取一个有效的url对象所包含的协议、宿主名称、端口号和文件名。下面是这些过程的功能描述:
  (1) getprotocol( ),返回url的协议辨识符组件。
  (2) gethost(),返回url的宿主名称组件。
  (3) getport(),返回url的端口号组件;如果端口没有设置,返回-1;
  (4) getfile(),返回url的文件名组件。
  (5) getref(),返回url的引用组件。
  请注意;并非所有的url地址都包含这些组件。类url提供这些过程的原因是http url包含这些组件,而且它们可能是最常使用的url。类url在某种程序是以http为中心的。
  可以使用这些getxxx()过程获取关于url的信息,它们与创建url对象的构造过程无关。
  下面给出一个示例程序parseurl,它由一个指定url的字符串创建了一个url对象,然后使用url对象的存取过程分析url;
  import java.net.*;
  class parseurl{
  public static void main(string[] args){
  url url = null;
  try{
  url = new url(http://www.ncsa.uiuc.edu:8080/demoweb/urlprimer.html#install);
  system.out.println(“protocol = “+ url.getprotocol());
  system.out.println(“host =”+url.gethost());
  system.out.println(“filename =”+url.getfile());
  system.out.println(“port=”+url.getport());
  system.out.println(“ref=”+url.getref());
  }catch (malformedurlexception e){
  system.err.println(“malformedurlexception:”+e);
  }
  }
  }
  下面是程序执行的结果:
  protocol=http
  host=www.ncsa.uinc.edu
  filename=/demoweb/url-primer.html
  port=8080
  ref=install
  使用过程getref()应当注意:在jdk1.02以前的版本中,过程getref()仅对以下两个构造过程创建的url有效:
  url(string absoluteurlspecification);
  url (url baseurl,string relativeurlspecification);
  例如,假设你使用下面的语句创建了一个url:
  url linuxaid=new url(“http://www.linuxaid.com.cn/”);
  url linuxaidanimationbottom=new url(gamelan,”linuxaid.animation.html#bottom”);
  当你对linuxaidanimationbottom调用过程getref()时,它正确地返回”bottom”。但你如果使用下面的语句创建一个指向同一资源的url:
  url linuxaidanimationbottom = new url(“http”,”www.linuxaid.com.cn”,”linuxaid.animation.html#bottom”);
  当调用过程getref()从上面语句所创建的linuxaidanimationbottom中获取信息时,getref()返回null,而不能返回正确值“bottom”。

  五、直接从一个url读入

  在成功创建了一个url以后,就可以调用url的过程openstream()以获取一个流,并从这个流中读入url的内容。过程openstream()返回一个inputstream对象,因此,可以使用
  一般的inputstream过程读入。本书第2.9节描述了java开发环境提供的i/o类及其使用方法。
  从一个url中读入就如同从一个输入流中读入一样容易。下面的java程序openstreamtest使用过程openstream()得到url http://www.javaworld.com/ 上的一个输入流,然后从这个
  输入流中读入url的内容,并显示在屏幕上。
  import java.net.*;
  import java.io.*;
  class openstreamtest{
  public static void main(string[] args){
  try{
  url url = new url(http://www.javaworld.com/);
  datainputstream dis = new datainputstream(url.openstream());
  string str;
  while((str=dis.readline())!=null)
  system.out.println(str);
  dis.close();
  }catch (malformedurlexception e){
  system.err..println(“malformedurlexception:”+e);
  }catch (ioexception e){
  system.err.pintln(“ioexception:”+e);
  }
  }
  }
  }
  当运行程序时,就会看到在http://www.javaworld.com/的html文件中的html命令以及文本内容滚动显示在窗口中。或者,你可能看到:
  ioexception:java.net.unknownhostexception:www.javaworld.com
  上面这条信息说明:可能需要对你的系统进行必要的设置,才能使你的程序能够找到www.javaworld.com服务器
  除了上面提到的过程openstream(),类url还提供了过程getcontent(),它可以直接获取url指向的资源。下面给出的程序fetch展示了使用过程getcontent()具体方法。
  import java.net.*;
  import java.awt.*;
  import java.io.*;
  import java.awt.image.*;

  public class fetch{
  public static string fetch(string addr)
  throws malformedurlexception,ioexception{
  url url = new url(addr);
  return (string)(url.getcontent());
  }

  public static image fetchimage(string addr,component comp)
  throws malformedurlexception,ioexception{
  url url = new url(addr);
  return comp.createimage((imageproducer)(url.getcontent()));
  }

  public static void main(string[] args)
  throws malformedurlexception,ioexception{
  system.out.println(fetch(args[0]));
  }
  }

  fetch只能下载普通的文本文件(非html文件或其它类型的文本文件)。在类fetch中还包括了一个过程fetchimage(),它可以下载gif或其它常见格式的图像,你可以使
  用下面给出的程序fetchimagetest来进行测试。
  import java.awt.*;
  import java.awt.image.*;
  import java.net.*;
  import java.io.*;

  public class fetchimagetest extends frame{
  private image img;

  public void paint(graphics g){
  g.drawimage(img,0,0,this);
  }
  public static void main(string)[] args)
  throws malformedurlexception,ioexception{
  fetchimagetest window = new fetchimagetest();
  window.img = fetch.fetchimage(args[0],window);
  window.resize(300,300);
  window.show();
  }
  }
  在编译完该程序之后,你可以采用以下命令运行该程序:
  java fetchimagetest http://www.xp163.com/files/beyondpic/jeeves.sm.gif
  请注意:普通文本文件和图象文件的下载依赖于java实现的内部“内容处理器”。在jdk环境中,这两个示例程序均可以正常工作,但并不意味着在其它的java实现下也能工作,对于那些没有包含合适的内容处理器的java实现而言,这两个程序就不能工作。如果程序遇到了不支持的内容类型,程序将抛出异常并退出。
  这两个程序只是为了说明过程getcontent()的用法。一般情况下,这不是通过网络加载文本或图象的最好途径,例如,类applet的过程loadimage()就是一个更好的选择。

  六、连接至一个url

  在成功地创建了一个url以后,就可以调用url的openconnection()过程连接至该url。当连接至一个url之后,就通过计算机网络在java程序与url之间建立了一个通信链接。
  过程openconnection()创建一个新的urlconnection对象(如果不存在一个合适的),对它进行初始化,连接至url,并返回urlconnection对象。如果这个过程中某个环节出了问题(例如:服务器已关闭了),过程openconnetion()将抛出一个ioexception异常。
  如果已经成功地连接至希望的url,就能够使用urlconnection对象进行对连接的读写操作,或者查询关于它的内容的信息。下面会介绍如何对一个urlconnection进行读写操作。下面给出的程序geturlinfo首先连接至urlhttp://www.javaworld.com,然后查询urlconnectction对象的有关信息。
  import java.net.*;
  import.java.io.*;
  import java.util.*;

  public class geturlinfo{
  public static void printinfo(urlconnection uc){
  try{
  system.out.println(uc.geturl().toexternalform()+”:”);
  system.out.println(“ content type:” +uc.getcontenttype());
  system.out.println(“content length:”+uc.getcontentlength());
  system.out.println(“last modified:”+new date(uc.getlastmodified()));
F?a.(,{Tq=+E;(,jJX [ 本 资 料 来 源 于 贵 州 学 习 网 网络编程Java教程 http://Www.gzU521.com ] F?a.(,{Tq=+E;(,jJX

责任编辑:gzu521

网络编程分类
ASP教程
.Net教程
Java教程
PHP教程
数据库基础
ACCESS教程
SQL Server教程
MySQL教程
Oracle教程
分类推荐信息
更多...
大类最新文章
更多...