??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲喷奶水中文字幕电影,亚洲国产成人精品女人久久久 ,亚洲精品网站在线观看不卡无广告http://m.tkk7.com/seaairland/category/10704.html<script type="text/javascript"> <!-- google_ad_client = "pub-6825418521341757"; google_ad_width = 120; google_ad_height = 240; google_ad_format = "120x240_as"; google_ad_type = "text_image"; google_ad_channel ="6369214374"; google_color_border = "336699"; google_color_bg = "FFFFFF"; google_color_link = "0000FF"; google_color_url = "008000"; google_color_text = "000000"; //--></script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> zh-cnFri, 02 Mar 2007 07:20:26 GMTFri, 02 Mar 2007 07:20:26 GMT60Commons-collection http://m.tkk7.com/seaairland/archive/2006/05/04/44513.htmlchenhuichenhuiThu, 04 May 2006 04:15:00 GMThttp://m.tkk7.com/seaairland/archive/2006/05/04/44513.htmlhttp://m.tkk7.com/seaairland/comments/44513.htmlhttp://m.tkk7.com/seaairland/archive/2006/05/04/44513.html#Feedback0http://m.tkk7.com/seaairland/comments/commentRss/44513.htmlhttp://m.tkk7.com/seaairland/services/trackbacks/44513.htmlCommons目理解
        在java目中有很多公用的算法实现和工具c?br />        jarkata目l把q些公用的东西作为开源项目加以实?br />        以后在项目用中可以统一法Q不必写象StringUtil或者DateHelper之类的工L?br />        很多法也不必再查文档,熬夜写个通宵了,:)
        最q需要针对collection作一些扩展,自己写了半天Q才发现commons-collection里面已经有了实现
        而且比自己写的好更完善,效率更高
        索性来研究一下这个项目,因ؓ很多开源项目也使用?br />        以后看开源项目代码的时候也׃用那么费力了
       
概述
        首先q个包是ZJDK1.2开发的Q所以以后在调用的时候就不用兛_JDK版本的问?br />        其二q个包在大部分的开源项目中使用Q已l成Z实上的行业集合类处理标准
Ҏ描q?br />        Bag集合接口Q用于在集合中保存一个对象的多次拯
        Buffer接口Q用于处理FIFO{定义好U除序的结合类
        BidiMap接口Q用于通过value查找key
        MapIteratorQ这个就不用多说了,以后׃用用map.keyset.iteratord理map循环?br />        型别查装饎ͼ其实是可以创徏一个具有指定型别的集合c?br />                比如定义了一个整型的listQ就不能再向q个list里面放StringQ否则会抛出异常
        转换修饰Q就是在向集合中攑օ对象Ӟ可以对象{换ؓ需要的cd的对象再攑օ集合?br />        l合集合Q一个非常好的概念,是把多个集合当一个集合去使用
        排序Map和SetQ保持集合的加入序
        Identity MapQ这个Map中?=而不是equal()ҎL较对?/p>

        * Reference map that allows keys and/or values to be garbage collected under close control
        更多的比较实?br />        更多的P代实?br />        数l或枚Dcd装换到集合类中,非常好用的功能,毕竟array的功能有?br />       
        * Utilities to test or create typical set-theory properties of collections such as union, intersection, and closure

个h对于一些类的体?br />        W一个就是TypedList(q有map,set都一?
        可以创徏一个String的ListQ或者一个只能放入指定Class的ListQ避免编E时候的误写
        java~程思想中提到过创徏指定型别的集合的问题Q不q用这个类׃用那么麻烦了

        CollectionUtils
                针对集合q行?q?判断是否包含/{于{工h?br />                查找一个集合中某个对象出现的数?br />                查找Q或qoQ一个集合中某种class的子集合Q或者计数?br />                集合中的对象进行{换处?br />                数l或枚D对象攑օ集合?br />                提供针对所有集合类的indexQsizeQget{方?br />                提供数组{Ҏ
                提供集合的同步修?br />                        比如HashMap本n是不支持同步的,但这个类提供了一个同步修?br />                        以后再用经q修饰后的HashMap时就不用考虑同步的问题了
                提供止修改集合的工h?br />        同CollectionUtils一栯有相应的ListUtilsQSetUtils{工L
                q些工具cL供的Ҏ基本都出现在CollectionUtils?/p>

        ArrayStack
                一个承自ArrayList的Stack实现
        BeanMap
                一个用于分析javaBean的Map容器Q个人感觉用于测试比较方?br />                因ؓbeanUtilscM可以做这个类的事情,q个cL便的是读取所有属性ƈ昄
        BidiMap
                是一个可以通过value查找key的Map
                限制Q添加对象时Qvalue不能相同
                因ؓq个c还有一个方法就是创Z个反向MapQ把value作ؓkeyQ把key作ؓvalue再创Z个Map
        BoundedCollection接口
                所有实现此接口的集合均被限制了集合大小Q不q超q约束的大小
        Buffer接口
                非常好的一个接口,实现了按照指定顺序移除对?br />                可以用来实现FIFOQLIFO{算?br />                也可以通过Comprator来构造,指定定的移除算?br />        Ordered**接口
                用来实现集合排序
        Predicate接口Q断aQ?br />                用来验证或过滤对?br />        Transformer接口
                用来把一个对象{换成另ؓ一个对?br />        Closure接口
                用来闭一D代码,针对对象q行指定的处?br />        Unmodifiable接口
                所以实玎ͼ或包含了Q此接口的对象均不可以改?/p>

        ComparatorUtilsc?br />                实现了各U比?br />                布尔值比较实?br />                null判断比较
                比较铄实现
                获取minQmax对象
        AbstractDualBidiMap
                一个包含了两个bidiMap的抽象类
                因ؓbidiMap可以做双向查?br />                l承AbstractDualBidiMap后,内部的两个map一个针对key排序Q一个针对value排序
                可以加快讉K速度
        EnumerationUtils
                包含了toList()ҎQ可以简化代?br />        ExtendedProperties 比较好玩
                提供了增强的properties处理
                处理多行
                处理多个相同的声?br />        Fast***
                提供了在多线E中针对集合的快速访?br />                当进行只L作时Q不q行同步处理
                当进行写操作?br />                        克隆整个集合
                        针对克隆执行修改
                        使用克隆替换现有对象
        MultiHashMap
                实现了多key的map
                当get时返回list对象
        StaticBucketMap ***********Q高效)
                是一个非帔R效的MapQ?get, put, remove ?containsKey  操作都被q行了优?br />                q个Map里面有多个BuckQ桶Q用于存储数?br />                q样在多U程中取数据的用,是从不同的桶中取Q真正实C同步机制
                当然Q在q行扚w操作时无法保证原子性,要注意这一?/p>

chenhui 2006-05-04 12:15 发表评论
]]>
Java利器Jakarta Commons(一) http://m.tkk7.com/seaairland/archive/2006/05/02/44375.htmlchenhuichenhuiTue, 02 May 2006 07:36:00 GMThttp://m.tkk7.com/seaairland/archive/2006/05/02/44375.htmlhttp://m.tkk7.com/seaairland/comments/44375.htmlhttp://m.tkk7.com/seaairland/archive/2006/05/02/44375.html#Feedback0http://m.tkk7.com/seaairland/comments/commentRss/44375.htmlhttp://m.tkk7.com/seaairland/services/trackbacks/44375.html
Commons目分ؓ两部分:Sandbox和Commons库。Sandbox用于试。本文关注库lgQ包括它们什么时候用,在那里,以及用例子说明如何用?br />
要介l?br />
Jakarta Commons目源于重用Q其中的E序包必ȝ保能够重用。有一些包来自于其他项目,例如通用日志包是Jakarta Struts的一部分。当开发者发现某个包对于其他目很有用,可以~短开发周期,他们军_这些包做成通用lg。这是Jakarta Commons目?br />
要真正做到可重用Q每个程序包必须独立于其他较大的框架和项目。因此,Commons目中的每个包在很大E度上是独立的,不仅相对于其他项目,甚至对于其他包也是如此。违反这一原则的情冉|存在的,但决大多数情冉|使用成熟的APIs。例如,Betwixt包徏立在XML APIs基础之上。尽这个项目的本意是徏立不依赖其他lg的程序包?br />
大多数程序包十分z,以至于缺必要的文档、维护和帮助。有些包甚至只有错误的连接和极少的文档。大多数情况下,你只能自己摸索如何用它们,Z么用它们。希望这文章对你有帮助?br />
注意QJakarta Commons与Apache Commons是不同的。后者是Apache Software FoundationQASFQ的目。而前者是ASF的另一个顶U项目Jakarta的子目Q是本文介绍的对象。而且QJakarta Commons只用Java。在本文中Commons指的是Jakarta Commons?br />

lg

Zl织方便Q我?8个(包括ELQLatka和JexlQCommonslg分ؓ五类。如下表Q?br />
lgcd
lg

Web相关
FileUploadQHTTPClient和Net

XML相关
BetwixtQDigesterQJelly和JXPath

工具
BeanUtilsQLoggingQDBCPQPool?Validator

打包
Codec ?Modeler

程?br />CLIQDiscoveryQLang?Collections


要注意的是这个分cd是对本文而言Q在Commons目中是不存在的。在某种E度上分cL重叠的。本文将介绍Web相关和小E序c,下篇文章包括XML相关和打包类Q工L在最后一文章中?br />
程序类
CLIQDiscoveryQLang?Collections归入程序类是因为它们都是ؓ了一个小而实用的目的~写的?br />
1.CLI

概要QCLIQCommand Line InterfaceQؓ你的JavaE序提供d和解析命令行参数的通用接口?br />在那得到Q主,E序Q源代码?br />何时使用Q需要统一操作命o行参数时?br />例子E序QCLIDemo.javaQ需要将commons-cli-1.0.jarcommons加入CLASSPATH中?br />描述Q通常在完成一个JavaE序时不得不重写应用E序输入参数的处理部分。如果有一个唯一的接口用来定义﹑解析和读取输入参敎ͼ以决定程序的q行方式不是很好吗?CLI是{案?br />对于CLIQ命令行中每个要处理的参数都是一个Option。创Z个Options对象Q将Option对象dq去Q然后用CLI提供的函数解析用L输入参数。一个Option也许也需要用戯入一个|例如文g名。这时Option必须在指定处创徏?br />CLI使用步骤如下Q?br />1.创徏OptionsQ?br />Options options = new Options();
Options.addOption(“t?false,”current time?;

2.创徏解析器解析用戯入:
CommandLineParser parser = new BasicParser();
CommandLine cmd;
try{
cmd = parser.parse(options, args);
} catch(ParseException pe) {
usage(options);
return;
}

3.Ҏ用户输入执行相应操作Q?br />
if(cmd.hasOption(“n?) {
System.err.println(“Nice to meet you: ? cmd.getOptionValue(‘n?);
}

以上基本是使用CLI的全q程。当ӞCLI提供其他高选项用于控制各种格式和解析器Q但基本操作是相同的。完整的例子可以看demo?br />
2.Discovery

概要Qdiscovery模式的实玎ͼ提供定位与实例化cL其他资源的通用Ҏ?br />在那得到Q主,E序Q源代码。该包处于pre-release状态?br />何时使用Q需要快速找C的代码中Java接口的实现时?br />例子E序QDiscoveryDemo.javaQMyInterface.javaQMyImpl1.javaQMyImpl2.javaQ?MyInterface。需要将commons-discovery.jar和commons-logging.jardCLASSPATH中?br />
描述QDiscovery的目的是使用最好的法得到接口的所有实现。当用户x到所有的提供某一服务的提供商Ӟq将特别有用?br />
假设你写了一个针Ҏ一N的接口。这个接口的所有实现将以唯一的编码方式解册一N。真正的用户在实际解册一N时将会有多种选择。他怎么才能知道接口的那U实现在他的pȝ中是可行的?

q就是Service与Service Providerl构。Service是你定义的接口。Service Providers提供Service的实现。用户需要选择Service Providers。Discoverylg用多U方法提供帮助。注意Discovery不仅用于发现实现c,而且可以L资源Q例如图像或其他文g。它늅Sun的Service Provider Architecture规范?br />
同样QDiscovery的用也很简单。例子程序中QMyImpl1和MyImpl2是MyInterface接口的实现。MyInterface文g必须在META-INF/services目录下。注意这个文件必d应接口的全\径。如果接口在包内Q那么文件名也要相应改动?br />
1Q取得ClassLoaderQ?br />
ClassLoaders loaders =

ClassLoaders.getAppLoaders(MyInterface.class, getClass(), false);

2Q创建DiscoverClass用于查找实现c:

DiscoverClass discover = new DiscoverClass(loaders);

3Q查扑֮现类Q?br />
Class implClass = discover.find(MyInterface.class);

System.err.println("Implementing Provider: " + implClass.getName());

q行以上代码QDiscoveryDemo.javaQ将得到MyInterface文g中注册的c,如下所C。再ơ提醒,如果实现包含在一个包l构内,文g名必d相应的修攏V如果这个文件不在规定目录下Q或实现cM能实例化或定位,抛出DiscoveryException异常Q表明找不到MyInterface的实现?br />
MyImpl2 # Implementation 2

当然Q这不是注册实现的唯一ҎQ否则Discoveryq有什么用Q事实上Q这是Discovery发现cȝ内部机制的最后一步。其他方法包括在pȝ属性或用户属性中定义实现cȝ名字。例如,删除META-INF/services目录下的文gQ按以下输入q行demoQ结果相同。这里系l属性是接口名,而值是接口实现提供者?br />
java -DMyInterface=MyImpl1 DiscoveryDemo

Discovery也可用于创徏Q单例)服务提供者的实例q调用它们的函数。如下:

((MyInterface)discover.newInstance(MyInterface.class)).myMethod();

注意此时我们q不知道那个服务提供者实现myMethod函数Q我们也不关心。这个函数的实现取决于以何种方式q行以上代码以及注册的服务提供者?br />
3.Lang

概要Qjava.lang包的扩展Q增加许多对String的操作。提供类C语言的枚举?br />
在那得到Q主,E序Q源代码。这里介l的是Lang1.0Q翻译本文时Lang2.0已经发布?br />
何时使用Q当对java.lang提供的默认实现感到厌烦,x好的控制String的操作,数值函C及系l属性时Q还有,想用C语言风格的枚举时?br />
例子E序QLangDemo.java, Mortgage.java, OnTV.java。需要将commons-lang.jar加入CLASSPATH中?br />
描述Q这个包中提供的很多工具函数可以化JavaE序员的工作。这些函数可以减实现日常功能的~程量。特别是StringUtilsc,它提供比标准的java.lang.String包更强的操作字符串的功能。它们的使用十分单,只要用正的参数调用一个静态函数。例如,要将一句话变ؓ以大写开头只要:

StringUtils.capitalise("name");

q个函数的输出就象我们需要的“Name”。浏览StringUtils API的其他静态函敎ͼ你可能会发现对你有用的。例子程序中使用了一些?br />
另一个有的cLRandomStringUtils。这个类中的函数产生随机字符Ԍq在生成随机密码时很有用?br />
cNumberUtils提供数据操作的函敎ͼ包括最大最值函敎ͼ以及字W串转换为数字的函数。NumberRange和CharRange分别处理数字与字W的范围?br />
Builder包中的类提供为类dtoStringQhashCodeQcompareTo和equals函数的功能。也是_自己不需~码可以在cMd高质量的toStringQhashCodeQcompareTo和equals函数Q只要用Builder包中的函数就可以了。例如,用ToStringBuilder函数l类dtoStringҎQ?br />
public class Mortgage {
private float rate;
private int years;
....
public String toString() {
return new ToStringBuilder(this).append("rate", this.rate)
.append("years", this.years). toString();
}
}
Z么用这个函数那Q因为它使用通用的方法处理所有的数据cdQ恰当的q回nullQ同时可以控制对象和聚集的细节层ơ。这对于所有builder中的函数有效Q而且语法同上所C相q?br />
作ؓ一个JavaE序员,如果你怀念C语言风格的枚举,那么q个包中的类型安全的Enum数据cd填补这一I白。EnumcL抽象c,所以要创徏自己的枚举,必须扩展q个cR如下例所C:

1Q定义ƈ扩展枚Dc:

import org.apache.commons.lang.enum.Enum;

import java.util.Map;

import java.util.List;

import java.util.Iterator;



public final class OnTV extends Enum {



public static final OnTV IDOL = new OnTV("Idol");

public static final OnTV SURVIVOR = new OnTV("Survivor");

public static final OnTV SEINFELD = new OnTV("Seinfeld");



private OnTV(String show) {

super(show);

}



public static OnTV getEnum(String show){

return (OnTV) getEnum(OnTV.class, show);

}



public static Map getEnumMap() {

return getEnumMap(OnTV.class);

}



public static List getEnumList() {

return getEnumList(OnTV.class);

}



public static Iterator iterator() {

return iterator(OnTV.class);

}

}

2Q现在就可以在你的方法中使用枚D了:

OnTV.getEnum("Idol");

该行代码从我们创建的枚D数据cd中返回IdolVEnumc还有其他有用的函数?br />
4.Collections

概要Q对Java Collection框架的扩展,加入了新的数据结构,iterators和比较器?br />
在那得到Q主,E序Q源代码?br />
何时使用Q强烈徏议在需要处理数据结构的Java目可能用Collections APIQ从中你会获得比Java默认实现大的多的好处?br />
例子E序QCollectionsDemo.java。需要将commons-collections.jar加入CLASSPATH中?br />
描述QCollections API中有很多c,很难在一节中全介l出来。所以这里我着重介l最重要的类Q希望你能感兴趣Ml研I其他类。API附带的文档对每个c都有详l的描述?br />
Bag接口扩展了Java CollectionsQ加入了Ҏ有成员的计数Q它在要l计q入q出元素数时很有用。因为Bag是一个接口,所以实际用的是它的实现类Q如HashBag或TreeBag。顾名思义QHashBag是基于HashMap的Bag的实玎ͼ而Treebag是基于TreeMap的。Bag接口中的两个重要Ҏ是getCountQObject oQ和uniqueSet()。前者返回Bag中某Ҏ元素的个敎ͼ后者返回Bag中的唯一元素Q译者理解ؓQ元素类型,原文Qthe unique elementsQ的集合?br />
Buffer接口允许按照预定序从聚集中删除对象Q可以是后进先出Q先q先出,或自定义的顺序。下面的例子演示了如何以自然排序的顺序删除元素的Q?br />
1QBinaryHeapcd现Buffer接口Qƈ按自然排序删除元素。若想以反自然排序删除,以false为参数即可:

BinaryHeap heap = new BinaryHeap();

2Q添加元素:

heap.add(new Integer(-1));

heap.add(new Integer(-10));

heap.add(new Integer(0));

heap.add(new Integer(-3));

heap.add(new Integer(5));

3Q调用removeҎ。按自然排序Q-10被删除Q反?被删除:

heap.remove();

FastArrayListHFastHashMap和FastTreeMapcM用两U模式操作相应的CollectioncR第一Uؓ慢模式,是这些类初始化后的默认模式。在慢模式下Q这些类的结构变化是同步的。在快模式下Q对q些cȝ讉K被认为是只读的,因此更快一些,而且不发生同步。在快模式下要改变类的结构,要先克隆该类Q在克隆cM修改Q然后覆盖该cR这些类在多数访问ؓ只读的多U程环境中十分有用?br />
Iterator包提供了许多常规Java Collections包中没有的聚集和对象的iterator。例子程序中演示了iterator数组的ArrayIterator。这些iterator同普通Java iterators的用法相同?br />
最后,comparator包中提供了一些有用的比较器,它们用来定义比较和决定同一cȝ两个对象的顺序。例如,在我们前面提到的Buffer中,可以定义自己比较器,用它替代自然排序军_序。如下:

1Q这ơ用NullComparator创徏BinaryHeap。NullComparatorҎ标志nullAreHigh的值决定null与其他对象的大小。如果取gؓfalseQ表Cnull比其他对象小Q?br />
BinaryHeap heap2 = new BinaryHeap(new NullComparator(false));

2Q添加对象,包括一些null

heap2.add(null);

heap2.add(new Integer("6"));

heap2.add(new Integer("-6"));

heap2.add(null);

3Q最后,执行删除操作。因为null于其他对象QBag最后剩下的是null

heap2.remove();

到这里,程序类׃l完了。更多的l节LAPI文档Q或者这些包的源代码?br />


Web相关c?br />
Web相关cMlg帮助JavaE序员完成Web相关的Q务?br />
1.FileUpload

概要Q现成的文g上传lg?br />
在那得到Q主c?br />
何时使用Q当Java服务器环境中需要简单易用ƈ且高效的文档上传lg时?br />
例子E序Qfileuploaddemo.jspQfileuploaddemo.htmQmsg.jsp。需要将commons-fileupload-1.0-dev.jard到程序的WEB-INF/lib目录下?br />
描述QFileUpload解决了文件上传时服务端的常见问题Q提供了一个控制文件上传的易用的接口,可用在JSP和servlet中。它W合RFC1867协议标准Q解析输入请求,q将上传到服务器的一pd文g的分块交l应用程序。上传的文g保存在内存中或时目录中Q这׃个表C文件大的参数军_Q如果上传的文g大小过该参数|文g被写入临时目录Q。你也可以设|其他参敎ͼ例如可接收的文g的最大尺总及时文件目录?br />
FileUpload的用分为几步,我将用一个在一个页中同时上传两个不同文件的例子说明?br />
1Q创建HTMLc注意ؓ了确保上传文件的cd是被允许的,enctype参数必须为multipart/form-dataQ请求参数method必须为POST。还有一点要注意的是该页面不但有两个文g控gq有一个普通文本控件?br />
<form name="myform" action="fileuploaddemo.jsp"

method="post" enctype="multipart/form-data">

Specify your name:<br />

<input type="text" name="name" size="15"/><br />

Specify your Image:<br />

<input type="file" name="myimage"><br/>

Specify your File:<br />

<input type="file" name="myfile"><br /><br />

<input type="submit" name="Submit" value="Submit your files"/>

</form>

2Q创建JSPc?br />
aQ检查输入请求是不是多段数据?br />
boolean isMultipart = FileUpload.isMultipartContent(request);

bQ创求处理器Q解析请求,l果存于一个list中?br />
DiskFileUpload upload = new DiskFileUpload();

List items = upload.parseRequest(request);

cQ遍历这个list讉K每个单独的文仉。用isFormField()函数区分上传文g和常规类型域。根据需要,可以逐字节的d上传的文Ӟ或者用输入流?br />
Iterator itr = items.iterator();



while(itr.hasNext()) {

FileItem item = (FileItem) itr.next();



// check if the current item is a form field or an uploaded file

if(item.isFormField()) {



// get the name of the field

String fieldName = item.getFieldName();



// if it is name, we can set it in request to thank the user

if(fieldName.equals("name"))

request.setAttribute("msg", "Thank You: " + item.getString());



} else {



// the item must be an uploaded file save it to disk. Note that there

// seems to be a bug in item.getName() as it returns the full path on

// the client's machine for the uploaded file name, instead of the file

// name only. To overcome that, I have used a workaround using

// fullFile.getName().

File fullFile = new File(item.getName());

File savedFile = new File(getServletContext().getRealPath("/"),

fullFile.getName());

item.write(savedFile);

}

}

可以在上传处理器中用upload.setSizeMax限制上传文g的最大尺寸,当上传文件大超q该寸会抛出异常。上例中Q若该寸设ؓQ?Q就可以上传M大小的文件?br />
q个例子q可以有一个小变化。想上面提到的,可以使用输入上传文件。过E是上传的内容ȝ在内存中直到某一阈|取得内容的类型,把它们存为字W串或字节数l,最后从内存中删除。FileItem中函数完成了该过E(DefaultFileItem是它的实玎ͼ?br />
2.HttpClient

概要Q扩展java.net包,提供cM览器的功能?br />
在那得到Q主,E序Q源代码。源代码和程序ؓbeta1版?br />
何时使用Q当要实现Web览器时Q或你的E序需要有效的控制HTTP/HTTPSq接时?br />
例子E序QHttpClientDemo.java。需要将commons-httpclient.jar和common-logging.jar加入CLASSPATH中,JDK?.4或更高版本?br />
描述QHttpClient是java.net的扩展程序包Q它提供许多函数帮助你创建基于HTTP协议的各U分布式应用或者嵌入应用程序处理HTTP操作。这个库提供比Commons的其他包更详l的文档Qƈ附带很多例子。这里将讲解怎样开发一个提取Web|页的程序。HttpClient附带的文档中有一个类似的例子Q我扩展它使它支持SSL。注意这个例子必运行于JDK 1.4或更高版本上Q因为它需要JDK1.4中的Java Secure Socket Connection库?br />
1Q找一个可以通过HTTPS下蝲的网,例如https://www.paypal.com/。确保文?JAVA_HOME%/jre/lib/security/java.security有类似如下的一行:

security.provider.2=com.sun.net.ssl.internal.ssl.Provider

q样Q至在你的E序中处理HTTPSq接的方式是没有区别的。如果远端的站点需要验证,那么你必d相应的配|?br />
2Q创建HttpClientcȝ一个实例,所有的函数都将用到它。这个类包含一个连接管理器操作实际的连接。HttpConnectionManager接口允许你创q理器,否则可以使用内徏的SimpleHttpConnectionManager或MultiThreadedHttpConnectionManager。如果无参数创徏HttpClientQ那么默认连接管理器为SimpleHttpConnectionManager?br />
HttpClient client = new HttpClient();

3Q创Z个method实例Q用来定义用那UHTTPҎ与远端站点传递信息,可以选择的方法有GET, POST, PUT, DELETE, HEAD, OPTIONS和TRACE。这些methodcLHttpMethod接口的不同实现。在q个例子中用GetMethodQ创建时要GET的URL作ؓ参数?br />
HttpMethod method = new GetMethod(url);

4Q连接这个URLQ也是用刚才定义的Ҏq接URL。这个方法将q回serverq回的状态码。注意executeMethod是client的函数而不是method的?br />
statusCode = client.executeMethod(method);

5Q读取服务器的返回。如果连接失败,抛出HttpException或IOException异常。IOException异常说明是网l出了问题,重试也不会成功。返回值可以字节数l﹑输入或字符串的格式d。这P可以随意处理输入了?br />
byte[] responseBody = method.getResponseBody();

6Q最后,释放q接Q之在需要时可重用?br />
method.releaseConnection();

q时一个关于HttpClient库的很粗略的介绍Q它q有很多功能Q十分健壮?br />
3.Net

概要Q基本Internet协议的底层API?br />
在那得到Q主,E序Q源代码?br />
何时使用Q当在Java应用E序中需要Internet协议的底层互q时?br />
例子E序QNetDemo.java。需要将commons-net-1.0.0.jar加入CLASSPATH中?br />
描述QNet包是很多健壮的和专业的类的集合。这些类来自于一个叫做NetComponents的商业品的一部分?br />
Net包中的类既提供对协议的底层访问也有高层的抽象。在大多数情况下Q抽象是_的,它可以你不必编写解析各U协议的底层套接字的代码。用抽象不会损׃Q何功能?br />
SocketClient是所有协议的基类Q它是一个抽象类包含所有协议的共同功能。各U协议的使用Ҏ是很相近的:首先使用connectҎ建立与远端服务器的连接,执行服务Q最后断开q接。让我们通过例子来看Q?br />
1Q创Z个client。我们将使用一个NNTPClient从新L务器上下载新ȝ列表?br />
client = new NNTPClient();

2Q连接服务器Q我用的是新ȝ列表较短的服务器?br />
client.connect("aurelia.deine.net");

3Q提取新ȝ列表。如下的命oq回NewsGroupInfo数组。如果服务器上没有新ȝ则数lؓI,出错则返回null。注意当新闻l列表很大时Q这个命令会花很长时间。每个NewsGroupInfo对象包含关于新闻l的详细信息Q有公用函数可以解析它们Q如文章敎ͼ最后发表的文章Q发表权限等Q?br />
list = client.listNewsgroups();

4Q最后,断开与服务器的连接?br />
if (client.isConnected())

client.disconnect();

其余的client如FingerClient, POP3Client, TelnetClient{用法相伹{?br />
l束?br />
q篇文章介绍了Web相关和小E序c,下篇文章包括XML相关和打包类Q工L在最后一文章中?br />
希望你能从这文章的例子得到收获。最后,我希望这文章能够激起你对Commons子项目的兴趣?img src ="http://m.tkk7.com/seaairland/aggbug/44375.html" width = "1" height = "1" />

chenhui 2006-05-02 15:36 发表评论
]]>
վ֩ģ壺 һػɫëƬѿ| AVպAVþ| ͵ԾƷʮ| ˸Ƶ| ޹˾þ99Ʒ| Ƶ| 99þùۺϾƷ| ձ19žžڵѶͼ| ͵ͼƬ| ߹ѹۿ| ˸һþ| ٸ| ɫˬƵ| ɫ߸߳ӰԺ| һƵվ| ŷۺϾƷ˵| av2018| ߹ۿƵ| ۺС˵þ| պƵһ | Ʒ鶹վ | þwww˳ɿƬ| þþƷavĻ| Ļ2019| ޾ƷaĻ| jjzz߲Ź| ƷƵ| ߹ۿ| ޹߹ۿ| 2022þùƷ鶹| ޾Ʒͷ| ѹۿƵ| 24Сʱֱ߹ۿ| VAѾƷ| ͼƬУ԰ɫ| һƬѿ| һƵվ| ĻѹۿƵ| 77777ҹ| ޾Ʒ | Ļ޼|