yyg1107

这家伙很懒,什么都没有留下
posts(15) comments(20) trackbacks(0)
  • BlogJava
  • 联系
  • RSS 2.0 Feed 聚合
  • 管理

公告

联系方式:     



常用链接

  • 我的随笔
  • 我的评论
  • 我的参与
  • 最新评论

留言簿

  • 给我留言
  • 查看公开留言
  • 查看私人留言

随笔分类(11)

  •  axis(1)
  •  hibernate(1)
  •  java(2)
  •  js(2)
  •  other(5)

随笔档案(8)

  • 2008年6月 (1)
  • 2007年8月 (2)
  • 2007年4月 (3)
  • 2006年11月 (2)

文章分类(37)

  •  C++Builder(3)
  •  eclipse(2)
  •  html(4)
  •  java(8)
  •  jbpm(6)
  •  JS(4)
  •  other(4)
  •  question handly!(4)
  •  web容器(1)
  •  workflow(1)

文章档案(36)

  • 2007年4月 (2)
  • 2007年3月 (1)
  • 2007年1月 (2)
  • 2006年12月 (2)
  • 2006年11月 (3)
  • 2006年10月 (11)
  • 2006年9月 (2)
  • 2006年7月 (2)
  • 2006年6月 (1)
  • 2006年5月 (1)
  • 2006年4月 (6)
  • 2006年3月 (3)

新闻档案(1)

  • 2007年1月 (1)

收藏夹(16)

  •  好的BLOG(9)
  •  收藏----blog(7)

JavaBlog

  • amigoxie

matrix

搜索

  •  

积分与排名

  • 积分 - 32784
  • 排名 - 1317

最新评论

  • 1. re: JS实现文本框输入提供选择框的提示功能-1
  • werewrewrwer
  • --wrewrwe
  • 2. re: struts启动的一个错误!
  • 更名struts-config.xml, remove && add struts capability,重新生成一个config.xml。
  • --barryken
  • 3. p
  • 42
  • --2
  • 4. re: hql语句----随机查询取头10条记录[未登录]
  • 没意思,这不就是分页的那一部分代码嘛!
  • --啊啊
  • 5. re: 第一次做成功的AXIS例子[未登录]
  • 楼主:能不能留下你的联系方式!探讨一下相关问题...
  • --hehe

阅读排行榜

  • 1. JS实现文本框输入提供选择框的提示功能-1(7293)
  • 2. 第一次做成功的AXIS例子(2431)
  • 3. 命令行创建ODBC数据源(1545)
  • 4. struts启动的一个错误!(1265)
  • 5. hibernate调用存储过程例子(1007)

评论排行榜

  • 1. JS实现文本框输入提供选择框的提示功能-1(7)
  • 2. 第一次做成功的AXIS例子(5)
  • 3. struts启动的一个错误!(4)
  • 4. 转:如何在JAVA中使用日期 (0)
  • 5. 命令行创建ODBC数据源(0)

View Post

Jakarta Commons:巧用类和组件1 (3)

3.2 HttpClient

  ■ 概况:这个API扩展了java.net包,提供了模拟浏览器的功能。

  ■ 官方资源:主页,二进制,源代码。

  ■ 何时适用:当你要构造Web浏览器的功能;当你的应用需要一种高效的办法进行HTTP/HTTPS通信时。

  ■ 示例应用:HttpClientDemo.java。要求CLASSPATH中有commons-httpclient.jar,common-logging.jar。要求使用JDK 1.4或更高版本。

  ■ 说明:

  HttpClient扩展和增强了标准java.net包,是一个内容广泛的代码库,功能极其丰富,能够构造出各种使用HTTP协议的分布式应用,或者也可以嵌入到现有应用,为应用增加访问HTTP协议的能力。在Commons稳定版中,HttpClient的文档似乎要比其他包更完善一些,而且还带有几个实例。下面我们通过一个简单的例子来了解如何提取一个Web页面,HttpClient文档中也有一个类似的例子,我们将扩充那个例子使其支持SSL。注意本例需要JDK 1.4支持,因为它要用到Java Secure Socket Connection库,而这个库只有JDK 1.4及更高的版本才提供。

  ① 首先确定一个可以通过HTTPS下载的页面,本例使用的是https://www.paypal.com/。同时确保%JAVA_HOME%/jre/lib/security/java.security文件包含了下面这行代码:security.provider.2=com.sun.net.ssl.internal.ssl.Provider。

  除了这些设置之外,HTTPS连接的处理方式没有其他特别的地方--至少对于本例来说如此。不过,如果远程网站使用的根证书不被你使用的Java认可,则首先必须导入它的证书。

  ② 创建一个HttpClient的实例。HttpClient类可以看成是应用的主驱动程序,所有针对网络的功能都依赖于它。HttpClient类需要一个Connection Manager来管理连接。HttpConnectionManager允许我们创建自己的连接管理器,或者,我们也可以直接使用内建的SimpleHttpConnectionManager或MultiThreadedHttpConnectionManager类。如果在创建HttpClient时没有指定连接管理器,HttpClient默认使用SimpleHttpConnectionManager。

//  创建一个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

posted on 2006-10-27 19:42 young 阅读(219) 评论(0)  编辑  收藏 所属分类: java

新用户注册  刷新评论列表  

只有注册用户登录后才能发表评论。


网站导航:
博客园   IT新闻   Chat2DB   C++博客   博问   管理
相关文章:
  • Hibernate Gossip: 樂觀鎖定(Optimistic locking)
  • 转:如何在JAVA中使用日期
  • Jakarta Commons:巧用类和组件1 (3)
  • Jakarta Commons:巧用类和组件1 (2)
  • Jakarta Commons:巧用类和组件1 (1)
  • Struts VS Turbine [转]
  • JDBC数据库连接池
 
 
Powered by:
BlogJava
Copyright © young