﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-美丽的爪哇岛-随笔分类-Java</title><link>http://www.blogjava.net/askcuix/category/32218.html</link><description>Keep Walking......</description><language>zh-cn</language><lastBuildDate>Mon, 07 Mar 2011 20:55:26 GMT</lastBuildDate><pubDate>Mon, 07 Mar 2011 20:55:26 GMT</pubDate><ttl>60</ttl><item><title>SAXParseException: Content is not allowed in prolog</title><link>http://www.blogjava.net/askcuix/archive/2011/03/07/345896.html</link><dc:creator>Chris.Cui</dc:creator><author>Chris.Cui</author><pubDate>Mon, 07 Mar 2011 10:39:00 GMT</pubDate><guid>http://www.blogjava.net/askcuix/archive/2011/03/07/345896.html</guid><wfw:comment>http://www.blogjava.net/askcuix/comments/345896.html</wfw:comment><comments>http://www.blogjava.net/askcuix/archive/2011/03/07/345896.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/askcuix/comments/commentRss/345896.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/askcuix/services/trackbacks/345896.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 最近在做一些批处理XML的项目，通过Spring Batch读取XML，然后将数据存入数据库。XML是客户方通过AS400的技术将数据读出并写入到文件的，我不了解AS400处理这类问题是不是很麻烦，每次XML需要做些变动的时候，客户总是表现的很为难，并且都是很久才能给到新的XML，还总是有这样那样的问题，甚至都不是一个有效的XML。这两天总算是改的差不多了，但遇到了好几次这样的exception: org.xml.sax.SAXParseException: Content is not allowed in prolog。以前也接触过不少XML，可是这种问题还真是没遇到过。 <br><br>出现这种问题，有几种可能性：&nbsp;&nbsp;<a href='http://www.blogjava.net/askcuix/archive/2011/03/07/345896.html'>阅读全文</a><img src ="http://www.blogjava.net/askcuix/aggbug/345896.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/askcuix/" target="_blank">Chris.Cui</a> 2011-03-07 18:39 <a href="http://www.blogjava.net/askcuix/archive/2011/03/07/345896.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用ARA实现GlassFish中Web应用的资源分配</title><link>http://www.blogjava.net/askcuix/archive/2010/04/23/319210.html</link><dc:creator>Chris.Cui</dc:creator><author>Chris.Cui</author><pubDate>Fri, 23 Apr 2010 09:55:00 GMT</pubDate><guid>http://www.blogjava.net/askcuix/archive/2010/04/23/319210.html</guid><wfw:comment>http://www.blogjava.net/askcuix/comments/319210.html</wfw:comment><comments>http://www.blogjava.net/askcuix/archive/2010/04/23/319210.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/askcuix/comments/commentRss/319210.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/askcuix/services/trackbacks/319210.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 在企业级的应用中，经常会存在一些访问非常频繁的web应用，这些web模块很容易就会将GlassFish的HTTP Thread全部占满，这时其它的web应用就始终在queue中等待获取HTTP的connection，直至超时。在GlassFish中不能对web应用进行资源分配，如果是EJB组件，可以采取Request Partitioning的方式来分配模块所使用的资源，对于Web应用只有等到V3版本发布时才具备资源分配的功能了，对于SUN现在的局面，不知道要等到什么时候才会发布这个feature，好在已从SUN离职的Grizzly的开发者Jeanfrancois在V2中就已经实现了该功能，可以通过配置的方式实现web资源的分配。&nbsp;&nbsp;<a href='http://www.blogjava.net/askcuix/archive/2010/04/23/319210.html'>阅读全文</a><img src ="http://www.blogjava.net/askcuix/aggbug/319210.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/askcuix/" target="_blank">Chris.Cui</a> 2010-04-23 17:55 <a href="http://www.blogjava.net/askcuix/archive/2010/04/23/319210.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>GlassFish移植Tips</title><link>http://www.blogjava.net/askcuix/archive/2010/03/23/316339.html</link><dc:creator>Chris.Cui</dc:creator><author>Chris.Cui</author><pubDate>Tue, 23 Mar 2010 09:30:00 GMT</pubDate><guid>http://www.blogjava.net/askcuix/archive/2010/03/23/316339.html</guid><wfw:comment>http://www.blogjava.net/askcuix/comments/316339.html</wfw:comment><comments>http://www.blogjava.net/askcuix/archive/2010/03/23/316339.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/askcuix/comments/commentRss/316339.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/askcuix/services/trackbacks/316339.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 作为一款商用的Application Server，Weblogic确实非常成熟，非常强大，提供了很多特性，以帮助提高程序的运行效率，但是太笨重了，访问Admin Console极慢；GlassFish作为一款开源的Application Server，非常适合开发者使用，速度很快，并且严格遵照J2EE的标准，以达到平台独立的特性，但是确实简陋了点，只提供了最标准的实现，并且还存在一些明显的BUG，社区不够活跃，文档、资源都很少，可能是现在SUN处于动乱期，连商业Support都很难联系到。下面是我在做移植工作时，随笔记下来的一些小经验，让其他的同学们少受一些折磨，少踩一些坑。&nbsp;&nbsp;<a href='http://www.blogjava.net/askcuix/archive/2010/03/23/316339.html'>阅读全文</a><img src ="http://www.blogjava.net/askcuix/aggbug/316339.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/askcuix/" target="_blank">Chris.Cui</a> 2010-03-23 17:30 <a href="http://www.blogjava.net/askcuix/archive/2010/03/23/316339.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>GlassFish Components</title><link>http://www.blogjava.net/askcuix/archive/2009/12/21/306820.html</link><dc:creator>Chris.Cui</dc:creator><author>Chris.Cui</author><pubDate>Mon, 21 Dec 2009 08:40:00 GMT</pubDate><guid>http://www.blogjava.net/askcuix/archive/2009/12/21/306820.html</guid><wfw:comment>http://www.blogjava.net/askcuix/comments/306820.html</wfw:comment><comments>http://www.blogjava.net/askcuix/archive/2009/12/21/306820.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/askcuix/comments/commentRss/306820.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/askcuix/services/trackbacks/306820.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 本文对GlassFish的组件结构进行了较详细的描述。GlassFish由一个或多个domain组成，每个domain和一个administration server关联，并可包含0到多个standalone instance或者cluster。每个cluster有一个或多个同类型的instance，一个instance运行于一个单独的JVM 中，domain中的instance可运行在不同的物理机器上。&nbsp;&nbsp;<a href='http://www.blogjava.net/askcuix/archive/2009/12/21/306820.html'>阅读全文</a><img src ="http://www.blogjava.net/askcuix/aggbug/306820.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/askcuix/" target="_blank">Chris.Cui</a> 2009-12-21 16:40 <a href="http://www.blogjava.net/askcuix/archive/2009/12/21/306820.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>StartUp Choice: ServletContextListener vs Servlet</title><link>http://www.blogjava.net/askcuix/archive/2009/11/03/300894.html</link><dc:creator>Chris.Cui</dc:creator><author>Chris.Cui</author><pubDate>Tue, 03 Nov 2009 06:46:00 GMT</pubDate><guid>http://www.blogjava.net/askcuix/archive/2009/11/03/300894.html</guid><wfw:comment>http://www.blogjava.net/askcuix/comments/300894.html</wfw:comment><comments>http://www.blogjava.net/askcuix/archive/2009/11/03/300894.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/askcuix/comments/commentRss/300894.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/askcuix/services/trackbacks/300894.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 最近在做将项目从Weblogic移植到GlassFish的工作，遇到的其中一个比较头疼的问题就是Weblogic的LifeCycleManager。Weblogic提供了一个ApplicationLifecycleListener类可以在application部署和卸载时做一些工作，这是Weblogic独有的特性，并不是J2EE的规范。GlassFish中目前提供的LifeCycleListener不能满足该要求，它只能在GlassFish启动和停止的时候去做工作，而且，采用了这种方式，等于又将我们的应用绑定在了GlassFish上。最终决定采用ServletContextListener作为临时解决方案。&nbsp;&nbsp;<a href='http://www.blogjava.net/askcuix/archive/2009/11/03/300894.html'>阅读全文</a><img src ="http://www.blogjava.net/askcuix/aggbug/300894.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/askcuix/" target="_blank">Chris.Cui</a> 2009-11-03 14:46 <a href="http://www.blogjava.net/askcuix/archive/2009/11/03/300894.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>GlassFish安装指南</title><link>http://www.blogjava.net/askcuix/archive/2009/10/27/299921.html</link><dc:creator>Chris.Cui</dc:creator><author>Chris.Cui</author><pubDate>Tue, 27 Oct 2009 07:18:00 GMT</pubDate><guid>http://www.blogjava.net/askcuix/archive/2009/10/27/299921.html</guid><wfw:comment>http://www.blogjava.net/askcuix/comments/299921.html</wfw:comment><comments>http://www.blogjava.net/askcuix/archive/2009/10/27/299921.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/askcuix/comments/commentRss/299921.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/askcuix/services/trackbacks/299921.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: GlassFish安装使用指南.&nbsp;&nbsp;<a href='http://www.blogjava.net/askcuix/archive/2009/10/27/299921.html'>阅读全文</a><img src ="http://www.blogjava.net/askcuix/aggbug/299921.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/askcuix/" target="_blank">Chris.Cui</a> 2009-10-27 15:18 <a href="http://www.blogjava.net/askcuix/archive/2009/10/27/299921.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring延迟加载EJB代理</title><link>http://www.blogjava.net/askcuix/archive/2009/09/07/294205.html</link><dc:creator>Chris.Cui</dc:creator><author>Chris.Cui</author><pubDate>Mon, 07 Sep 2009 10:02:00 GMT</pubDate><guid>http://www.blogjava.net/askcuix/archive/2009/09/07/294205.html</guid><wfw:comment>http://www.blogjava.net/askcuix/comments/294205.html</wfw:comment><comments>http://www.blogjava.net/askcuix/archive/2009/09/07/294205.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/askcuix/comments/commentRss/294205.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/askcuix/services/trackbacks/294205.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 在Spring中提供了两个代理工厂Bean来代理EJB的访问： LocalStatelessSessionProxyFactoryBean和SimpleRemoteStatelessSessionProxyFactoryBean。当任何一个EJB代理工厂Bean在ApplicationContext中使用时，Bean工厂会预先实例化单实例的 Bean。这通常是一件好事，但它可能会导致EJB代理工厂Bean在EJB被绑定到名字服务之前，试图查找EJB的home接口。通过属性的设置，可确保这个EJB在装载时不会试图查找home接口，直到它首次被使用为止，这将会留有足够的时间来把EJB绑定到名称服务上。&nbsp;&nbsp;<a href='http://www.blogjava.net/askcuix/archive/2009/09/07/294205.html'>阅读全文</a><img src ="http://www.blogjava.net/askcuix/aggbug/294205.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/askcuix/" target="_blank">Chris.Cui</a> 2009-09-07 18:02 <a href="http://www.blogjava.net/askcuix/archive/2009/09/07/294205.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JMS - 异步消息的使者</title><link>http://www.blogjava.net/askcuix/archive/2009/08/06/290012.html</link><dc:creator>Chris.Cui</dc:creator><author>Chris.Cui</author><pubDate>Wed, 05 Aug 2009 16:35:00 GMT</pubDate><guid>http://www.blogjava.net/askcuix/archive/2009/08/06/290012.html</guid><wfw:comment>http://www.blogjava.net/askcuix/comments/290012.html</wfw:comment><comments>http://www.blogjava.net/askcuix/archive/2009/08/06/290012.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/askcuix/comments/commentRss/290012.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/askcuix/services/trackbacks/290012.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Java消息服务（JMS）实现了异步消息的传递，在企业级的应用中，极大的简化了异步通信系统的实现，使用消息传递的优点在于保持了系统的松散耦合。本文对JMS两种模式的使用做了对比性的讲解，开始你的JMS使用旅程吧。&nbsp;&nbsp;<a href='http://www.blogjava.net/askcuix/archive/2009/08/06/290012.html'>阅读全文</a><img src ="http://www.blogjava.net/askcuix/aggbug/290012.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/askcuix/" target="_blank">Chris.Cui</a> 2009-08-06 00:35 <a href="http://www.blogjava.net/askcuix/archive/2009/08/06/290012.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Standalone Client Lookup JNDI from the GlassFish</title><link>http://www.blogjava.net/askcuix/archive/2009/07/30/288985.html</link><dc:creator>Chris.Cui</dc:creator><author>Chris.Cui</author><pubDate>Wed, 29 Jul 2009 16:27:00 GMT</pubDate><guid>http://www.blogjava.net/askcuix/archive/2009/07/30/288985.html</guid><wfw:comment>http://www.blogjava.net/askcuix/comments/288985.html</wfw:comment><comments>http://www.blogjava.net/askcuix/archive/2009/07/30/288985.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/askcuix/comments/commentRss/288985.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/askcuix/services/trackbacks/288985.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 独立运行的java程序可通过JNDI访问GlassFish中配置的资源，而不需要运行在GlassFish中，便于一些J2EE程序的运行，比如JMS。&nbsp;&nbsp;<a href='http://www.blogjava.net/askcuix/archive/2009/07/30/288985.html'>阅读全文</a><img src ="http://www.blogjava.net/askcuix/aggbug/288985.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/askcuix/" target="_blank">Chris.Cui</a> 2009-07-30 00:27 <a href="http://www.blogjava.net/askcuix/archive/2009/07/30/288985.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Weblogic中获取Server信息</title><link>http://www.blogjava.net/askcuix/archive/2009/06/23/283707.html</link><dc:creator>Chris.Cui</dc:creator><author>Chris.Cui</author><pubDate>Tue, 23 Jun 2009 03:12:00 GMT</pubDate><guid>http://www.blogjava.net/askcuix/archive/2009/06/23/283707.html</guid><wfw:comment>http://www.blogjava.net/askcuix/comments/283707.html</wfw:comment><comments>http://www.blogjava.net/askcuix/archive/2009/06/23/283707.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/askcuix/comments/commentRss/283707.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/askcuix/services/trackbacks/283707.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 通过MBean获取weblogic的server信息。&nbsp;&nbsp;<a href='http://www.blogjava.net/askcuix/archive/2009/06/23/283707.html'>阅读全文</a><img src ="http://www.blogjava.net/askcuix/aggbug/283707.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/askcuix/" target="_blank">Chris.Cui</a> 2009-06-23 11:12 <a href="http://www.blogjava.net/askcuix/archive/2009/06/23/283707.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SLF4J+logBack, 日志领域中的新秀</title><link>http://www.blogjava.net/askcuix/archive/2009/03/14/259697.html</link><dc:creator>Chris.Cui</dc:creator><author>Chris.Cui</author><pubDate>Sat, 14 Mar 2009 04:13:00 GMT</pubDate><guid>http://www.blogjava.net/askcuix/archive/2009/03/14/259697.html</guid><wfw:comment>http://www.blogjava.net/askcuix/comments/259697.html</wfw:comment><comments>http://www.blogjava.net/askcuix/archive/2009/03/14/259697.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.blogjava.net/askcuix/comments/commentRss/259697.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/askcuix/services/trackbacks/259697.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Ceki Gülcü创造了日志领域界著名的Log4J，现在又实现一个“简单的日志前端接口（Façade）”- SLF4J，和一个“可靠、通用、快速而又灵活的Java日志框架”- LOGBack。作为日志领域中的新秀，已经有种颠覆领域的趋势了。&nbsp;&nbsp;<a href='http://www.blogjava.net/askcuix/archive/2009/03/14/259697.html'>阅读全文</a><img src ="http://www.blogjava.net/askcuix/aggbug/259697.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/askcuix/" target="_blank">Chris.Cui</a> 2009-03-14 12:13 <a href="http://www.blogjava.net/askcuix/archive/2009/03/14/259697.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Checkstyle的配置详解</title><link>http://www.blogjava.net/askcuix/archive/2009/02/08/253775.html</link><dc:creator>Chris.Cui</dc:creator><author>Chris.Cui</author><pubDate>Sun, 08 Feb 2009 04:47:00 GMT</pubDate><guid>http://www.blogjava.net/askcuix/archive/2009/02/08/253775.html</guid><wfw:comment>http://www.blogjava.net/askcuix/comments/253775.html</wfw:comment><comments>http://www.blogjava.net/askcuix/archive/2009/02/08/253775.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/askcuix/comments/commentRss/253775.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/askcuix/services/trackbacks/253775.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要:      Checkstyle是一款检查java程序代码样式的工具，可以有效的帮助我们检视代码以便更好的遵循代码编写标准，特别适用于小组开发时彼此间的样式规范和统一。Checkstyle提供了高可配置性，以便适用于各种代码规范，所以除了可以使用它提供的sun的代码标准外，你也可以定制自己的标准。我们可以在eclipse中安装checkstyle的插件，来方便我们的使用。<br>   Checkstyle可以让我们养成书写良好代码风格的习惯，代码的整洁也减少了很多bad smell的产生。使用checkstyle的过程中可能需要经常的调整配置文件，有些check过于严格，可以根据实际情况取消一些代码检查。&nbsp;&nbsp;<a href='http://www.blogjava.net/askcuix/archive/2009/02/08/253775.html'>阅读全文</a><img src ="http://www.blogjava.net/askcuix/aggbug/253775.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/askcuix/" target="_blank">Chris.Cui</a> 2009-02-08 12:47 <a href="http://www.blogjava.net/askcuix/archive/2009/02/08/253775.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>利用JPDA进行Remote Debug</title><link>http://www.blogjava.net/askcuix/archive/2008/11/09/239529.html</link><dc:creator>Chris.Cui</dc:creator><author>Chris.Cui</author><pubDate>Sun, 09 Nov 2008 09:10:00 GMT</pubDate><guid>http://www.blogjava.net/askcuix/archive/2008/11/09/239529.html</guid><wfw:comment>http://www.blogjava.net/askcuix/comments/239529.html</wfw:comment><comments>http://www.blogjava.net/askcuix/archive/2008/11/09/239529.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/askcuix/comments/commentRss/239529.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/askcuix/services/trackbacks/239529.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 最近协助QA测试我们基于EJB开发的系统，由于应用程序在远程环境下运行，并且在控制台和日志文件中没有输出足够的有用信息，导致调试工作很困难。这时发现了Sun的java平台调试架构（Java Platform Debugger Architecture），它能够对一个运行中的java应用程序进行全方位调试提供极大的帮助。&nbsp;&nbsp;<a href='http://www.blogjava.net/askcuix/archive/2008/11/09/239529.html'>阅读全文</a><img src ="http://www.blogjava.net/askcuix/aggbug/239529.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/askcuix/" target="_blank">Chris.Cui</a> 2008-11-09 17:10 <a href="http://www.blogjava.net/askcuix/archive/2008/11/09/239529.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HttpClient之上传文件</title><link>http://www.blogjava.net/askcuix/archive/2008/06/21/209731.html</link><dc:creator>Chris.Cui</dc:creator><author>Chris.Cui</author><pubDate>Sat, 21 Jun 2008 14:43:00 GMT</pubDate><guid>http://www.blogjava.net/askcuix/archive/2008/06/21/209731.html</guid><wfw:comment>http://www.blogjava.net/askcuix/comments/209731.html</wfw:comment><comments>http://www.blogjava.net/askcuix/archive/2008/06/21/209731.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/askcuix/comments/commentRss/209731.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/askcuix/services/trackbacks/209731.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 今天在为公司写网络硬盘的压力测试工具时使用了HttpClient，比较容易的解决了登录、上传、下载、列表等功能的测试，但也遇到了一些问题，先看看代码：<br />
<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080;">&nbsp;1</span>&nbsp;&nbsp; <span style="color: #000000;">File&nbsp;f1&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;File(</span><span style="color: #000000;">"</span><span style="color: #000000;">D:\\download\\aa.txt</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
</span><span style="color: #008080;">&nbsp;2</span>&nbsp;<span style="color: #000000;">&nbsp; PostMethod&nbsp;filePost&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;PostMethod(</span><span style="color: #000000;">"</span><span style="color: #000000;">http://10.3.3.106:8090/~jid=aWHLXB6y4O9a/webdrive/upload.do?contentID=99999820&amp;action=submit</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
</span><span style="color: #008080;">&nbsp;3</span>&nbsp;<span style="color: #000000;">&nbsp; </span><span style="color: #0000ff;">try</span><span style="color: #000000;">{<br />
</span><span style="color: #008080;">&nbsp;4</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Part[]&nbsp;parts&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;{</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;FilePart(</span><span style="color: #000000;">"</span><span style="color: #000000;">file0</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;f1)};<br />
</span><span style="color: #008080;">&nbsp;5</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; filePost.setRequestEntity(</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;MultipartRequestEntity(parts,&nbsp;filePost.getParams()));<br />
</span><span style="color: #008080;">&nbsp;6</span>&nbsp;<span style="color: #000000;">&nbsp; }</span><span style="color: #0000ff;">catch</span><span style="color: #000000;">(FileNotFoundException&nbsp;e){<br />
</span><span style="color: #008080;">&nbsp;7</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">===================file&nbsp;not&nbsp;found&nbsp;exception:&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;e);<br />
</span><span style="color: #008080;">&nbsp;8</span>&nbsp;<span style="color: #000000;">&nbsp; }<br />
</span><span style="color: #008080;">&nbsp;9</span>&nbsp;<span style="color: #000000;">&nbsp; HttpClient&nbsp;client&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;HttpClient();<br />
</span><span style="color: #008080;">10</span>&nbsp;<span style="color: #000000;">&nbsp; </span><span style="color: #008000;">//</span><span style="color: #008000;"> 若上传的文件比较大&nbsp;, 可在此设置最大的连接超时时间&nbsp;<br />
</span><span style="color: #008080;">11</span>&nbsp;<span style="color: #008000;">&nbsp; </span><span style="color: #008000;">//</span><span style="color: #008000;">client.getHttpConnectionManager().&nbsp;getParams().setConnectionTimeout(5000);&nbsp;</span><span style="color: #008000;"><br />
</span><span style="color: #008080;">12</span>&nbsp;<span style="color: #000000;">&nbsp; </span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;status&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br />
</span><span style="color: #008080;">13</span>&nbsp;<span style="color: #000000;">&nbsp; </span><span style="color: #0000ff;">try</span><span style="color: #000000;">&nbsp;{<br />
</span><span style="color: #008080;">14</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;"><br />
</span><span style="color: #008080;">15</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">status&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;client.executeMethod(filePost);</span><span style="color: #000000;"> <br />
</span><span style="color: #008080;">16</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080;">17</span>&nbsp;<span style="color: #000000;">&nbsp; }&nbsp;</span><span style="color: #0000ff;">catch</span><span style="color: #000000;">&nbsp;(HttpException&nbsp;e)&nbsp;{<br />
</span><span style="color: #008080;">18</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">===================http&nbsp;exception:&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;e);<br />
</span><span style="color: #008080;">19</span>&nbsp;<span style="color: #000000;">&nbsp; }&nbsp;</span><span style="color: #0000ff;">catch</span><span style="color: #000000;">&nbsp;(IOException&nbsp;e)&nbsp;{<br />
</span><span style="color: #008080;">20</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">===================io&nbsp;exception:&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;e);<br />
</span><span style="color: #008080;">21</span>&nbsp;<span style="color: #000000;">&nbsp; </span><span style="color: #000000;">}</span><span style="color: #0000ff;">finally</span><span style="color: #000000;">&nbsp;{<br />
</span><span style="color: #008080;">22</span> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #000000;">filePost.releaseConnection();<br />
</span><span style="color: #008080;">23</span> &nbsp; <span style="color: #000000;">}<br />
</span><span style="color: #008080;">24</span> &nbsp; <span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(status&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;HttpStatus.SC_OK)&nbsp;{<br />
</span><span style="color: #008080;">25</span> <span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">============================UpLoad file OK! </span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
</span><span style="color: #008080;">26</span> <span style="color: #000000;">&nbsp; }&nbsp; <br />
</span></div>
<br />
&nbsp;&nbsp;&nbsp;&nbsp; 本来URL中的<span style="color: #000000;">contentID和</span><span style="color: #000000;">action两个参数我是通过StringPart来传递的，结果传递上去的值就成了:<br />
&nbsp;&nbsp;&nbsp;&nbsp; action=</span>Content-Transfer-Encoding: 8bit<br />
&nbsp;&nbsp;&nbsp;&nbsp; submit<br />
&nbsp;&nbsp;&nbsp;&nbsp; 而且目前这种方法上传的文件，也会在文件内容的第一行中出现：Content-Transfer-Encoding: 8bit，由于不影响测试的效果，所以就搁置了，等有空时再来研究这个问题，如果有朋友知道问题的原因，也请一定不要吝啬您的回答哦。
<img src ="http://www.blogjava.net/askcuix/aggbug/209731.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/askcuix/" target="_blank">Chris.Cui</a> 2008-06-21 22:43 <a href="http://www.blogjava.net/askcuix/archive/2008/06/21/209731.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HttpClient的一些技巧</title><link>http://www.blogjava.net/askcuix/archive/2008/06/20/209549.html</link><dc:creator>Chris.Cui</dc:creator><author>Chris.Cui</author><pubDate>Fri, 20 Jun 2008 13:37:00 GMT</pubDate><guid>http://www.blogjava.net/askcuix/archive/2008/06/20/209549.html</guid><wfw:comment>http://www.blogjava.net/askcuix/comments/209549.html</wfw:comment><comments>http://www.blogjava.net/askcuix/archive/2008/06/20/209549.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/askcuix/comments/commentRss/209549.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/askcuix/services/trackbacks/209549.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; 使用HttpClient过程中经常会碰到以下的问题，明白了这些技巧，处理起来将会非常的简单。<br />
<br />
一、字符编码<br />
&nbsp;&nbsp;&nbsp; 某目标页的编码可能出现在两个地方，第一个地方是服务器返回的 http 头中，另外一个地方是得到的 html/xml 页面中。<br />
&nbsp;&nbsp;&nbsp; 1、在 http 头的 Content-Type 字段可能会包含字符编码信息。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 例如可能返回的头会包含这样子的信息：Content-Type: text/html; charset=UTF-8。这个头信息表明该页的编码是UTF-8，但是服务器返回的头信息未必与内容能匹配上。比如对于一些双字节语言国家，可能服务器返回的编码类型是UTF-8，但真正的内容却不是UTF-8编码的，因此需要在另外的地方去得到页面的编码信息；但是如果服务器返回的编码不是UTF-8，而是具体的一些编码，比如gb2312等，那服务器返回的可能是正确的编码信息。通过method对象的getResponseCharSet()方法就可以得到http头中的编码信息。<br />
&nbsp;&nbsp;&nbsp; 2、对于象xml或者html这样的文件，允许在页面中直接指定编码类型。比如在html中会有&lt;meta http-equiv="Content-Type" content="text/html; charset=gb2312"/&gt;这样的标签；或者在xml中会有&lt;?xml version="1.0" encoding="gb2312"?&gt;这样的标签，在这些情况下，可能与http头中返回的编码信息冲突，需要用户自己判断到底那种编码类型应该是真正的编码。<br />
<br />
二、自动转向<br />
&nbsp;&nbsp;&nbsp; 根据RFC中对自动转向的定义，主要有两种：301和302。301表示永久的移走（Moved Permanently），当返回的是301，则表示请求的资源已经被移到一个固定的新地方，任何向该地址发起请求都会被转到新的地址上。302表示暂时的转向，比如在服务器端的servlet程序调用了sendRedirect方法，则在客户端就会得到一个302的代码，这时服务器返回的头信息中location的值就是sendRedirect转向的目标地址。<br />
HttpClient支持自动转向处理，但是象POST和PUT方式这种要求接受后继服务的请求方式，暂时不支持自动转向，因此如果碰到POST方式提交后返回的是301或者302的话需要自己处理。需要注意的是，有时候location返回的可能是相对路径，因此需要对location返回的值做一些处理才可以发起向新地址的请求。<br />
&nbsp;&nbsp;&nbsp; 另外除了在头中包含的信息可能使页面发生重定向外，在页面中也有可能会发生页面的重定向。引起页面自动转发的标签是：&lt;meta http-equiv="refresh" content="5; url=http://www.ibm.com/"&gt;。如果你想在程序中也处理这种情况的话得自己分析页面来实现转向。需要注意的是，在上面那个标签中url的值也可以是一个相对地址，如果是这样的话，需要对它做一些处理后才可以转发。<br />
<br />
三、代理服务器<br />
&nbsp;&nbsp;&nbsp; HttpClient中使用代理服务器非常简单，调用HttpClient中setProxy方法就可以，方法的第一个参数是代理服务器地址，第二个参数是端口号。另外HttpClient也支持SOCKS代理。<br />
<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">&nbsp;&nbsp;&nbsp; httpClient.getHostConfiguration().setProxy(hostName,port);</span></div>
<br />
&nbsp;&nbsp;&nbsp; HttpClient对http协议的支持非常好，使用起来很简单，功能也很强大，具有足够的灵活性和扩展性。对于想在Java应用中直接访问http资源的编程人员来说，HttpClient是一个不可多得的好工具。
<img src ="http://www.blogjava.net/askcuix/aggbug/209549.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/askcuix/" target="_blank">Chris.Cui</a> 2008-06-20 21:37 <a href="http://www.blogjava.net/askcuix/archive/2008/06/20/209549.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HttpClient基本功能的使用</title><link>http://www.blogjava.net/askcuix/archive/2008/06/20/209547.html</link><dc:creator>Chris.Cui</dc:creator><author>Chris.Cui</author><pubDate>Fri, 20 Jun 2008 13:26:00 GMT</pubDate><guid>http://www.blogjava.net/askcuix/archive/2008/06/20/209547.html</guid><wfw:comment>http://www.blogjava.net/askcuix/comments/209547.html</wfw:comment><comments>http://www.blogjava.net/askcuix/archive/2008/06/20/209547.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/askcuix/comments/commentRss/209547.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/askcuix/services/trackbacks/209547.html</trackback:ping><description><![CDATA[一、GET 方法<br />
&nbsp;&nbsp;&nbsp; 使用 HttpClient 需要以下 6 个步骤：<br />
&nbsp;&nbsp;&nbsp; 1. 创建 HttpClient 的实例<br />
&nbsp;&nbsp;&nbsp; 2. 创建某种连接方法的实例，在这里是 GetMethod。在 GetMethod 的构造函数中传入待连接的地址<br />
&nbsp;&nbsp;&nbsp; 3. 调用第一步中创建好的实例的 execute 方法来执行第二步中创建好的 method 实例<br />
&nbsp;&nbsp;&nbsp; 4. 读 response<br />
&nbsp;&nbsp;&nbsp; 5. 释放连接。无论执行方法是否成功，都必须释放连接<br />
&nbsp;&nbsp;&nbsp; 6. 对得到后的内容进行处理<br />
<br />
&nbsp;&nbsp;&nbsp; 根据以上步骤，我们来编写用GET方法取得某网页内容的代码。<br />
&nbsp;&nbsp;&nbsp; 1、大部分情况下 HttpClient 默认的构造函数已经足够使用。<br />
&nbsp; <br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpClient&nbsp;httpClient&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;HttpClient();</span></div>
<br />
&nbsp;&nbsp;&nbsp; 2、创建GET方法的实例。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在GET方法的构造函数中传入待连接的地址即可。用GetMethod将会自动处理转发过程，如果想要把自动处理转发过程去掉的话，可以调用方法setFollowRedirects(false)。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GetMethod&nbsp;getMethod&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;GetMethod(</span><span style="color: #000000;">"</span><span style="color: #000000;">http://www.ibm.com/</span><span style="color: #000000;">"</span><span style="color: #000000;">);</span></div>
<br />
&nbsp;&nbsp;&nbsp; 3、调用 httpClient 的 executeMethod 方法来执行 getMethod。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 由于是执行在网络上的程序，在运行executeMethod方法的时候，需要处理两个异常，分别是HttpException和IOException。引起第一种异常的原因主要可能是在构造getMethod的时候传入的协议不对，比如将"http"写成了"htp"，或者服务器端返回的内容不正常等，并且该异常发生是不可恢复的；第二种异常一般是由于网络原因引起的异常，对于这种异常（IOException），HttpClient会根据你指定的恢复策略自动试着重新执行executeMethod方法。HttpClient的恢复 策略可以自定义（通过实现接口HttpMethodRetryHandler来实现）。通过httpClient的方法setParameter设置你实现的恢复策略，本例中使用的是系统提供的默认恢复策略，该策略在碰到第二类异常的时候将自动重试3次。executeMethod返回值是一个整数，表示了执行该方法后服务器返回的状态码，该状态码能表示出该方法执行是否成功、需要认证或者页面发生了跳转（默认状态下GetMethod的实例是自动处理跳转的）等。<br />
<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp; //</span><span style="color: #008000;">设置成了默认的恢复策略，在发生异常时候将自动重试3次，在这里你也可以设置成自定义的恢复策略</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp; getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;DefaultHttpMethodRetryHandler());<br />
</span><span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp; //</span><span style="color: #008000;">执行getMethod</span><span style="color: #008000;"><br />
</span><span style="color: #0000ff;">&nbsp;&nbsp;&nbsp;&nbsp; int</span><span style="color: #000000;">&nbsp;statusCode&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;client.executeMethod(getMethod);<br />
</span><span style="color: #0000ff;">&nbsp;&nbsp;&nbsp;&nbsp; if</span><span style="color: #000000;">&nbsp;(statusCode&nbsp;</span><span style="color: #000000;">!=</span><span style="color: #000000;">&nbsp;HttpStatus.SC_OK)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.err.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">Method&nbsp;failed:&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;getMethod.getStatusLine());<br />
&nbsp;&nbsp;&nbsp;&nbsp; }</span></div>
<br />
&nbsp;&nbsp;&nbsp; 4、在返回的状态码正确后，即可取得内容。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 取得目标地址的内容有三种方法：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ⅰ、getResponseBody，该方法返回的是目标的二进制的byte流；<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ⅱ、getResponseBodyAsString，这个方法返回的是String类型，值得注意的是该方法返回的String的编码是根据系统默认的编码方式，所以返回的String值可能编码类型有误；<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ⅲ、getResponseBodyAsStream，这个方法对于目标地址中有大量数据需要传输是最佳的。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在这里我们使用了最简单的 getResponseBody方法。<br />
<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; byte</span><span style="color: #000000;">[]&nbsp;responseBody&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;method.getResponseBody();</span></div>
<br />
&nbsp;&nbsp;&nbsp; 5、释放连接。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 无论执行方法是否成功，都必须释放连接。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; method.releaseConnection();</span></div>
<br />
&nbsp;&nbsp;&nbsp; 6、处理内容。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在这一步中根据你的需要处理内容，本例中只是简单的将内容打印到控制台。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;String(responseBody));</span></div>
<br />
&nbsp;&nbsp;&nbsp; 下面是程序的完整代码：<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080;">&nbsp;1</span>&nbsp;&nbsp; <span style="color: #0000ff;">package</span><span style="color: #000000;">&nbsp;test;<br />
</span><span style="color: #008080;">&nbsp;2</span>&nbsp;<span style="color: #0000ff;">&nbsp; import</span><span style="color: #000000;">&nbsp;java.io.IOException;<br />
</span><span style="color: #008080;">&nbsp;3</span>&nbsp;&nbsp; <span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;org.apache.commons.httpclient.</span><span style="color: #000000;">*</span><span style="color: #000000;">;<br />
</span><span style="color: #008080;">&nbsp;4</span>&nbsp;<span style="color: #0000ff;">&nbsp; import</span><span style="color: #000000;">&nbsp;org.apache.commons.httpclient.methods.GetMethod;<br />
</span><span style="color: #008080;">&nbsp;5</span>&nbsp;<span style="color: #0000ff;">&nbsp; import</span><span style="color: #000000;">&nbsp;org.apache.commons.httpclient.params.HttpMethodParams;<br />
</span><span style="color: #008080;">&nbsp;6</span>&nbsp;<span style="color: #0000ff;">&nbsp; public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;GetSample{<br />
</span><span style="color: #008080;">&nbsp;7</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;main(String[]&nbsp;args)&nbsp;{<br />
</span><span style="color: #008080;">&nbsp;8</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #008000;">//</span><span style="color: #008000;">构造HttpClient的实例</span><span style="color: #008000;"><br />
</span><span style="color: #008080;">&nbsp;9</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpClient&nbsp;httpClient&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;HttpClient();<br />
</span><span style="color: #008080;">10</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #008000;">//</span><span style="color: #008000;">创建GET方法的实例</span><span style="color: #008000;"><br />
</span><span style="color: #008080;">11</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GetMethod&nbsp;getMethod&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;GetMethod(</span><span style="color: #000000;">"</span><span style="color: #000000;">http://www.ibm.com</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
</span><span style="color: #008080;">12</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #008000;">//</span><span style="color: #008000;">使用系统提供的默认的恢复策略</span><span style="color: #008000;"><br />
</span><span style="color: #008080;">13</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,<br />
</span><span style="color: #008080;">14</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;DefaultHttpMethodRetryHandler());<br />
</span><span style="color: #008080;">15</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">try</span><span style="color: #000000;">&nbsp;{<br />
</span><span style="color: #008080;">16</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #008000;">//</span><span style="color: #008000;">执行getMethod</span><span style="color: #008000;"><br />
</span><span style="color: #008080;">17</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;statusCode&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;httpClient.executeMethod(getMethod);<br />
</span><span style="color: #008080;">18</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(statusCode&nbsp;</span><span style="color: #000000;">!=</span><span style="color: #000000;">&nbsp;HttpStatus.SC_OK)&nbsp;{<br />
</span><span style="color: #008080;">19</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.err.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">Method&nbsp;failed:&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">20</span> <span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +</span><span style="color: #000000;">&nbsp;getMethod.getStatusLine());<br />
</span><span style="color: #008080;">21</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
</span><span style="color: #008080;">22</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #008000;">//</span><span style="color: #008000;">读取内容</span><span style="color: #008000;"><br />
</span><span style="color: #008080;">23</span>&nbsp;<span style="color: #000000;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; </span><span style="color: #0000ff;">byte</span><span style="color: #000000;">[]&nbsp;responseBody&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;getMethod.getResponseBody();<br />
</span><span style="color: #008080;">24</span>&nbsp;<span style="color: #000000;">&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #008000;">//</span><span style="color: #008000;">处理内容</span><span style="color: #008000;"><br />
</span><span style="color: #008080;">25</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;String(responseBody));<br />
</span><span style="color: #008080;">26</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;</span><span style="color: #0000ff;">catch</span><span style="color: #000000;">&nbsp;(HttpException&nbsp;e)&nbsp;{<br />
</span><span style="color: #008080;">27</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #008000;">//</span><span style="color: #008000;">发生致命的异常，可能是协议不对或者返回的内容有问题</span><span style="color: #008000;"><br />
</span><span style="color: #008080;">28</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">Please&nbsp;check&nbsp;your&nbsp;provided&nbsp;http&nbsp;address!</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
</span><span style="color: #008080;">29</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.printStackTrace();<br />
</span><span style="color: #008080;">30</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;</span><span style="color: #0000ff;">catch</span><span style="color: #000000;">&nbsp;(IOException&nbsp;e)&nbsp;{<br />
</span><span style="color: #008080;">31</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #008000;">//</span><span style="color: #008000;">发生网络异常</span><span style="color: #008000;"><br />
</span><span style="color: #008080;">32</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.printStackTrace();<br />
</span><span style="color: #008080;">33</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;</span><span style="color: #0000ff;">finally</span><span style="color: #000000;">&nbsp;{<br />
</span><span style="color: #008080;">34</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #008000;">//</span><span style="color: #008000;">释放连接</span><span style="color: #008000;"><br />
</span><span style="color: #008080;">35</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; getMethod.releaseConnection();<br />
</span><span style="color: #008080;">36</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
</span><span style="color: #008080;">37</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
</span><span style="color: #008080;">38</span>&nbsp;&nbsp;&nbsp; <span style="color: #000000;">}</span></div>
<br />
二、POST方法<br />
&nbsp;&nbsp;&nbsp; POST 方法用来向目的服务器发出请求，要求它接受被附在请求后的实体，并把它当作请求队列（Request-Line）中请求URI所指定资源的附加新子项。<br />
&nbsp;&nbsp;&nbsp; 调用 HttpClient 中的 PostMethod 与 GetMethod 类似，除了设置 PostMethod 的实例与 GetMethod 有些不同之外，剩下的步骤都差不多。在下面的例子中，省去了与GetMethod相同的步骤，只说明与上面不同的地方。<br />
&nbsp;&nbsp;&nbsp; 构造 PostMethod 之前的步骤都相同，与 GetMethod 一样，构造 PostMethod 也需要一个URI参数，在创建了PostMethod的实例之后，需要给method实例填充表单的值，一般的登录表单中需要有两个域，第一个是用户名，第二个是密码。表单中的域用类 NameValuePair 来表示，该类的构造函数第一个参数是表单域名名称，第二参数是该域的值；将表单所有的值设置到 PostMethod 中用方法 setRequestBody。如果登录成功后会转向另外一个页面，HttpClient对于要求接受后继服务的请求，比如POST和PUT，不支持自动转发，因此需要自己对页面转向做处理。<br />
&nbsp;&nbsp;&nbsp; 代码如下：<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080;">&nbsp;1</span>&nbsp; S<span style="color: #000000;">tring&nbsp;url&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">http://www.test.com/login.jsp</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br />
</span><span style="color: #008080;">&nbsp;2</span>&nbsp; <span style="color: #000000;">PostMethod&nbsp;postMethod&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;PostMethod(url);<br />
</span><span style="color: #008080;">&nbsp;3</span>&nbsp;<span style="color: #008000;"> //</span><span style="color: #008000;">&nbsp;填入各个表单域的值</span><span style="color: #008000;"><br />
</span><span style="color: #008080;">&nbsp;4</span>&nbsp;<span style="color: #000000;"> NameValuePair[]&nbsp;data&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;{&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;NameValuePair(</span><span style="color: #000000;">"</span><span style="color: #000000;">id</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">youUserName</span><span style="color: #000000;">"</span><span style="color: #000000;">),&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080;">&nbsp;5</span>&nbsp;<span style="color: #0000ff;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new</span><span style="color: #000000;">&nbsp;NameValuePair(</span><span style="color: #000000;">"</span><span style="color: #000000;">passwd</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">yourPwd</span><span style="color: #000000;">"</span><span style="color: #000000;">)&nbsp;};<br />
</span><span style="color: #008080;">&nbsp;6</span>&nbsp;<span style="color: #008000;"> //</span><span style="color: #008000;">&nbsp;将表单的值放入postMethod中</span><span style="color: #008000;"><br />
</span><span style="color: #008080;">&nbsp;7</span>&nbsp; <span style="color: #000000;">postMethod.setRequestBody(data);<br />
</span><span style="color: #008080;">&nbsp;8</span>&nbsp;<span style="color: #008000;"> //</span><span style="color: #008000;">&nbsp;执行postMethod</span><span style="color: #008000;"><br />
</span><span style="color: #008080;">&nbsp;9</span>&nbsp;<span style="color: #0000ff;"> int</span><span style="color: #000000;">&nbsp;statusCode&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;httpClient.executeMethod(postMethod);<br />
</span><span style="color: #008080;">10</span>&nbsp; <span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;HttpClient对于要求接受后继服务的请求，象POST和PUT等不能自动处理转发<br />
</span><span style="color: #008080;">11</span>&nbsp;<span style="color: #008000;"> //</span><span style="color: #008000;">&nbsp;301或者302</span><span style="color: #008000;"><br />
</span><span style="color: #008080;">12</span>&nbsp;<span style="color: #0000ff;"> if</span><span style="color: #000000;">&nbsp;(statusCode&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;HttpStatus.SC_MOVED_PERMANENTLY&nbsp;</span><span style="color: #000000;">||</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">13</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #000000;">statusCode&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;HttpStatus.SC_MOVED_TEMPORARILY)&nbsp;{<br />
</span><span style="color: #008080;">14</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;从头中取出转向的地址</span><span style="color: #008000;"><br />
</span><span style="color: #008080;">15</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp; Header&nbsp;locationHeader&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;postMethod.getResponseHeader(</span><span style="color: #000000;">"</span><span style="color: #000000;">location</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
</span><span style="color: #008080;">16</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp; String&nbsp;location&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">null</span><span style="color: #000000;">;<br />
</span><span style="color: #008080;">17</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(locationHeader&nbsp;</span><span style="color: #000000;">!=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">null</span><span style="color: #000000;">)&nbsp;{<br />
</span><span style="color: #008080;">18</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; location&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;locationHeader.getValue();<br />
</span><span style="color: #008080;">19</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">The&nbsp;page&nbsp;was&nbsp;redirected&nbsp;to:</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;location);<br />
</span><span style="color: #008080;">20</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;">&nbsp;{<br />
</span><span style="color: #008080;">21</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.err.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">Location&nbsp;field&nbsp;value&nbsp;is&nbsp;null.</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
</span><span style="color: #008080;">22</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp; }<br />
</span><span style="color: #008080;">23</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">return</span><span style="color: #000000;">;<br />
</span><span style="color: #008080;">24</span>&nbsp; <span style="color: #000000;">} <br />
</span></div>
<br />
<br />
<img src ="http://www.blogjava.net/askcuix/aggbug/209547.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/askcuix/" target="_blank">Chris.Cui</a> 2008-06-20 21:26 <a href="http://www.blogjava.net/askcuix/archive/2008/06/20/209547.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HttpClient简介</title><link>http://www.blogjava.net/askcuix/archive/2008/06/20/209538.html</link><dc:creator>Chris.Cui</dc:creator><author>Chris.Cui</author><pubDate>Fri, 20 Jun 2008 12:52:00 GMT</pubDate><guid>http://www.blogjava.net/askcuix/archive/2008/06/20/209538.html</guid><wfw:comment>http://www.blogjava.net/askcuix/comments/209538.html</wfw:comment><comments>http://www.blogjava.net/askcuix/archive/2008/06/20/209538.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/askcuix/comments/commentRss/209538.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/askcuix/services/trackbacks/209538.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; HTTP 协议可能是现在 Internet 上使用得最多、最重要的协议了，越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源。虽然在 JDK 的 java.net 包中已经提供了访问 HTTP 协议的基本功能，但是对于大部分应用程序来说，JDK 库本身提供的功能还不够丰富和灵活。&nbsp; <br />
&nbsp;&nbsp;&nbsp; HttpClient 是 Apache Jakarta Common 下的子项目，用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包，该项目就是专门设计来简化 HTTP 客户端与服务器进行各种通讯编程，通过它，可以让原来很头疼的事情现在轻松的解决。<br />
<br />
&nbsp;&nbsp;&nbsp; HttpClient 功能介绍：<br />
&nbsp;&nbsp;&nbsp; 以下列出的是 HttpClient 提供的主要的功能，<br />
<ul>
    <li>实现了所有 HTTP 的方法（GET,POST,PUT,HEAD 等）</li>
</ul>
<ul>
    <li>支持自动转向</li>
</ul>
<ul>
    <li>支持 HTTPS 协议</li>
</ul>
<ul>
    <li>支持代理服务器等<!--[if gte mso 9]><![endif]--><br />
    <br />
    </li>
</ul>

<img src ="http://www.blogjava.net/askcuix/aggbug/209538.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/askcuix/" target="_blank">Chris.Cui</a> 2008-06-20 20:52 <a href="http://www.blogjava.net/askcuix/archive/2008/06/20/209538.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>memcached安装</title><link>http://www.blogjava.net/askcuix/archive/2008/05/20/208304.html</link><dc:creator>Chris.Cui</dc:creator><author>Chris.Cui</author><pubDate>Tue, 20 May 2008 08:40:00 GMT</pubDate><guid>http://www.blogjava.net/askcuix/archive/2008/05/20/208304.html</guid><wfw:comment>http://www.blogjava.net/askcuix/comments/208304.html</wfw:comment><comments>http://www.blogjava.net/askcuix/archive/2008/05/20/208304.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/askcuix/comments/commentRss/208304.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/askcuix/services/trackbacks/208304.html</trackback:ping><description><![CDATA[<p>1、下载, memcached需要先安装libevent<br />
&nbsp;&nbsp; memcached的下载地址:http://danga.com/memcached/download.bml<br />
&nbsp;&nbsp; libevent的下载地址 :http://www.monkey.org/~provos/libevent/</p>
<p>2、安装libevent</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #008000">#</span><span style="color: #008000">&nbsp;tar&nbsp;xvf&nbsp;libevent-1.4.4-stable.tar.gz&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />#</span><span style="color: #008000">&nbsp;cd&nbsp;libevent-1.4.4-stable&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />#</span><span style="color: #008000">&nbsp;./configure&nbsp;--prefix=&nbsp;/opt/cuix/3rdParty/libevent-1.4.4&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />#</span><span style="color: #008000">&nbsp;make&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />#</span><span style="color: #008000">&nbsp;make&nbsp;install</span></div>
<p>&nbsp;&nbsp; 检查是否安装成功:</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #008000">#</span><span style="color: #008000">cd&nbsp;/opt/cuix/3rdParty/libevent-1.4.4/lib</span></div>
<p>&nbsp;&nbsp; 如果有：<br />
&nbsp;&nbsp; libevent-1.4.so.2&nbsp; <br />
&nbsp;&nbsp; libevent-1.4.so.2.0.0&nbsp; <br />
&nbsp;&nbsp; libevent.a&nbsp; <br />
&nbsp;&nbsp; libevent.la&nbsp; <br />
&nbsp;&nbsp; libevent.so<br />
&nbsp;&nbsp; 这几个文件存在，说明安装成功。</p>
<p>3、安装memcached<br />
&nbsp;&nbsp;&nbsp; </p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #008000">#</span><span style="color: #008000">&nbsp;tar&nbsp;xvf&nbsp;memcached-1.2.5.tar.gz&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />#</span><span style="color: #008000">&nbsp;cd&nbsp;memcached-1.2.5&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />#</span><span style="color: #008000">&nbsp;./configure&nbsp;--with-libevent=/opt/cuix/3rdParty/libevent-1.4.4&nbsp;</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">--</span><span style="color: #000000">prefix</span><span style="color: #000000">=/</span><span style="color: #000000">opt</span><span style="color: #000000">/</span><span style="color: #000000">cuix</span><span style="color: #000000">/</span><span style="color: #000000">3rdParty</span><span style="color: #000000">/</span><span style="color: #000000">memcached</span><span style="color: #000000">-</span><span style="color: #000000">1.2</span><span style="color: #000000">.</span><span style="color: #000000">5</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">#</span><span style="color: #008000">&nbsp;make&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />#</span><span style="color: #008000">&nbsp;make&nbsp;install</span></div>
<p>&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp; 检查是否安装成功:</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #008000">#</span><span style="color: #008000">&nbsp;cd&nbsp;3rdParty/memcached-1.2.5/bin</span></div>
<p>&nbsp;&nbsp; 如果memcached 和memcached-debug这2个文件存在，说明安装成功</p>
<p>4、执行</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #008000">#</span><span style="color: #008000">&nbsp;cd&nbsp;/opt/cuix/3rdParty/memcached-1.2.5/bin&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />#</span><span style="color: #008000">&nbsp;./memcached&nbsp;-h</span></div>
<p>&nbsp;<br />
&nbsp;&nbsp; 如果出现：<br />
&nbsp;&nbsp; </p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">memcached&nbsp;</span><span style="color: #000000">1.2.5</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;-p&nbsp;&lt;num&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TCP&nbsp;port&nbsp;number&nbsp;to&nbsp;listen&nbsp;on&nbsp;(default:&nbsp;</span><span style="color: #000000">11211</span><span style="color: #000000">)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;-U&nbsp;&lt;num&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UDP&nbsp;port&nbsp;number&nbsp;to&nbsp;listen&nbsp;on&nbsp;(default:&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">,</span><span style="color: #000000">&nbsp;off)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;-s&nbsp;&lt;file&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unix&nbsp;socket&nbsp;path&nbsp;to&nbsp;listen&nbsp;on&nbsp;(disables&nbsp;network&nbsp;support)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;-a&nbsp;&lt;mask&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;access&nbsp;mask&nbsp;for&nbsp;unix&nbsp;socket</span><span style="color: #000000">,</span><span style="color: #000000">&nbsp;in&nbsp;octal&nbsp;(default&nbsp;</span><span style="color: #000000">0700</span><span style="color: #000000">)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;-l&nbsp;&lt;ip_addr&gt;&nbsp;&nbsp;interface&nbsp;to&nbsp;listen&nbsp;on</span><span style="color: #000000">,</span><span style="color: #000000">&nbsp;default&nbsp;is&nbsp;INDRR_ANY<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;-d&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;run&nbsp;as&nbsp;a&nbsp;daemon<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;-r&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maximize&nbsp;core&nbsp;file&nbsp;limit<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;-u&nbsp;&lt;username&gt;&nbsp;assume&nbsp;identity&nbsp;of&nbsp;&lt;username&gt;&nbsp;(only&nbsp;when&nbsp;run&nbsp;as&nbsp;root)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;-m&nbsp;&lt;num&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;max&nbsp;memory&nbsp;to&nbsp;use&nbsp;for&nbsp;items&nbsp;in&nbsp;megabytes</span><span style="color: #000000">,</span><span style="color: #000000">&nbsp;default&nbsp;is&nbsp;</span><span style="color: #000000">64</span><span style="color: #000000">&nbsp;MB<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;-M&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;error&nbsp;on&nbsp;memory&nbsp;exhausted&nbsp;(rather&nbsp;than&nbsp;removing&nbsp;items)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;-c&nbsp;&lt;num&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;max&nbsp;simultaneous&nbsp;connections</span><span style="color: #000000">,</span><span style="color: #000000">&nbsp;default&nbsp;is&nbsp;</span><span style="color: #000000">1024</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;-k&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lock&nbsp;down&nbsp;all&nbsp;paged&nbsp;memory.&nbsp;&nbsp;Note&nbsp;that&nbsp;there&nbsp;is&nbsp;a<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;limit&nbsp;on&nbsp;how&nbsp;much&nbsp;memory&nbsp;you&nbsp;may&nbsp;lock.&nbsp;&nbsp;Trying&nbsp;to<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;allocate&nbsp;more&nbsp;than&nbsp;that&nbsp;would&nbsp;fail</span><span style="color: #000000">,</span><span style="color: #000000">&nbsp;so&nbsp;be&nbsp;sure&nbsp;you<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set&nbsp;the&nbsp;limit&nbsp;correctly&nbsp;for&nbsp;the&nbsp;user&nbsp;you&nbsp;started<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;the&nbsp;daemon&nbsp;with&nbsp;(not&nbsp;for&nbsp;-u&nbsp;&lt;username&gt;&nbsp;user</span><span style="color: #008000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;under&nbsp;sh&nbsp;this&nbsp;is&nbsp;done&nbsp;with&nbsp;'ulimit&nbsp;-S&nbsp;-l&nbsp;NUM_KB').<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;-v&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;verbose&nbsp;(print&nbsp;errors/warnings&nbsp;while&nbsp;in&nbsp;event&nbsp;loop)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;-vv&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;very&nbsp;verbose&nbsp;(also&nbsp;print&nbsp;client&nbsp;commands/reponses)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;-h&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print&nbsp;this&nbsp;help&nbsp;and&nbsp;exit<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;-i&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print&nbsp;memcached&nbsp;and&nbsp;libevent&nbsp;license<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;-b&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;run&nbsp;a&nbsp;managed&nbsp;instanced&nbsp;(mnemonic:&nbsp;buckets)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;-P&nbsp;&lt;file&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;save&nbsp;PID&nbsp;in&nbsp;&lt;file&gt;</span><span style="color: #000000">,</span><span style="color: #000000">&nbsp;only&nbsp;used&nbsp;with&nbsp;-d&nbsp;option<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;-f&nbsp;&lt;factor&gt;&nbsp;&nbsp;&nbsp;chunk&nbsp;size&nbsp;growth&nbsp;factor</span><span style="color: #000000">,</span><span style="color: #000000">&nbsp;default&nbsp;</span><span style="color: #000000">1.25</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;-n&nbsp;&lt;bytes&gt;&nbsp;&nbsp;&nbsp;&nbsp;minimum&nbsp;space&nbsp;allocated&nbsp;for&nbsp;key+value+flags</span><span style="color: #000000">,</span><span style="color: #000000">&nbsp;default&nbsp;</span><span style="color: #000000">48</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<p>&nbsp;&nbsp;&nbsp; 说明安装成功，并且路径配置正确。<br />
&nbsp;&nbsp; 有可能会出现：</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">memcached:&nbsp;error&nbsp;while&nbsp;loading&nbsp;shared&nbsp;libraries:&nbsp;libevent-</span><span style="color: #000000">1.4</span><span style="color: #000000">.so</span><span style="color: #000000">.2</span><span style="color: #000000">:&nbsp;cannot&nbsp;open&nbsp;shared&nbsp;object&nbsp;file:&nbsp;No&nbsp;such&nbsp;file&nbsp;or&nbsp;directory</span></div>
<p>&nbsp;&nbsp; 说明没有找到文件：libevent-1.4.so.2</p>
<p>&nbsp;&nbsp; 解决办法：<br />
&nbsp;&nbsp; 将libevent-1.4.so.2拷贝到任何一个列出的lib下或者软链接就可以了。<br />
&nbsp;&nbsp; 或者 修改.profile文件。加入：</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">export&nbsp;LD_LIBRARY_PATH</span><span style="color: #000000">=</span><span style="color: #000000">$LD_LIBRARY_PATH:</span><span style="color: #000000">/</span><span style="color: #000000">usr</span><span style="color: #000000">/</span><span style="color: #000000">lib:</span><span style="color: #000000">/</span><span style="color: #000000">opt</span><span style="color: #000000">/</span><span style="color: #000000">cuix</span><span style="color: #000000">/</span><span style="color: #000000">3rdParty</span><span style="color: #000000">/</span><span style="color: #000000">libevent</span><span style="color: #000000">-</span><span style="color: #000000">1.4</span><span style="color: #000000">.</span><span style="color: #000000">4</span><span style="color: #000000">/</span><span style="color: #000000">lib&nbsp;</span></div>
<p>&nbsp;&nbsp;<br />
&nbsp;&nbsp; 启动服务：</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">.</span><span style="color: #000000">/</span><span style="color: #000000">memcached&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">d&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">m&nbsp;</span><span style="color: #000000">10</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">u&nbsp;cuix&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">l&nbsp;</span><span style="color: #000000">10.3</span><span style="color: #000000">.</span><span style="color: #000000">2.36</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">p&nbsp;</span><span style="color: #000000">18887</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">c&nbsp;</span><span style="color: #000000">256</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">P&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">tmp</span><span style="color: #000000">/</span><span style="color: #000000">memcached.pid</span></div>
<p>&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp; 参数说明:<br />
&nbsp;&nbsp;&nbsp; -d选项是启动一个守护进程<br />
&nbsp;&nbsp;&nbsp; -m是分配给Memcache使用的内存数量，单位是MB，我这里是10MB<br />
&nbsp;&nbsp;&nbsp; -u是运行Memcache的用户，我这里是root<br />
&nbsp;&nbsp;&nbsp; -l是监听的服务器IP地址<br />
&nbsp;&nbsp;&nbsp; -p是设置Memcache监听的端口,最好是1024以上的端口<br />
&nbsp;&nbsp;&nbsp; -c选项是最大运行的并发连接数，默认是1024，按照你服务器的负载量来设定<br />
&nbsp;&nbsp;&nbsp; -P是设置保存Memcache的pid文件</p>
<p>&nbsp;&nbsp;&nbsp; 停止服务：<br />
&nbsp;&nbsp;&nbsp; 用# ps -e 查看进程，# kill pid memcached的进程号。</p>
 <img src ="http://www.blogjava.net/askcuix/aggbug/208304.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/askcuix/" target="_blank">Chris.Cui</a> 2008-05-20 16:40 <a href="http://www.blogjava.net/askcuix/archive/2008/05/20/208304.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>memcached概述</title><link>http://www.blogjava.net/askcuix/archive/2008/05/18/208301.html</link><dc:creator>Chris.Cui</dc:creator><author>Chris.Cui</author><pubDate>Sun, 18 May 2008 10:15:00 GMT</pubDate><guid>http://www.blogjava.net/askcuix/archive/2008/05/18/208301.html</guid><wfw:comment>http://www.blogjava.net/askcuix/comments/208301.html</wfw:comment><comments>http://www.blogjava.net/askcuix/archive/2008/05/18/208301.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/askcuix/comments/commentRss/208301.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/askcuix/services/trackbacks/208301.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memcached是一个高性能的、分布式内存对象缓存系统，通过在内存里维护一个统一的巨大的hash表，它能够用来存储各种格式的数据，包括图像、视频、文件以及数据库检索的结果等，多用于加速WEB应用、降低数据库负载等。Danga Interactive 开发memcached用来提高 LiveJournal.com 的速度，这个站点每天处理2000万以上的动态页面请求，独立用户有100万左右。memcached把数据库的负载降到了几乎没事可干的地步，并为用户提供很快的页面响应速度，更好的资源利用率和更快的数据库存取操作。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 首先启动一个memcached监护进程，监护进程不需要配置文件，只要在命令行里面加三四个参数就可以了:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # ./memcached -d -m 2048 -l 10.0.0.40 -p 11211<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这里指定使用2GB内存，监听10.0.0.40的11211端口来启动memcached。因为32位处理器最多只能有4GB的地址空间。如果你确实需要32位的服务器处理4-64GB的内存(使用PAE)，则每个使用2-3GB内存。<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 数据库为了在关系数据库管理系统上实现ACID，使用了锁，导致很多读写阻塞。而memcached从不会阻塞。首先使用缓存的很多用户都是用于WEB。这意味着要分配时间出来做多请求处理给不同的系统，如mod_perl、PHP等等，这是对全局缓存的一种浪费。如果你使用多线程语言和共享内存API，如IPC::Shareable，你的每个线程都拥有独立的缓存。这个也是共享内存的局限性。<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; memcached服务器和客户端实现了全局缓存。实际上，很推荐你在同一台机器上同时运行WEB结点和memcached结点。这会节省一点网络开销，非常快，它使用 libevent 来处理任意数量的连接。在Linux上，尽可能使用 epoll 来实现。使用非阻塞的网络IO和计算，所以对象在不同的客户端上可能有不同的状态。还使用内置的内存块分配和哈希表算法，确保虚拟内存不会过来捣乱。<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; 你可能感兴趣用户是否会获取一个过期的值。服务器API只有一种获取数据的方法，并有3种提交数据的方法：<br />
&nbsp;&nbsp;&nbsp;&nbsp; * set 无条件的设置指定的键为给定的值。<br />
&nbsp;&nbsp;&nbsp;&nbsp; * add 添加到缓存，如果不存在。<br />
&nbsp;&nbsp;&nbsp;&nbsp; * replace 当存在已有值时，替换一下。<br />
&nbsp;&nbsp;&nbsp; 另外，这3个函数都可以设置过期时间。
 <img src ="http://www.blogjava.net/askcuix/aggbug/208301.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/askcuix/" target="_blank">Chris.Cui</a> 2008-05-18 18:15 <a href="http://www.blogjava.net/askcuix/archive/2008/05/18/208301.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>