JAVA中三种URL连接方法

Java的网络类可以让你通过网络或者远程连接来实现应用。而且,这个平台现在已经可以对国际互联网以及URL资源进行访问了。Java的URL类可以让访问网络资源就像是访问你本地的文件夹一样方便快捷。我们通过使用Java的URL类就可以经由URL完成读取和修改数据的操作。现在,我们来看一看,如何才能发挥出URL类的效力。

  通过URL进行工作

  通过一个URL连接,我们就可以确定资源的位置,比如网络文件、网络页面以及网络应用程序等。其中包含了许多的语法元素。举个例子来说,请看下面这个URL连接:

  http://www.mycompany.com:8080/mywebapps/AWebApp

  这个连接规定使用http协议。主机名称为www.mycompany.com。端口号为8080。这个URL的其它部分, /mywebapps/AwebApp,则确定了我们要在这个站点上所要访问的资源。在这个例子中的资源恰好是一个网络应用程序。而且,URL还可以包含其它的元素,比如说文件段以及查询信息等等。

  从URL得到的数据可以是多种多样的,这些都需要一种统一的机制来完成对URL的读取与修改操作。Java语言在它的java.NET软件包里就提供了这么一种机制。有关这个java.Net软件包的问题我们会在URL class的部分中进行讨论。

  URL class是从URL标示符中提取出来的。它允许Java程序设计人员打开某个特定URL连接,并对里边的数据进行读写操作以及对首部信息进行读写操作。而且,它还允许程序员完成其它的一些有关URL的操作。我们将会讨论由java.io包裹所提供的URL class以及stream classes是如何允许你对一个URL进行操作的,而且我们将会以对文件以及socket连接的操作差不多的风格对其进行讨论。

  构造器

  在创建java.net URL的实例的时候,你能够利用许多公共构造器,从而让其变得更具灵活性。举个例子来说,这个class提供了一种使用完整URL信息串的构造器,一种使用把URL信息串分解成为协议、主机名以及文件和资源的构造器,还有一种把URL信息串分解成为协议、主机名、端口号以及文件的构造器。我们首先使用完整的URL来创建一个URL class的例子:URL aURL = new URL(“http://www.mycompany.com:8080/index.html”);

  在这个例子中,我们创建了一个使用完整URL的URL class,其中明确指出了使用的协议是http,主机名称是www.mycompany.com,端口号码为8080,文件/资源为index.html。如果组成URL的语法发生了错误,那么构造器就会发出MalformedURLException。打开一个URL连接

  一旦你成功的创建了一个URL class的实例,你就可以对其进行操作了。但是在你能够访问这个URL上的资源和内容之前,你必须要打开到这些资源与内容上的连接。你可以通过使用openConnection来完成这一操作。

  使用openConnection并不需要参数,并且在操作成功之后,它会返回一个URLConnection class的实例。在Listing A中,向我们演示了打开一个到URL连接的过程。一旦你的连接成功,你就可以开始对这个URLConnection的输入以及输出流进行读和写的操作了。

  从URL连接中读取数据

  使用java.io stream class来从URL中读取数据是一个非常简单的过程。一旦你建立了一个成功的连接,那么你就可以获得针对这个连接的输入流并且开始进行写的操作了。URL可以代表很多不同种类的数据类型所组成的资源。很幸运的是,java.io classes可以以与对文件流或者socket流进行操作的同样方式进行对从URLConnection流返回的数据进行操作。在Listing B中,向我们展示了如何从URL中读取文本数据。

  对URL进行写的操作

  使用java.io stream classes对URL进行写的操作同样也是非常简单的。一旦你建立了一个成功的连接之后,你就可以得到来自此连接的输出流并且开始进行写的操作。当然,只有对于客户所希望的数据进行写的操作才是有意义的。同样的,在获得并对URLConnection流进行写的操作之前,你还需要使用setDoOutput(boolean)方式把输出(Output)属性设置为真(true)来指定可以进行写操作的那些连接。Java.io classes允许你把数据写到URLConnection流,这个操作也和你对文件流和socket流进行的写操作一样。Listing C向我们展示了如何把对象数据写入一个URL。

  其它的操作

  你可以从URL以及URLConnection对象连接中得到其它类型的信息,比如说主机名、端口、内容长度、内容编码以及内容的类型。把这些方法连同stream I/O classes一起使用可以让你建立复杂而有效的网络客户应用程序和服务。

  对网络的便捷访问

  由Java平台所提供的URL class让我们可以方便而有效的访问网络上的资源,而且可以让我们象访问本地文件一样的感到轻松愉快。我们不用为网络通讯的细节问题操心,只需要把注意力集中到制作有用的应用程序和服务上去。

例子:

package zzm.java.net;

import java.net.URLConnection;

import java.net.HttpURLConnection;

import java.net.JarURLConnection;

import java.net.URL;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.InputStream;

import java.io.BufferedReader;

import java.io.InputStreamReader;

public class URLConnectionTest {

public static void main(String []args){

try{

/*

*   方法一

*

URL url = new URL("http://www.sina.com.cn");

URLConnection urlcon = url.openConnection();

InputStream is = urlcon.getInputStream();

*/

/*

* 方法二

*

* URL url = new URL("http://www.yhfund.com.cn");

HttpURLConnection urlcon = (HttpURLConnection)url.openConnection();

InputStream is = urlcon.getInputStream();

*/

/*

* 方法三

* URL url = new URL("http://www.yhfund.com.cn");

InputStream is = url.openStream();

*/

long begintime = System.currentTimeMillis();

URL url = new URL("http://www.yhfund.com.cn");

HttpURLConnection urlcon = (HttpURLConnection)url.openConnection();

urlcon.connect();         //获取连接

InputStream is = urlcon.getInputStream();

BufferedReader buffer = new BufferedReader(new InputStreamReader(is));

StringBuffer bs = new StringBuffer();

String l = null;

while((l=buffer.readLine())!=null){

bs.append(l).append("/n");

}

System.out.println(bs.toString());

//System.out.println(" content-encode:"+urlcon.getContentEncoding());

//System.out.println(" content-length:"+urlcon.getContentLength());

//System.out.println(" content-type:"+urlcon.getContentType());

//System.out.println(" date:"+urlcon.getDate());

System.out.println("总共执行时间为:"+(System.currentTimeMillis()-begintime)+"毫秒");

}catch(IOException e){

System.out.println(e);

}

}

}

时间: 2024-11-09 00:41:00

JAVA中三种URL连接方法的相关文章

VMware中三种网络连接的区别

VMware中三种网络连接的区别 1.概述 2.bridged(桥接模式) 3.NAT(网络地址转换模式) 4.host-only(主机模式) 5.replicate physical network connection state 选项解释 1.概述 大家在安装完虚拟机后,默认安装了两个虚拟网卡,VMnet1和VMnet8,如下图.其中VMnet1是host网卡,用于host方式连接网络的.VMnet8是NAT网卡,用于NAT方式连接网络的.它们的IP地址是随机生成的. VMware提供了三

JS中三种字符串连接方式及其性能比较

工作中经常会碰到要把2个或多个字符串连接成一个字符串的问题,在JS中处理这类问题一般有三种方法,这里将它们一一列出顺便也对它们的性能做个具体的比较. 第一种方法  用连接符“+”把要连接的字符串连起来: str="a"; str+="b"; 毫无疑问,这种方法是最便捷快速的,如果只连接100个以下的字符串建议用这种方法最方便. 第二种方法  以数组作为中介用 join 连接字符串: var arr=new Array(); arr.push(a); arr.push

C++中三种创建对象的方法【转】

我们都知道C++中有三种创建对象的方法,如下: #include <iostream> using namespace std; class A { private: int n; public: A(int m):n(m) { } ~A(){} }; int main() { A a(1); //栈中分配 A b = A(1); //栈中分配 A* c = new A(1); //堆中分配 delete c; return 0; } 第一种和第二种没什么区别,一个隐式调用,一个显式调用,两者

Sql Server中三种字符串合并方法的性能比较

最近正在处理一个合并字符吕的存储过程,在一个测试系统的开发中,要使用到字符串合并功能,直接在Sql中做.        示例:        有表內容﹕        名称  內容         1     abc        1      aaa        1      dddd        2      1223        2       fkdjfd           --------------------------------        结果﹕        1 

java中三种方式获得类的字节码文件对象

package get_class_method; public class ReflectDemo { /** * @param args */ public static void main(String[] args) { getClassObject1(); getClassObject2(); getClassObject3(); } public static void getClassObject1(){ Person p = new Person(); System.out.pr

分布式环境中三种Session管理方法的使用场景及优缺点

在分布式环境,管理Session通常使用下面三种方式: 一.Session Replication 方式管理 (即session复制)         简介:将一台机器上的Session数据广播复制到集群中其余机器上 使用场景:机器较少,网络流量较小 优点:实现简单.配置较少.当网络中有机器Down掉时不影响用户访问 缺点:广播式复制到其余机器有一定廷时,带来一定网络开销 二.Session Sticky 方式管理         简介:即粘性Session.当用户访问集群中某台机器后,强制指定

Linux中三种网络连接模式

  VMware虚拟机下linux上网的几种方式 主机为WindowsXP系统,VMware虚拟机里安装Linux操作系统.安装完VMware后,主机的网络连接里面出现了两个新的连接,即VMware Network Adapter VMnet1和VMware Network Adapter VMnet8如图.虚拟机里安装的系统就是靠这两个虚拟网卡来联网的.主机上类似antiarp 防火墙一定要关掉 否则虚拟机不能上网. 有以下几种可选方法:1.Bridged(网桥)方式:  如果主机是通过局域网

Java中三种代理模式

代理模式 代理(Proxy)是一种设计模式,提供了间接对目标对象进行访问的方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的功能上,增加额外的功能补充,即扩展目标对象的功能. 这就符合了设计模式的开闭原则,即在对既有代码不改动的情况下进行功能的扩展. 举个例子来说明代理的作用:明星与经纪人之间就是被代理和代理的关系,明星出演活动的时候,明星就是一个目标对象,他只要负责活动中的节目,而其他琐碎的事情就交给他的代理人(经纪人) 来解决.这就是代理思想在现实中的一个例子. 静态代理

Java中三种变量

Java三大变量分别是类变量(静态变量).实例变量和局部变量(本地变量). 局部变量就是本地变量,在方法.构造器或者块中使用,在方法.构造器或者块进入时被创建,一旦退出该变量就会被销毁 局部变量没有默认值,因此本地变量必须被声明并且在第一次使用前要给它赋值 实例变量:在类中声明,但是它在方法.构造器或者块外,当堆中的对象被分配了一个空间时,每个实例变量的位置就被创建了. 当对象采用关键字"new"创建时实例变量就被创建了,当对象被销毁时它也就被销毁了. 实例变量的值必须被一个以上的方法