`
wanjianfei
  • 浏览: 308132 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
阅读更多

ApacheCommons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动。我选了一些比较常用的项目做简单介绍。文中用了很多网上现成的东西,我只是做了一个汇总整理。

CommonsBeanUtils
http://jakarta.apache.org/commons/beanutils/index.html
说明:针对Bean的一个工具集。由于Bean往往是有一堆get和set组成,所以BeanUtils也是在此基础上进行一些包装。
使用示例:功能有很多,网站上有详细介绍。一个比较常用的功能是BeanCopy,也就是copybean的属性。如果做分层架构开发的话就会用到,比如从PO(PersistentObject)拷贝数据到VO(ValueObject)。
传统方法如下:
//得到TeacherForm
TeacherFormteacherForm=(TeacherForm)form;
//构造Teacher对象
Teacherteacher=newTeacher();
//赋值
teacher.setName(teacherForm.getName());
teacher.setAge(teacherForm.getAge());
teacher.setGender(teacherForm.getGender());
teacher.setMajor(teacherForm.getMajor());
teacher.setDepartment(teacherForm.getDepartment());

//持久化Teacher对象到数据库
HibernateDAO=;
HibernateDAO.save(teacher);

使用BeanUtils后,代码就大大改观了,如下所示:
//得到TeacherForm
TeacherFormteacherForm=(TeacherForm)form;
//构造Teacher对象
Teacherteacher=newTeacher();
//赋值
BeanUtils.copyProperties(teacher,teacherForm);
//持久化Teacher对象到数据库
HibernateDAO=;
HibernateDAO.save(teacher);

CommonsCLI
http://jakarta.apache.org/commons/cli/index.html
说明:这是一个处理命令的工具。比如main方法输入的string[]需要解析。你可以预先定义好参数的规则,然后就可以调用CLI来解析。
使用示例:
//createOptionsobject
Optionsoptions=newOptions();
//addtoption,optionisthecommandparameter,falseindicatesthat
//thisparameterisnotrequired.
options.addOption(“t”,false,“displaycurrenttime”);
options.addOption("c",true,"countrycode");
CommandLineParserparser=newPosixParser();
CommandLinecmd=parser.parse(options,args);
if(cmd.hasOption("t")){
//printthedateandtime
}
else{
//printthedate
}
//getcoptionvalue
StringcountryCode=cmd.getOptionValue("c");

if(countryCode==null){
//printdefaultdate
}
else{
//printdateforcountryspecifiedbycountryCode
}

CommonsCodec
http://jakarta.apache.org/commons/codec/index.html
说明:这个工具是用来编码和解码的,包括Base64,URL,Soundx等等。用这个工具的人应该很清楚这些,我就不多介绍了。

CommonsCollections
http://jakarta.apache.org/commons/collections/
说明:你可以把这个工具看成是java.util的扩展。
使用示例:举一个简单的例子
OrderedMapmap=newLinkedMap();
map.put("FIVE","5");
map.put("SIX","6");
map.put("SEVEN","7");
map.firstKey();//returns"FIVE"
map.nextKey("FIVE");//returns"SIX"
map.nextKey("SIX");//returns"SEVEN"

CommonsConfiguration
http://jakarta.apache.org/commons/configuration/
说明:这个工具是用来帮助处理配置文件的,支持很多种存储方式
1.Propertiesfiles
2.XMLdocuments
3.Propertylistfiles(.plist)
4.JNDI
5.JDBCDatasource
6.Systemproperties
7.Appletparameters
8.Servletparameters
使用示例:举一个Properties的简单例子
#usergui.properties,defininingtheGUI,
colors.background=#FFFFFF
colors.foreground=#000080

window.width=500
window.height=300

PropertiesConfigurationconfig=newPropertiesConfiguration("usergui.properties");
config.setProperty("colors.background","#000000);
config.save();
config.save("usergui.backup.properties);//saveacopy
Integerinteger=config.getInteger("window.width");

CommonsDBCP
http://jakarta.apache.org/commons/dbcp/
说明:DatabaseConnectionpool,Tomcat就是用的这个,不用我多说了吧,要用的自己去网站上看说明。

CommonsDbUtils
http://jakarta.apache.org/commons/dbutils/
说明:我以前在写数据库程序的时候,往往把数据库操作单独做一个包。DbUtils就是这样一个工具,以后开发不用再重复这样的工作了。值得一体的是,这个工具并不是现在流行的OR-Mapping工具(比如Hibernate),只是简化数据库操作,比如
QueryRunnerrun=newQueryRunner(dataSource);
//Executethequeryandgettheresultsbackfromthehandler
Object[]result=(Object[])run.query(
"SELECT*FROMPersonWHEREname=?","JohnDoe");

CommonsFileUpload
http://jakarta.apache.org/commons/fileupload/
说明:jsp的上传文件功能怎么做呢?
使用示例:
//Createafactoryfordisk-basedfileitems
FileItemFactoryfactory=newDiskFileItemFactory();

//Createanewfileuploadhandler
ServletFileUploadupload=newServletFileUpload(factory);

//Parsetherequest
List/*FileItem*/items=upload.parseRequest(request);
//Processtheuploadeditems
Iteratoriter=items.iterator();
while(iter.hasNext()){
FileItemitem=(FileItem)iter.next();

if(item.isFormField()){
processFormField(item);
}else{
processUploadedFile(item);
}
}

CommonsHttpClient
http://jakarta.apache.org/commons/httpclient/
说明:这个工具可以方便通过编程的方式去访问网站。
使用示例:最简单的Get操作
GetMethodget=newGetMethod("http://jakarta.apache.org");
//executemethodandhandleanyerrorresponses.
...
InputStreamin=get.getResponseBodyAsStream();
//Processthedatafromtheinputstream.
get.releaseConnection();

CommonsIO
http://jakarta.apache.org/commons/io/
说明:可以看成是java.io的扩展,我觉得用起来非常方便。
使用示例:
1.读取Stream
标准代码:
InputStreamin=newURL("http://jakarta.apache.org").openStream();
try{
InputStreamReaderinR=newInputStreamReader(in);
BufferedReaderbuf=newBufferedReader(inR);
Stringline;
while((line=buf.readLine())!=null){
System.out.println(line);
}
}finally{
in.close();
}
使用IOUtils
InputStreamin=newURL("http://jakarta.apache.org").openStream();
try{
System.out.println(IOUtils.toString(in));
}finally{
IOUtils.closeQuietly(in);
}

2.读取文件
Filefile=newFile("/commons/io/project.properties");
Listlines=FileUtils.readLines(file,"UTF-8");

3.察看剩余空间
longfreeSpace=FileSystemUtils.freeSpace("C:/");


CommonsJXPath
http://jakarta.apache.org/commons/jxpath/
说明:Xpath你知道吧,那么JXpath就是基于Java对象的Xpath,也就是用Xpath对Java对象进行查询。这个东西还是很有想像力的。
使用示例:
Addressaddress=(Address)JXPathContext.newContext(vendor).
getValue("locations[address/zipCode='90210']/address");
上述代码等同于
Addressaddress=null;
Collectionlocations=vendor.getLocations();
Iteratorit=locations.iterator();
while(it.hasNext()){
Locationlocation=(Location)it.next();
StringzipCode=location.getAddress().getZipCode();
if(zipCode.equals("90210")){
address=location.getAddress();
break;
}
}


CommonsLang
http://jakarta.apache.org/commons/lang/
说明:这个工具包可以看成是对java.lang的扩展。提供了诸如StringUtils,StringEscapeUtils,RandomStringUtils,Tokenizer,WordUtils等工具类。

CommonsLogging
http://jakarta.apache.org/commons/logging/
说明:你知道Log4j吗?

CommonsMath
http://jakarta.apache.org/commons/math/
说明:看名字你就应该知道这个包是用来干嘛的了吧。这个包提供的功能有些和CommonsLang重复了,但是这个包更专注于做数学工具,功能更强大。

CommonsNet
http://jakarta.apache.org/commons/net/
说明:这个包还是很实用的,封装了很多网络协议。
1.FTP
2.NNTP
3.SMTP
4.POP3
5.Telnet
6.TFTP
7.Finger
8.Whois
9.rexec/rcmd/rlogin
10.Time(rdate)andDaytime
11.Echo
12.Discard
13.NTP/SNTP
使用示例:
TelnetClienttelnet=newTelnetClient();
telnet.connect("192.168.1.99",23);
InputStreamin=telnet.getInputStream();
PrintStreamout=newPrintStream(telnet.getOutputStream());
...
telnet.close();

CommonsValidator
http://jakarta.apache.org/commons/validator/
说明:用来帮助进行验证的工具。比如验证Email字符串,日期字符串等是否合法。
使用示例:
//GettheDatevalidator
DateValidatorvalidator=DateValidator.getInstance();
//Validate/Convertthedate
DatefooDate=validator.validate(fooString,"dd/MM/yyyy");
if(fooDate==null){
//error...notavaliddate
return;
}

CommonsVirtualFileSystem
http://jakarta.apache.org/commons/vfs/
说明:提供对各种资源的访问接口。支持的资源类型包括
1.CIFS
2.FTP
3.LocalFiles
4.HTTPandHTTPS
5.SFTP
6.TemporaryFiles
7.WebDAV
8.Zip,JarandTar(uncompressed,tgzortbz2)
9.gzipandbzip2
10.res
11.ram
这个包的功能很强大,极大的简化了程序对资源的访问。
使用示例:
从jar中读取文件
//LocatetheJarfile
FileSystemManagerfsManager=VFS.getManager();
FileObjectjarFile=fsManager.resolveFile("jar:lib/aJarFile.jar");

//ListthechildrenoftheJarfile
FileObject[]children=jarFile.getChildren();
System.out.println("Childrenof"+jarFile.getName().getURI());
for(inti=0;i<children.length;i++)
{
System.out.println(children[i].getName().getBaseName());
}
从smb读取文件
StaticUserAuthenticatorauth=newStaticUserAuthenticator("username","password",null);
FileSystemOptionsopts=newFileSystemOptions();
DefaultFileSystemConfigBuilder.getInstance().setUserAuthenticator(opts,auth);
FileObjectfo=VFS.getManager().resolveFile("smb://host/anyshare/dir",opts);


有人说Apache就像是丐帮,里面的项目多而杂。的确如此,Apache的项目水平参差不齐,而且不同的项目之间也常常会有功能重叠,甚至有撞车,比如Ant和Maven。不过Apache的优秀项目还是有很多的,比如ApacheHttpServer,Tomcat,Ant,Geronimo等等。ApacheCommons是工具包,为其他项目提供支持,很多Commons中的项目就是从其他项目中抽取出来的。希望我的介绍能对你有所帮助,有些我提到的Commons中的项目我也没有用过,只是现学现卖,难免错误和疏漏,希望谅解。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics