// 创建一个HttpClient的实例
HttpClient client = new HttpClient();
③ 创建一个HttpMethod的实例,即确定与远程服务器的通信要采用哪种传输方式,HTTP允许采用的传输方式包括:GET,POST,PUT, DELETE,HEAD,OPTIONS,以及TRACE。这些传输方式分别作为一个独立的类实现,但所有这些类都实现HttpMethod接口。在本例中,我们使用的是GetMethod,创建GetMethod实例时在参数中指定我们想要GET的URL。
// 创建一个HttpMethod的实例
HttpMethod method = new GetMethod(url);
④ 执行HttpMethod定义的提取操作。执行完毕后,executeMethod方法将返回远程服务器报告的状态代码。注意executeMethod属于HttpClient,而不是HttpMethod。
// 执行HttpMethod定义的提取操作
statusCode = client.executeMethod(method);
⑤ 读取服务器返回的应答。如果前面的连接操作失败,程序将遇到HttpException或IOException,其中IOException一般意味着网络出错,继续尝试也不太可能获得成功。服务器返回的应答可以按照多种方式读取,例如作为一个字节数组,作为一个输入流,或者作为一个String。获得服务器返回的应答后,我们就可以按照自己的需要任意处置它了。
byte[] responseBody = method.getResponseBody();
⑥ 最后要做的就是释放连接。
method.releaseConnection();
以上只是非常简单地介绍了一下HttpClient库,HttpClient实际的功能要比本文介绍的丰富得多,不仅健壮而且高效,请参阅API文档了解详情。
3.3 Net
■ 概况:一个用于操作Internet基础协议的底层API。
■ 官方资源:主页,二进制,源代码。
■ 何时适用:当你想要访问各种Internet底层协议之时(Finger,Whois,TFTP,Telnet,POP3,FTP,NNTP,以及SMTP)。
■ 示例应用:NetDemo.java。要求CLASSPATH中包含commons-net-1.0.0.jar。
■ 说明:
Net包是一个强大、专业的类库,类库里的类最初属于一个叫做NetComponents的商业产品。
Net包不仅支持对各种低层次协议的访问,而且还提供了一个高层的抽象。大多数情况下,Net包提供的抽象已能满足一般需要,它使得开发者不再需要直接面对各种协议的Socket级的低层命令。使用高层抽象并不减少任何功能,Net API在这方面做得很出色,既提供了足够的功能,又不至于在特色方面作过多的妥协。
SocketClient是支持所有协议的基础类,它是一个抽象类,聚合了各种协议都需要的公用功能。各种不同协议的使用过程其实很相似,首先利用connect方法建立一个指向远程服务器的连接,执行必要的操作,最后终止与服务器的连接。下面通过实例介绍具体的使用步骤。
// …
// ① 创建一个客户端。我们将用NNTPClient
// 从新闻服务器下载新闻组清单。
client = new NNTPClient();
// …
// ② 利用前面创建的客户端连接到新闻服务器。
// 这里选用的是一个新闻组较少的服务器。
client.connect("aurelia.deine.net");
// …
// ③ 提取新闻组清单。下面的命令将返回一个
// NewsGroupInfo对象的数组。如果指定的服
// 务器上不包含新闻组,返回的数组将是空的,
// 如果遇到了错误,则返回值是null。
list = client.listNewsgroups();
//...
// ④ 最后终止与服务器的连接。
if (client.isConnected())
client.disconnect();
必须说明的是,listNewsgroups命令可能需要较长的时间才能返回,一方面是因为网络速度的影响,另外也可能是由于新闻组清单往往是很庞大的。NewsGroupInfo对象包含有关新闻组的详细信息,并提供了一些操作新闻组的命令,比如提取文章总数、最后发布的文章、发布文章的权限,等等。
其他客户端,例如FingerClient、POP3Client、TelnetClient等,用法也差不多。
结束语:有关Web相关类和其他类的介绍就到此结束。在下一篇文章中,我们将探讨XML类和包装类,最后一篇文章则介绍工具类。
希望读者有兴趣试试本文提供的程序实例。很多时候Jakarta Commons给人以混乱的感觉,希望本文使你加深了对Jakarta Commons了解,或者至少引起了你对Commons子项目以及它提供的各种实用API和库的兴趣。
请从这里下载本文代码:JakartaCommons1_code.zip
本文地址:http://com.8s8s.com/it/it12022.htm