欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

详解Java编程中统一资源定位符URL的相关使用

程序员文章站 2024-03-06 10:23:49
统一资源定位符url(uniform resource locator)是www客户机访问internet时用来标识资源的名字和地址。超文本链路由统一资源定位符url维持。...

统一资源定位符url(uniform resource locator)是www客户机访问internet时用来标识资源的名字和地址。超文本链路由统一资源定位符url维持。url的格式是:
    <method>://<hostname:port>/<path>/<file>
其中:method是传输协议:hostname是文档和服务器所在的internet主机名(域名系统中dns中的点地址);port是服务端口号(可省略);path是路径名,file是文件名。例如:
    http://www.weixueyuan.net/(http是协议名,www.weixueyuan.net是主机名)
    http://www.weixueyuan.net/view/6079.html (www.weixueyuan.net是主机名,view/6079.html是文件路径和文件名)
url类

java.net包有url类,一个url对象可以表示一个网络资源。程序利用url对象能实现internet寻址、网络资源的定位连接、在客户机与服务器之间直接访问等。url类的构造方法是

  url(string s)


其中,s指出网络中的一个资源。

利用url对象访问网上资源的方法是:先创建url对象,如以下代码所示:

url myurl;
try {
  myurl = new url(“http://www.weixueyuan.net:80/”);
}catch(malformedurlexception e){
  system.out.println(“有错的url:”+url+e);
}

因创建url对象可能会产生malformedurlexception异常。所以,创建url对象的代码应出现在try…catch语句块中,以便能捕捉网址错误异常。
urlconnection类

要接收和发关信息还要用urlconnection类,程序获得一个urlconnection对象,相当于完成对指定url的一个http连接。以下是示意获得urlconnection对象的代码。

  url mu = new url(“http://www.sun.com/”);//先要创建一个url对象
  urlconnection muc = mu.openconnection();//获得urlconnection对象


上述代码说明,先要创建一个url对象,然后利用url对象的openconnection()方法,从系统获得一个urlconnection对象。程序有了urlconnection对象后,就可使用urlconnection类提供的以下方法获得流对象和实现网络连接:
getoutputstream():获得向远程主机发送信息的outputstream流对象;
getinputstream():获得从远程主机获取信息的inputstream流对象。有了网络连接的输入和输出流,程序就可实现远程通信;
connect():设置网络连接。
信息的发送和接收

发送和接收信息要获得流对象,并由流对象创建输入或输出数据流对象。然后,就可以用流的方法访问网上资源。

参见下面例子程序中的方法readbyurl(),该方法说明已知网址读取网页内容的过程。方法利用网址参数创建一个url对象url,接着利用对象url的openconnect()方法,获得urlconnection对象tc,用对象tc的connect()方法建立网络连接,接着获得网络连接的inputstreamreader类对象in,将对象in,转化成为bufferedread对象dis,改为缓冲式输入。最后,用对象dis的readline()方法完成读取网络文本数据。

如同本地数据流一样,网上资源使用结束后,数据流也应及时关闭。例如,代码

  dis.close();


关闭先前代码建立的流dis。

【例】以数据流方法读取网页内容的应用程序。程序运行时,网址从文本框中读取。

import java.net.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.javax.swing.*;
public class example10_2{
  public static void main(string args[]){
    new downnetfile();
  }
}
class downnetfile extends jframe implements actionlistener{
  jtextfileld infield = new jtextfield(30);
  jtextarea showarea = new jtextarea();
  jbutton b = new jbutton(“download”);jpanel p = new jpanel();
  downnetfile(){
    super(“read network text file application”);
    container con = this.getcontentpane();
    p.add(infield);p.add(b);
    jscrollpane jsp = new jscrollpane(showarea);
    b.addactionlistener(this);
    con.add(p,”north”);con.add(jsp,”center”);
    setdefaultcloseoperation(jframe.exit_on_close);
    setsize(500,400);setvisible(true);
  }
  public void actionperformed(actionevent e){
    readbyurl(infield.gettext());
  }
  public void readbyurl(string urlname){
    try{
      url url = new url(urlname);//由网址创建url对象
      urlconnection tc = url.openconnectin();//获得urlconnection对象
      tc.connect();//设置网络连接
      inptstreamreader in = new inputstreamreader(tc.getinputstream());
      bufferedreader dis = new bufferedreader(in);//采用缓冲式输入
      string inline;
      while((inline = dis.readline())!=null){
        showarea.append(inline +”\n”);
      }
      dis.close();//网上资源使用结束后,数据流及时关闭
    }catch(malformedurlexception e){
      e.printstacktrace();
    }
    catch(ioexception e){e.printstacktrace();}
    /*访问网上资源可能产生malformedurlexception和ioexception异常*/
  }
}