Java的网络知识

  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()));

时间: 2024-11-03 09:54:43

Java的网络知识的相关文章

源代码-关于java中网络爬虫,jsoup相关的知识

问题描述 关于java中网络爬虫,jsoup相关的知识 关于java中网络爬虫,jsoup相关的知识.有时候在审查元素里面/源代码里面看不到需要获取的列表链接,在这个netword里面能找到.这种location属性的值我们怎么才能获取到呢?求解 解决方案 http://blog.csdn.net/column/details/jsoup.html

如何使用Java测试网络连通性

概述 在网络编程中,有时我们需要判断两台机器之间的连通性,或者说是一台机器到另一台机器的网络可达性.在系统层面 的测试中,我们常常用 Ping 命令来做验证.尽管 Java 提供了比较丰富的网络编程类库(包括在应用层的基于 URL 的网 络资源读取,基于 TCP/IP 层的 Socket 编程,以及一些辅助的类库),但是没有直接提供类似 Ping 命令来测试网络连通 性的方法.本文将介绍如何通过 Java 已有的 API,编程实现各种场景下两台机器之间的网络可达性判断.在下面的章节中 ,我们会使

Java解析网络数据流的三种特殊方法

Java作为最开放的语言,已越来越受到网络程序员的青睐.但这一青睐族有着同样的经历--曾经都为网络上通信的Java数据格式而烦脑. 笔者也不例外,曾经为此而查阅了很多文档,经过反复测试才 得以解决,如今笔者已经在所从事的很多电子政务项目中顺利的应用.今天笔者写此文,介绍用Java解析网络数据的三种特殊方法,希望对正在寻求这方面问题答案的读者有所帮助. UTF8转换成GB2312 当我们在基于HTTP协议的JSP或Servlet的应用中获取数据或发送请求时,JVM会把输送的数据编码成UTF8格式.

java获取网络类型的方法_java

本文实例讲述了java获取网络类型的方法.分享给大家供大家参考.具体如下: /**** * 获取网络类型 * * @param context * @return */ public static String getNetType(Context context) { try { ConnectivityManager connectMgr = (ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVIC

Java IO: 网络

原文链接 作者: Jakob Jenkov 译者: 李璟(jlee381344197@gmail.com) 校对:方腾飞 Java中网络的内容或多或少的超出了Java IO的范畴.关于Java网络更多的是在我的Java网络教程中探讨.但是既然网络是一个常见的数据来源以及数据流目的地,并且因为你使用Java IO的API通过网络连接进行通信,所以本文将简要的涉及网络应用. 当两个进程之间建立了网络连接之后,他们通信的方式如同操作文件一样:利用InputStream读取数据,利用OutputStre

Java的网络功能与编程 一

编程|网络 Java的网络功能与编程徐迎晓(上海大学计算中心25#)                       摘  要:Java语言是Internet上最热门的编程语言,本文针对        Java的网络功能,对Java从网络上获取图象.声音.        HTML文档及文本文件等编程方法作了初步的介绍,同        时介绍了动态获取网络上资源的方法作了介绍.文中        提供了大量简明易懂的实例. 关键词:Java:Internet:网络     Java语言是Intern

JAVA的网络功能与编程 二

编程|网络     五.显示网络上其他HTML文档     利用Java提供的getAppletContext().showDocument(URL)可以 显示其他结点的HTML文档,同前面的显示网络上其他结点的图象, 有两种格式,下面各举一例:                       ●程序8   格式一 import java.applet.*; import java.awt.*; import java.net.*; public class showdoc extends Appl

Java Applet基础知识

Java Applet 是用Java 语言编写的一些小应用程序,这些程序是直接嵌入到页面中,由支持Java的浏览器(IE 或 Nescape)解释执行能够产生特殊效果的程序.它可以大大提高Web页面的交互能力和动态执行能力.包含Applet的网页被称为Java-powered页,可以称其为Java支持的网页. 当用户访问这样的网页时,Applet被下载到用户的计算机上执行,但前提是用户使用的是支持Java的网络浏览器.由于Applet是在用户的计算机上执行的,所以它的执行速度不受网络带宽或者Mo

Java的网络功能与编程

摘 要:本文初步介绍了如何使用Java编程语言从网络上获取图象.声音.HTML文档及文本文件等的方法,还介绍了如何动态获取网络资源,同时提供了大量简明易懂的实例. 关键词:Java:Internet:网络 Java语言是Internet上新兴的编程语言,对Java的特性以及基本的编程方法已有很多文章作过介绍.但是,广大Java爱好者更希望了解Java更深一步的编程方法,本文就Java的网络功能及其编程方法作一初步的介绍. 为了方便初次接触Java的读者,本文先就Java编程的一些常识作简单介绍.