Java URL网络通信(1)

5880阅读 0评论2015-04-05 Helianthus_lu
分类:Java

Java在网络编程方面有很多优点,比如java的网络通信部分封装的很好,很合理,它有很强大的网络编程的类库,并且能够提供有效的安全机制。并且,因为java语言本身具有语法简单,性能优越,支持多平台的特性,因此,在网络编程中很受欢迎。

java网络应用中,java.net是为实现网络应用程序开发而提供的包,在它里面包含了许多实现网络应用程序需要的类和接口,比如用于处理网络标识符的API、套接字APIURL API等等。

本文将会对java.netURL(统一资源定位符)类做比较系统的学习和小结。

1.URL类介绍

URL类是java程序用于定位和获取网络数据资源的最简单的方法,它主要是针对URL网络通信中的客户端设计的。在使用URL类进行网络通信时,用户无需了解所使用的协议的细节或者要获取的数据的格式,以及如何与服务器通信等等。只需要把URL地址告诉java程序就好了。

不过,虽然要总结和梳理知识,但是不能绕过一些原理性的背景:URL网络通信其实是建立在远程服务器中专门设立的URL网络通信服务程序的基础上的。在远端的服务器中有为该URL网络通信服务的特定程序,其数据的交换就是就是按照规定的传输协议与该服务程序交互的。本质上,数据的交换是依照传输协议在服务器的服务程序和URL对象之间进行的,但是从客户端程序的角度看,数据的交换是在表示数据类的对象与已经建立连接的URL对象之间进行的,相当于在数据类对象和URL类对象之间进行网络通信和数据交换。不同的传输协议在服务器中都有对应的服务程序。

2.URL网络通信

java网络编程应用中,客户端与服务器端建立URL网络通信是和URL对象关联的。因此,首先要创建包含传输协议、服务器域名(IP地址)、输入流InputStream等类的对象的绑定,建立URL连接,或者通过输入流对象进行数据交换等操作。总结一下,创建一个URL对象所需要的输入信息包括了:

1)传输协议:HTTPNEWSftpFILE……

2)服务器域名:Host Name,服务器ip地址

3)文件名:File name,要读取的文件名,默认值为Index.html

4)文件的路径:File Path,文件所在的位置

5)端口号:Port Number,指定服务器的服务程序,默认是80或者8080

6)参考点标记:refreference,用于标识在一个文件中的特定偏移位置(瞄定地址)

描述完整的网络资源的URL格式为:

Communication Protocol://Host Name:PortNumber/File Path/File name#ref

[传输协议]         [服务器域名:端口号]  [目录名] [文件名] [参考点]

Java.net.URL类有6个构造函数。在创建URL实例对象时,要根据所拥有的信息和信息的形式来选择正确的构造函数。

URL类所支持的协议是与实现有关的。所有的主要JVM虚拟机都可用的唯一协议是HTTP协议和FILE协议。大多数虚拟机还支持httpsjarftp等。

3.实例

通过URL实现网络连接读取网络数据的步骤如下:

 1.使用URL类创建一个URL对象

 2.使用URL类的openConnnection操作方法建立URL对象的连接并打开该连接

 3.或者使用URL类的openStream操作方法将URL与一个输入流对象绑定\

 4.通过操作输入流对象实现网站数据信息的读取。

    这是一个创建URL对象并与之建立连接(同时打开该连接),而且和输入流对象绑定的java应用程序框架实例。当在客户端的一个URL对象被创建后,则它包含了一个指定网站的各种信息,例如,网站的属性和内容。URL类提供了获取网站属性的方法,而要获取网站的内容,还需要将一个输入流对象与指定的URL对象绑定,然后按照标准输入流方式操作输入流对象,达到读取网络数据内容的目的。

点击(此处)折叠或打开

  1. import java.io.BufferedReader;
  2. import java.io.IOException;
  3. import java.io.InputStream;
  4. import java.io.InputStreamReader;
  5. import java.net.HttpURLConnection;
  6. import java.net.URL;
  7. import java.net.URLConnection;

  8. public class URLSample {

  9.     public static void main(String[] args) throws IOException {
  10.         String url_addr = "";//定义URL统一资源定位符

  11.         URL url = null;//声明URL类变量

  12.         URLConnection url_con = null;//声明URL连接变量

  13.         HttpURLConnection h_url_con = null;//声明适合HTTP协议的连接变量

  14.         InputStream in = null;//声明输入流变量

  15.         BufferedReader br = null;//声明读缓冲区变量

  16.         String txt = null;
  17.         url = new URL(url_addr);//创建URL对象

  18.         url_con = url.openConnection();//创建并打开一个连接对象

  19.         url_con.connect();//建立连接

  20.         in = url_con.getInputStream();//将已经连接的对象与输入流对象绑定

  21.     
  22.         //下面的语句针对HTTP协议的连接

  23.         h_url_con = (HttpURLConnection)url.openConnection();//创建并打开一个Http连接对象

  24.         url_con.connect();//建立Http连接

  25.         in = h_url_con.getInputStream();//将已经连接的Http对象与输入流对象绑定

  26.             
  27.         //也可以使用下面的语句将输入流对象直接与URL对象绑定并打开输入流

  28.         in = url.openStream();
  29.         br = new BufferedReader(new InputStreamReader(in,"gb2312"));//将对象绑定到输入流对象上,用UTF-8指定读取的字符流的编码方式,避免显示乱码

  30.         
  31.         while ((txt = br.readLine()) != null) {
  32.             System.out.print(txt);
  33.             System.out.println();
  34.         }
  35.         in.close();
  36.     }
  37. }
执行结果如下(没有指定文件名,所以默认读取的是Index.html):



   
 
 
 
 
 
 
 
 
 
 
 
  淘宝网 - 淘!我喜欢
 
 
 
 
 
 
 
 
 

… …
URL的初步学习参考:《java程序设计案例教程》第14章java网络应用案例
关于各种编码的解释和选择可以参考:http://www.blogjava.net/rabbit/archive/2008/03/27/189009.html (java字符串中的各种编码转换)
这篇关于java获取URL资源的文章写得很好:http://lavasoft.blog.51cto.com/62575/120445/ 
上一篇:Java多线程基础学习之(2)
下一篇:JAVA URL网络通信(2)——JAVA测试URL所支持的协议类型