一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Apache Jakarta Commons 工具集簡介

 旭龍 2013-12-25
Apache Jakarta Commons 工具集簡介[轉(zhuǎn)]

Apache Commons包含了很多開源的工具,用于解決平時(shí)編程經(jīng)常會(huì)遇到的問題,減少重復(fù)勞動(dòng)。我選了一些比較常用的項(xiàng)目做簡單介紹。文中用了很多網(wǎng)上現(xiàn)成的東西,我只是做了一個(gè)匯總整理。

一、Commons BeanUtils

http://jakarta.apache.org/commons/beanutils/index.html

說明:針對(duì)Bean的一個(gè)工具集。由于Bean往往是有一堆get和set組成,所以BeanUtils也是在此基礎(chǔ)上進(jìn)行一些包裝。

使用示例:功能有很多,網(wǎng)站上有詳細(xì)介紹。一個(gè)比較常用的功能是Bean Copy,也就是copy bean的屬性。如果做分層架構(gòu)開發(fā)的話就會(huì)用到,比如從PO(Persistent Object)拷貝數(shù)據(jù)到VO(Value Object)。

傳統(tǒng)方法如下:

//得到TeacherForm

TeacherForm teacherForm=(TeacherForm)form;

//構(gòu)造Teacher對(duì)象

Teacher teacher=new Teacher();

//賦值
teacher.setName(teacherForm.getName());
teacher.setAge(teacherForm.getAge());
teacher.setGender(teacherForm.getGender());
teacher.setMajor(teacherForm.getMajor());
teacher.setDepartment(teacherForm.getDepartment());

//持久化Teacher對(duì)象到數(shù)據(jù)庫
HibernateDAO= ;
HibernateDAO.save(teacher);

使用BeanUtils后,代碼就大大改觀了,如下所示:

//得到TeacherForm
TeacherForm teacherForm=(TeacherForm)form;
//構(gòu)造Teacher對(duì)象
Teacher teacher=new Teacher();

//賦值
BeanUtils.copyProperties(teacher,teacherForm);

//持久化Teacher對(duì)象到數(shù)據(jù)庫
HibernateDAO= ;
HibernateDAO.save(teacher);

二、Commons CLI

http://jakarta.apache.org/commons/cli/index.html

說明:這是一個(gè)處理命令的工具。比如main方法輸入的string[]需要解析。你可以預(yù)先定義好參數(shù)的規(guī)則,然后就可以調(diào)用CLI來解析。

使用示例:

// create Options object
Options options = new Options();
// add t option, option is the command parameter, false indicates that
// this parameter is not required.

options.addOption(“t”, false, “display current time”);
options.addOption("c", true, "country code");

CommandLineParser parser = new PosixParser();
CommandLine cmd = parser.parse( options, args);

if(cmd.hasOption("t")) {
// print the date and time
}else {
// print the date
}

// get c option value
String countryCode = cmd.getOptionValue("c");

if(countryCode == null) {
// print default date
}else {
// print date for country specified by countryCode
}

三、Commons Codec

http://jakarta.apache.org/commons/codec/index.html

說明:這個(gè)工具是用來編碼和解碼的,包括Base64,URL,Soundx等等。用這個(gè)工具的人應(yīng)該很清楚這些,我就不多介紹了。

四、Commons Collections

http://jakarta.apache.org/commons/collections/

說明:你可以把這個(gè)工具看成是java.util的擴(kuò)展。

使用示例:舉一個(gè)簡單的例子

OrderedMap map = new LinkedMap();
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"

五、Commons Configuration

http://jakarta.apache.org/commons/configuration/

說明:這個(gè)工具是用來幫助處理配置文件的,支持很多種存儲(chǔ)方式

1. Properties files
2. XML documents
3. Property list files (.plist)
4. JNDI
5. JDBC Datasource
6. System properties
7. Applet parameters
8. Servlet parameters

使用示例:舉一個(gè)Properties的簡單例子

# usergui.properties, definining the GUI,
colors.background = #FFFFFF
colors.foreground = #000080
window.width = 500
window.height = 300

PropertiesConfiguration config = new PropertiesConfiguration("usergui.properties");
config.setProperty("colors.background", "#000000);
config.save();

config.save("usergui.backup.properties);//save a copy
Integer integer = config.getInteger("window.width");

六、Commons DBCP

http://jakarta.apache.org/commons/dbcp/

例子:

import java.sql.*;

import com.gwnet.games.antiLord.util.*;

import org.apache.commons.dbcp.ConnectionFactory;

import org.apache.commons.dbcp.BasicDataSource;

import org.apache.commons.dbcp.DataSourceConnectionFactory;



private static BasicDataSource bds=new BasicDataSource();

private static ConnectionFactory fac=null;



//初始化連接池

bds.setDriverClassName(“org.postgresql.Driver”); //數(shù)據(jù)庫驅(qū)動(dòng)程序

bds.setUrl(“jdbc:postgresql://localhost:5432/myDB”); //數(shù)據(jù)庫url

bds.setUsername(“postgres”); //dba賬號(hào)

bds.setPassword(“XXXXXXXX”); //密碼

bds.setInitialSize(100); //初始化連接數(shù)量

bds.setMaxIdle(10); //最大idle數(shù)

bds.setMaxWait(1000*60); //超時(shí)回收時(shí)間

fac=new DataSourceConnectionFactory(bds); //得到連接工廠

Connection conn=fac.createConnection(); //從池中獲得連接

conn.close(); //釋放連接,回到池中



//銷毀連接池

bds.close();
bds=null;
fac=null;

七、Commons DbUtils

http://jakarta.apache.org/commons/dbutils/

說明:我以前在寫數(shù)據(jù)庫程序的時(shí)候,往往把數(shù)據(jù)庫操作單獨(dú)做一個(gè)包。DbUtils就是這樣一個(gè)工具,以后開發(fā)不用再重復(fù)這樣的工作了。值得一體的是,這個(gè)工具并不是現(xiàn)在流行的OR-Mapping工具(比如Hibernate),只是簡化數(shù)據(jù)庫操作,比如

QueryRunner run = new QueryRunner(dataSource);

// Execute the query and get the results back from the handler
Object[] result = (Object[]) run.query("SELECT * FROM Person WHERE name=?", "John Doe");

八、Commons FileUpload

http://jakarta.apache.org/commons/fileupload/

說明:jsp的上傳文件功能怎么做呢?

使用示例:

// Create a factory for disk-based file items
FileItemFactory factory = new DiskFileItemFactory();
// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload(factory);

// Parse the request
List /* FileItem */ items = upload.parseRequest(request);
// Process the uploaded items
Iterator iter = items.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
if (item.isFormField()) {
processFormField(item);
} else {
processUploadedFile(item);
}
}

九、Commons HttpClient

http://jakarta.apache.org/commons/httpclient/

說明:這個(gè)工具可以方便通過編程的方式去訪問網(wǎng)站。

使用示例:最簡單的Get操作

GetMethod get = new GetMethod("http://jakarta.apache.org");

// execute method and handle any error responses.

...

InputStream in = get.getResponseBodyAsStream();
// Process the data from the input stream.
get.releaseConnection();

十、Commons IO

http://jakarta.apache.org/commons/io/

說明:可以看成是java.io的擴(kuò)展,我覺得用起來非常方便。

使用示例:

1.讀取Stream

標(biāo)準(zhǔn)代碼:

InputStream in = new URL( "http://jakarta.apache.org" ).openStream();
try {
InputStreamReader inR = new InputStreamReader( in );
BufferedReader buf = new BufferedReader( inR );
String line;
while ( ( line = buf.readLine() ) != null ) {
System.out.println( line );
}
} finally {
in.close();
}

使用IOUtils

InputStream in = new URL( "http://jakarta.apache.org" ).openStream();
try {
System.out.println( IOUtils.toString( in ) );
} finally {
IOUtils.closeQuietly(in);
}

2.讀取文件

File file = new File("/commons/io/project.properties");
List lines = FileUtils.readLines(file, "UTF-8");

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

十一、Commons JXPath

http://jakarta.apache.org/commons/jxpath/

說明:Xpath你知道吧,那么JXpath就是基于Java對(duì)象的Xpath,也就是用Xpath對(duì)Java對(duì)象進(jìn)行查詢。這個(gè)東西還是很有想像力的。

使用示例:
Address address = (Address)JXPathContext.newContext(vendor).
getValue("locations[address/zipCode='90210']/address");

上述代碼等同于
Address address = null;
Collection locations = vendor.getLocations();
Iterator it = locations.iterator();
while (it.hasNext()){
Location location = (Location)it.next();
String zipCode = location.getAddress().getZipCode();
if (zipCode.equals("90210")){
address = location.getAddress();
break;
}
}

十二、Commons Lang

http://jakarta.apache.org/commons/lang/

說明:這個(gè)工具包可以看成是對(duì)java.lang的擴(kuò)展。提供了諸如StringUtils, StringEscapeUtils, RandomStringUtils, Tokenizer, WordUtils等工具類。

十三、Commons Logging

http://jakarta.apache.org/commons/logging/

說明:你知道Log4j嗎?

十四、Commons Math

http://jakarta.apache.org/commons/math/

說明:看名字你就應(yīng)該知道這個(gè)包是用來干嘛的了吧。這個(gè)包提供的功能有些和Commons Lang重復(fù)了,但是這個(gè)包更專注于做數(shù)學(xué)工具,功能更強(qiáng)大。

十五、Commons Net

http://jakarta.apache.org/commons/net/

說明:這個(gè)包還是很實(shí)用的,封裝了很多網(wǎng)絡(luò)協(xié)議。

1. FTP
2. NNTP
3. SMTP
4. POP3
5. Telnet
6. TFTP
7. Finger
8. Whois
9. rexec/rcmd/rlogin
10. Time (rdate) and Daytime
11. Echo
12. Discard
13. NTP/SNTP

使用示例:
TelnetClient telnet = new TelnetClient();
telnet.connect( "192.168.1.99", 23 );
InputStream in = telnet.getInputStream();
PrintStream out = new PrintStream( telnet.getOutputStream() );
...
telnet.close();

十六、Commons Validator

http://jakarta.apache.org/commons/validator/

說明:用來幫助進(jìn)行驗(yàn)證的工具。比如驗(yàn)證Email字符串,日期字符串等是否合法。

使用示例:

// Get the Date validator
DateValidator validator = DateValidator.getInstance();
// Validate/Convert the date
Date fooDate = validator.validate(fooString, "dd/MM/yyyy");
if (fooDate == null) {
// error...not a valid date
return;
}

十七、Commons Virtual File System

http://jakarta.apache.org/commons/vfs/

說明:提供對(duì)各種資源的訪問接口。支持的資源類型包括

1. CIFS
2. FTP
3. Local Files
4. HTTP and HTTPS
5. SFTP
6. Temporary Files
7. WebDAV
8. Zip, Jar and Tar (uncompressed, tgz or tbz2)
9. gzip and bzip2
10. res
11. ram

這個(gè)包的功能很強(qiáng)大,極大的簡化了程序?qū)Y源的訪問。

使用示例:

從jar中讀取文件

// Locate the Jar file
FileSystemManager fsManager = VFS.getManager();
FileObject jarFile = fsManager.resolveFile( "jar:lib/aJarFile.jar" );

// List the children of the Jar file
FileObject[] children = jarFile.getChildren();
System.out.println( "Children of " + jarFile.getName().getURI() );
for ( int i = 0; i < children.length; i++ ){
System.out.println( children[ i ].getName().getBaseName() );
}

從smb讀取文件
StaticUserAuthenticator auth = new StaticUserAuthenticator("username", "password", null);
FileSystemOptions opts = new FileSystemOptions();
DefaultFileSystemConfigBuilder.getInstance().setUserAuthenticator(opts, auth);
FileObject fo = VFS.getManager().resolveFile("smb://host/anyshare/dir", opts);

十八、Commons-Email

commons-email是apache提供的一個(gè)開源的API,是對(duì)javamail的封裝,因此在使用時(shí)要將javamail.jar加到 class path中,主要包括SimpleEmail,MultiPartEmail,HtmlEmail,EmailAttachment四個(gè)類。

SimpleEmail:發(fā)送簡單的email,不能添加附件
MultiPartEmail:文本郵件,可以添加多個(gè)附件
HtmlEmail:HTML格式郵件,同時(shí)具有MultiPartEmail類所有“功能”
EmailAttchment:附件類,可以添加本地資源,也可以指定網(wǎng)絡(luò)上資源,在發(fā)送時(shí)自動(dòng)將網(wǎng)絡(luò)上資源下載發(fā)送。

發(fā)送基本文本格式郵件:
==============
SimpleEmail email = new SimpleEmail();
//smtp host
email.setHostName("mail.test.com");
//登陸郵件服務(wù)器的用戶名和密碼
email.setAuthentication("test","testpassword");
//接收人
email.addTo("jdoe@somewhere.org", "John Doe");
//發(fā)送人
email.setFrom("me@apache.org", "Me");
//標(biāo)題
email.setSubject("Test message");
//郵件內(nèi)容
email.setMsg("This is a simple test of commons-email");
//發(fā)送
email.send();

發(fā)送文本格式,帶附件郵件:
==================
//附件,可以定義多個(gè)附件對(duì)象
EmailAttachment attachment = new EmailAttachment();
attachment.setPath("e:\\1.pdf");
attachment.setDisposition(EmailAttachment.ATTACHMENT);
attachment.setDescription("Picture of John");
//
MultiPartEmail email = new MultiPartEmail();
//smtp host
email.setHostName("mail.test.com");
//登陸郵件服務(wù)器的用戶名和密碼
email.setAuthentication("test","testpassword");
//接收人
email.addTo("jdoe@somewhere.org", "John Doe");
//發(fā)送人
email.setFrom("me@apache.org", "Me");
//標(biāo)題
email.setSubject("Test message");
//郵件內(nèi)容
email.setMsg("This is a simple test of commons-email");
//添加附件
email.attach(attachment);
//發(fā)送
email.send();

發(fā)送HTML格式帶附件郵件:
=================
//附件,可以定義多個(gè)附件對(duì)象
EmailAttachment attachment = new EmailAttachment();
attachment.setPath("e:\\1.pdf");
attachment.setDisposition(EmailAttachment.ATTACHMENT);
attachment.setDescription("Picture of John");
//
HtmlEmail email = new HtmlEmail ();
//smtp host
email.setHostName("mail.test.com");
//登陸郵件服務(wù)器的用戶名和密碼
email.setAuthentication("test","testpassword");
//接收人
email.addTo("jdoe@somewhere.org", "John Doe");
//發(fā)送人
email.setFrom("me@apache.org", "Me");
//標(biāo)題
email.setSubject("Test message");
//郵件內(nèi)容
email.setHtmlMsg("This is a simple test of commons-email");
//添加附件
email.attach(attachment);
//發(fā)送

十九、 Commons Pool

使用Jakarta Commons Pool可以根據(jù)需要快速的實(shí)現(xiàn)自己的對(duì)象池,只需要實(shí)現(xiàn)PoolableObjectFactory或者 KeyedPoolableObjectFactory接口。KeyedPoolableObjectFactory和 PoolableObjectFactory的不同之處在于KeyedPoolableObjectFactory的每個(gè)方法都比 PoolableObjectFactory多了一個(gè)Object key的參數(shù),使用這個(gè)參數(shù)可以使得對(duì)象池中的每個(gè)對(duì)象都有所不同。
PoolableObjectFactory定義了五個(gè)方法(摘至Jakarta Commons Pool API文檔):

1. makeObject is called whenever a new instance is needed.
2. activateObject is invoked on every instance before it is returned from the pool.
3. passivateObject is invoked on every instance when it is returned to the pool.
4. destroyObject is invoked on every instance when it is being "dropped" from the pool (whether due to the response from validateObject, or for reasons specific to the pool implementation.)
5. validateObject is invoked in an implementation-specific fashion to determine if an instance is still valid to be returned by the pool. It will only be invoked on an "activated" instance.


二十、Commons Digester

它能方便地將XML文檔所定義的元素轉(zhuǎn)化為JAVA對(duì)象,其實(shí)它的用法有點(diǎn)象棧(當(dāng)然內(nèi)在的原理就是那個(gè)古老的東西,只是提供了更高一層的封裝)。

//生成一個(gè)digester。主要需要引進(jìn)commons-logging.jar、commons-collections.jar、commons- beanutils.jar
Digester digester = new Digester();

//設(shè)置對(duì)XML文檔資料是否進(jìn)行DTD驗(yàn)證
digester.setValidating( false );

//當(dāng)遇見 catalog 元素的時(shí)候,產(chǎn)生一個(gè)Catalog對(duì)象
digester.addObjectCreate( "catalog", Catalog.class );

//當(dāng)遇見 catalog 元素下面的book的時(shí)候,產(chǎn)生一個(gè)Book對(duì)象
digester.addObjectCreate( "catalog/book", Book.class );
// 當(dāng)遇見 catalog 元素下面的book的author時(shí)候,調(diào)用author屬性的Set方法
digester.addBeanPropertySetter( "catalog/book/author", "author" );
digester.addBeanPropertySetter( "catalog/book/title", "title" );
//當(dāng)再一次遇見 catalog 元素下面的book的時(shí)候,調(diào)用catalog類的addBook()方法
digester.addSetNext( "catalog/book", "addBook" );

digester.addObjectCreate( "catalog/magazine", Magazine.class );
digester.addBeanPropertySetter( "catalog/magazine/name", "name" );

digester.addObjectCreate( "catalog/magazine/article", Article.class );
//addSetProperties()是將對(duì)應(yīng)元素的屬性賦值。
digester.addSetProperties( "catalog/magazine/article", "page", "page" );
digester.addBeanPropertySetter( "catalog/magazine/article/headline" );
digester.addSetNext( "catalog/magazine/article", "addArticle" );

digester.addSetNext( "catalog/magazine", "addMagazine" );
//"F:\\Digester\\catalog.xml"為XML文檔
File input = new File( "F:\\Digester\\catalog.xml" );
Catalog c = (Catalog)digester.parse( input );
System.out.println( c.toString() );

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    91欧美激情在线视频| 国产午夜免费在线视频| 亚洲精品深夜福利视频| 国产欧美日韩在线一区二区| 亚洲国产黄色精品在线观看| 国产一区二区三区av在线| 中文字幕一区二区熟女| 国产老女人性生活视频| 国产精品久久三级精品| 91亚洲精品国产一区| 九九热九九热九九热九九热| 欧美日韩国内一区二区| 午夜成年人黄片免费观看| 污污黄黄的成年亚洲毛片| 欧美日韩综合在线精品| 国产精品成人又粗又长又爽| 欧美日韩有码一二三区| 精品一区二区三区不卡少妇av| 日本91在线观看视频| 国产情侣激情在线对白| 日本加勒比在线观看一区| 日韩精品一区二区不卡| 免费观看潮喷到高潮大叫| 免费久久一级欧美特大黄孕妇| 亚洲熟妇中文字幕五十路| 日本和亚洲的香蕉视频| 肥白女人日韩中文视频| 欧美成人久久久免费播放| 日韩黄色大片免费在线| 国产一区二区三区精品免费| 青青操日老女人的穴穴| 欧美日韩欧美国产另类| 99福利一区二区视频| 欧美乱妇日本乱码特黄大片| 国产精品香蕉一级免费| 99国产精品国产精品九九| 免费性欧美重口味黄色| 丰满人妻一二区二区三区av| 91亚洲精品综合久久| 国产麻豆成人精品区在线观看| 美女黄色三级深夜福利|