1、创建URL对象

URL类有多种形式的构造函数:

(1) URL ( String url)
  //url代表一个绝对地址,URL对象直接指向这个资源,如:
  URL urll=new URL(http://www.cqwu.edu.cn);

(2) URL ( URL baseURL , String relativeURL)
 // 其中,baseURL代表绝对地址,relativeURL代表相对地址。如:
  URL urll=new URL(http://www.cqwu.edu.cn);
  URL lib=new URL(urll , "library / library.asp");

(3) URL ( String protocol , String host , String file)
  //其中,protocol代表通信协议,host代表主机名,file代表文件名。如:
  new URL ("http" , www.cqwu.edu.cn, "/ test / test.asp");

(4) URL ( String protocol , String host , int port , String file)
  URL lib = new URL ("http" , www.cqwu.edu.cn, 80 , "/ test / test.asp");
(1) URL ( String url)
  //url代表一个绝对地址,URL对象直接指向这个资源,如:
  URL urll=new URL(http://www.cqwu.edu.cn);

(2) URL ( URL baseURL , String relativeURL)
 // 其中,baseURL代表绝对地址,relativeURL代表相对地址。如:
  URL urll=new URL(http://www.cqwu.edu.cn);
  URL lib=new URL(urll , "library / library.asp");

(3) URL ( String protocol , String host , String file)
  //其中,protocol代表通信协议,host代表主机名,file代表文件名。如:
  new URL ("http" , www.cqwu.edu.cn, "/ test / test.asp");

(4) URL ( String protocol , String host , int port , String file)
  URL lib = new URL ("http" , www.cqwu.edu.cn, 80 , "/ test / test.asp");

2、获取URL对象的属性

getDefaultPort(): 返回默认的端口号。
getFile(): 获得URL指定资源的完整文件名。
getHost(): 返回主机名。
getPath(): 返回指定资源的文件目录和文件名。
getPort(): 返回端口号,默认为-1。
getProtocol(): 返回表示URL中协议的字符串对象。
getRef(): 返回URL中的HTML文档标记,即#号标记。
getUserInfo: 返回用户信息。
toString: 返回完整的URL字符串。
getDefaultPort(): 返回默认的端口号。
getFile(): 获得URL指定资源的完整文件名。
getHost(): 返回主机名。
getPath(): 返回指定资源的文件目录和文件名。
getPort(): 返回端口号,默认为-1。
getProtocol(): 返回表示URL中协议的字符串对象。
getRef(): 返回URL中的HTML文档标记,即#号标记。
getUserInfo: 返回用户信息。
toString: 返回完整的URL字符串。

二、Internet寻址

 java.net包可以用32位int形式来操作32位的IP地址(即Internet主机地址)。类InetAddress实际上是可以把Internet地址换算成代表该地址的对象。Java就是靠这个类来显示Internet地址已经相关信息的。 InetAddress有以下常用方法:
  getAddress(): 返回IP地址的字节形式。
  getAllByName(): 返回指定主机名的IP地址。
  getbyAddress(): 返回指定字节数组的IP地址形式。
  getByName(): 返回指定主机名的IP地址对象。
  getHostAddress(): 返回主机地址的字符串形式。
  getLocalHost(): 返回当前主机名。
  hastCode(): 返回InetAddress对象的哈希码。
  toString: 返回地址转换成的字符串。
  InetAddress类没有提供返回构造函数,所以不能用new()方法来创建它的对象,而只可以调用静态方法    getLocalHost()、getByName()、getByAddress()等来生成InetAddress类的实质。

程序代码

import java.net.*;
import java.io.*;
public class InetAddDemo //extends Applet
{
 public void testOperate()
 {
  try
  {
   InetAddress address=InetAddress.getLocalHost();
   log("本机地址字符串:"+address.getHostAddress());
   log("本机主机名:"+address.getHostName());
   log("本机主机名:"+address.getLocalHost());
   log("哈希码:"+address.hashCode());
   byte b[]=address.getAddress();
   System.out.println("字符形式:"+b);
   log("地址字符串:"+address.toString());
  }
  catch(Exception e)
  {
   //e.printStackTrace("不能打开这个URL");
  }
 }
 
 public void log(String strInfo)
 {
  System.out.println(strInfo);
 }
 
 public static void main(String args[])
 {
  InetAddDemo IAdd=new InetAddDemo();
  IAdd.testOperate();
 }
}
import java.net.*;
import java.io.*;
public class InetAddDemo //extends Applet
{
 public void testOperate()
 {
  try
  {
   InetAddress address=InetAddress.getLocalHost();
   log("本机地址字符串:"+address.getHostAddress());
   log("本机主机名:"+address.getHostName());
   log("本机主机名:"+address.getLocalHost());
   log("哈希码:"+address.hashCode());
   byte b[]=address.getAddress();
   System.out.println("字符形式:"+b);
   log("地址字符串:"+address.toString());
  }
  catch(Exception e)
  {
   //e.printStackTrace("不能打开这个URL");
  }
 }
 
 public void log(String strInfo)
 {
  System.out.println(strInfo);
 }
 
 public static void main(String args[])
 {
  InetAddDemo IAdd=new InetAddDemo();
  IAdd.testOperate();
 }
}

有两种方法可以用来访问Internet。

       一是利用URL类的openStream()方法;二是使用openConnection()方法创建一个URLConnection类的对象。
其中,方法openStream()与指定的URL建立连接并返回InputStream类的对象,以从这一连接中读取数据。

程序代码

import java.net.*;
import java.io.*;

public class ReadURL
{
 public static void main(String args[]) throws Exception
 {
  try
  {
   URL url=new URL("http://www.baidu.com");
   InputStreamReader isr=new InputStreamReader(url.openStream());
   BufferedReader br=new BufferedReader(isr);
  
   String str;
   while((str=br.readLine())!=null)
   {
    System.out.println(str);
   }
  
   br.close();
   isr.close();
   }
   catch(Exception e)
   {
    System.out.println(e);
   }
 }
}
import java.net.*;
import java.io.*;

public class ReadURL
{
 public static void main(String args[]) throws Exception
 {
  try
  {
   URL url=new URL("http://www.baidu.com");
   InputStreamReader isr=new InputStreamReader(url.openStream());
   BufferedReader br=new BufferedReader(isr);
  
   String str;
   while((str=br.readLine())!=null)
   {
    System.out.println(str);
   }
  
   br.close();
   isr.close();
   }
   catch(Exception e)
   {
    System.out.println(e);
   }
 }
}

  上例首先创建URL对象url,并在其基础上打开输入流获取InputStreamReader对象,再由此对象创建BufferedReader对象br,从br中读取数据即可得到url所指定的资源文件,上面的openStream()方法只能读取网络资源。

若要既能读取又能发送数据,则要用到URL类的openConnection()方法来创建一个 URLConnection类的对象,此对象在本地机和URL指定的远程节点建立一条HTTP协议的数据通道,可进行双向数据传输。
  类URLConnection提供了很多设置和获取连接参数的方法,最常用到的是getInputStream()和getOutputStream()方法,如:

URL sum=new URL("http://java.sum.com/cgi-bin/backwards");
URLConnection suncon=buaa.openConnection();
sumcon.setDoOutput(true);
DataInputStream dis=new DataInputStream(suncon.getInputStream());
PrintStream ps=new PrintStream(suncon.getOutputStream());
String str=dis.readLine();
ps.println("来自客户机的信息:.......");
URL sum=new URL("http://java.sum.com/cgi-bin/backwards");
URLConnection suncon=buaa.openConnection();
sumcon.setDoOutput(true);
DataInputStream dis=new DataInputStream(suncon.getInputStream());
PrintStream ps=new PrintStream(suncon.getOutputStream());
String str=dis.readLine();
ps.println("来自客户机的信息:.......");