beanutils工具类_Apache Commons 工具类介绍及简单使用
Apache Commons 工具類大家都有用過,但是可能缺乏系統(tǒng)學(xué)習(xí),只用到了一小部分功能,無法發(fā)揮極限的價值,肥朝用大白話說就是,一顆好白菜都讓豬給拱了!
代碼過多,手機(jī)觀看效果不佳,建議收藏后在電腦上靜悄悄地看。因內(nèi)容健康,可大膽轉(zhuǎn)發(fā),即使未滿十八歲,在沒有家長陪同下也一樣可以觀看!
1、BeanUtils
提供了對于JavaBean進(jìn)行各種操作, 比如對象,屬性復(fù)制等等。
//1、?克隆對象??//??新創(chuàng)建一個普通Java?Bean,用來作為被克隆的對象??
????public?class?Person?{??
????private?String?name?=?"";??
????private?String?email?=?"";??
????private?int?age;??
????//省略?set,get方法??
????}??
// 再創(chuàng)建一個Test類,其中在main方法中代碼如下:
????import?java.lang.reflect.InvocationTargetException;??
????import?java.util.HashMap;??
????import?java.util.Map;??
????import?org.apache.commons.beanutils.BeanUtils;??
????import?org.apache.commons.beanutils.ConvertUtils;??
????public?class?Test?{??
????/**?
????*?@param?args?
????*/??
????public?static?void?main(String[]?args)?{??
????Person?person?=?new?Person();??
????person.setName("tom");??
????person.setAge(21);??
????try?{??
????????????//克隆??
????????Person?person2?=??(Person)BeanUtils.cloneBean(person);??
????????System.out.println(person2.getName()+">>"+person2.getAge());??
????}?catch?(IllegalAccessException?e)?{??
????????e.printStackTrace();??
????}?catch?(InstantiationException?e)?{??
????????e.printStackTrace();??
????}?catch?(InvocationTargetException?e)?{??
????????e.printStackTrace();??
????}?catch?(NoSuchMethodException?e)?{??
????????e.printStackTrace();??
????}??
????}??
????}??
// 原理也是通過Java的反射機(jī)制來做的。
//??2、?將一個Map對象轉(zhuǎn)化為一個Bean??
// 這個Map對象的key必須與Bean的屬性相對應(yīng)。
????Map?map?=?new?HashMap();??
????map.put("name","tom");??
????map.put("email","tom@");??
????map.put("age","21");??
????//將map轉(zhuǎn)化為一個Person對象??
????Person?person?=?new?Person();??
????BeanUtils.populate(person,map);??
// 通過上面的一行代碼,此時person的屬性就已經(jīng)具有了上面所賦的值了。
// 將一個Bean轉(zhuǎn)化為一個Map對象了,如下:
????Map?map?=?BeanUtils.describe(person)
2.Betwixt
XML與Java對象之間相互轉(zhuǎn)換。
//1、?將JavaBean轉(zhuǎn)為XML內(nèi)容??//?新創(chuàng)建一個Person類??
public?class?Person{??
????private?String?name;??
????private?int?age;??
????/**?Need?to?allow?bean?to?be?created?via?reflection?*/??
????public?PersonBean()?{??
????}??
????public?PersonBean(String?name,?int?age)?{??
????????this.name?=?name;??
????????this.age?=?age;??
????}??
????//省略set,?get方法??
????public?String?toString()?{??
????????return?"PersonBean[name='"?+?name?+?"',age='"?+?age?+?"']";??
????}??
}??
//再創(chuàng)建一個WriteApp類:
import?java.io.StringWriter;??
import?org.apache.commons.betwixt.io.BeanWriter;??
public?class?WriteApp?{??
/**?
*?創(chuàng)建一個例子Bean,并將它轉(zhuǎn)化為XML.?
*/??
public?static?final?void?main(String?[]?args)?throws?Exception?{??
????//?先創(chuàng)建一個StringWriter,我們將把它寫入為一個字符串?????????
????StringWriter?outputWriter?=?new?StringWriter();??
????//?Betwixt在這里僅僅是將Bean寫入為一個片斷??
????//?所以如果要想完整的XML內(nèi)容,我們應(yīng)該寫入頭格式??
????outputWriter.write(“<?xml ?version=’1.0′?encoding=’UTF-8′??>\n”);??
????//?創(chuàng)建一個BeanWriter,其將寫入到我們預(yù)備的stream中??
????BeanWriter?beanWriter?=?new?BeanWriter(outputWriter);??
????//?配置betwixt??
????//?更多詳情請參考java?docs?或最新的文檔??
????beanWriter.getXMLIntrospector().getConfiguration().setAttributesForPrimitives(false);??
????beanWriter.getBindingConfiguration().setMapIDs(false);??
????beanWriter.enablePrettyPrint();??
????//?如果這個地方不傳入XML的根節(jié)點(diǎn)名,Betwixt將自己猜測是什么??
????//?但是讓我們將例子Bean名作為根節(jié)點(diǎn)吧??
????beanWriter.write(“person”,?new?PersonBean(“John?Smith”,?21));??
????//輸出結(jié)果??
????System.out.println(outputWriter.toString());??
????//?Betwixt寫的是片斷而不是一個文檔,所以不要自動的關(guān)閉掉writers或者streams,??
????//但這里僅僅是一個例子,不會做更多事情,所以可以關(guān)掉??
????outputWriter.close();??
????}??
}??
//2、?將XML轉(zhuǎn)化為JavaBean??
import?java.io.StringReader;??
import?org.apache.commons.betwixt.io.BeanReader;??
public?class?ReadApp?{??
public?static?final?void?main(String?args[])?throws?Exception{??
????//?先創(chuàng)建一個XML,由于這里僅是作為例子,所以我們硬編碼了一段XML內(nèi)容??
????StringReader?xmlReader?=?new?StringReader(??
????"<?xml ?version=’1.0′?encoding=’UTF-8′??>?25James?Smith");??
????//創(chuàng)建BeanReader??
????BeanReader?beanReader??=?new?BeanReader();??
????//配置reader??
????beanReader.getXMLIntrospector().getConfiguration().setAttributesForPrimitives(false);??
????beanReader.getBindingConfiguration().setMapIDs(false);??
????//注冊beans,以便betwixt知道XML將要被轉(zhuǎn)化為一個什么Bean??
????beanReader.registerBeanClass("person",?PersonBean.class);??
????//現(xiàn)在我們對XML進(jìn)行解析??
????PersonBean?person?=?(PersonBean)?beanReader.parse(xmlReader);??
????//輸出結(jié)果??
????System.out.println(person);??
????}??
}
3.Codec
提供了一些公共的編解碼實現(xiàn),比如Base64, Hex, MD5,Phonetic and URLs等等。
//Base64編解碼??private?static?String?encodeTest(String?str){??
????Base64?base64?=?new?Base64();??
????try?{??
????????str?=?base64.encodeToString(str.getBytes("UTF-8"));??
????}?catch?(UnsupportedEncodingException?e)?{??
????????e.printStackTrace();??
????}??
????????System.out.println("Base64 編碼后:"+str);??
????return?str;??
}??
private?static?void?decodeTest(String?str){??
????Base64?base64?=?new?Base64();??
????//str?=?Arrays.toString(Base64.decodeBase64(str));??
????str?=?new?String(Base64.decodeBase64(str));??
????System.out.println("Base64 解碼后:"+str);??
}
4.Collections
對java.util的擴(kuò)展封裝,處理數(shù)據(jù)還是挺靈活的。
org.apache.commons.collections – Commons Collections自定義的一組公用的接口和工具類
org.apache.commons.collections.bag – 實現(xiàn)Bag接口的一組類
org.apache.commons.collections.bidimap – 實現(xiàn)BidiMap系列接口的一組類
org.apache.commons.collections.buffer – 實現(xiàn)Buffer接口的一組類
org.apache.commons.collections.collection – 實現(xiàn)java.util.Collection接口的一組類
org.apache.commons.collections.comparators – 實現(xiàn)java.util.Comparator接口的一組類
org.apache.commons.collections.functors – Commons Collections自定義的一組功能類
org.apache.commons.collections.iterators – 實現(xiàn)java.util.Iterator接口的一組類
org.apache.commons.collections.keyvalue – 實現(xiàn)集合和鍵/值映射相關(guān)的一組類
org.apache.commons.collections.list – 實現(xiàn)java.util.List接口的一組類
org.apache.commons.collections.map – 實現(xiàn)Map系列接口的一組類
org.apache.commons.collections.set – 實現(xiàn)Set系列接口的一組類
/**?*?得到集合里按順序存放的key之后的某一Key?
*/??
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"???
/**?
*?通過key得到value?
*?通過value得到key?
*?將map里的key和value對調(diào)?
*/??
BidiMap?bidi?=?new?TreeBidiMap();??
bidi.put("SIX",?"6");??
bidi.get("SIX");??//?returns?"6"??
bidi.getKey("6");??//?returns?"SIX"??
//???????bidi.removeValue("6");??//?removes?the?mapping??
BidiMap?inverse?=?bidi.inverseBidiMap();??//?returns?a?map?with?keys?and?values?swapped??
System.out.println(inverse);??
/**?
?*?得到兩個集合中相同的元素?
?*/??
List?list1?=?new?ArrayList();??
list1.add("1");??
list1.add("2");??
list1.add("3");??
List?list2?=?new?ArrayList();??
list2.add("2");??
list2.add("3");??
list2.add("5");??
Collection?c?=?CollectionUtils.retainAll(list1,?list2);??
System.out.println(c);
5.Compress
commons compress中的打包、壓縮類庫。
//創(chuàng)建壓縮對象??ZipArchiveEntry?entry?=?new?ZipArchiveEntry("CompressTest");??
//要壓縮的文件??
File?f=new?File("e:\\test.pdf");??
FileInputStream?fis=new?FileInputStream(f);??
//輸出的對象?壓縮的文件??
ZipArchiveOutputStream?zipOutput=new?ZipArchiveOutputStream(new?File("e:\\test.zip"));????
zipOutput.putArchiveEntry(entry);??
int?i=0,j;??
while((j=fis.read())?!=?-1)??
{???
zipOutput.write(j);??
i++;??
System.out.println(i);??
}??
zipOutput.closeArchiveEntry();??
zipOutput.close();??
fis.close();
6.Configuration
用來幫助處理配置文件的,支持很多種存儲方式。
Properties files
XML documents
Property list files (.plist)
JNDI
JDBC Datasource
System properties
Applet parameters
Servlet parameters
#?usergui.properties??
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");??
7.DBCP
(Database Connection Pool)是一個依賴Jakarta commons-pool對象池機(jī)制的數(shù)據(jù)庫連接池,Tomcat的數(shù)據(jù)源使用的就是DBCP。
import?javax.sql.DataSource;??import?java.sql.Connection;??
import?java.sql.Statement;??
import?java.sql.ResultSet;??
import?java.sql.SQLException;??
import?org.apache.commons.pool.ObjectPool;??
import?org.apache.commons.pool.impl.GenericObjectPool;??
import?org.apache.commons.dbcp.ConnectionFactory;??
import?org.apache.commons.dbcp.PoolingDataSource;??
import?org.apache.commons.dbcp.PoolableConnectionFactory;??
import?org.apache.commons.dbcp.DriverManagerConnectionFactory;??
//官方示例??
public?class?PoolingDataSources?{??
????public?static?void?main(String[]?args)?{??
????????System.out.println("加載jdbc驅(qū)動");??
????????try?{??
????????Class.forName("oracle.jdbc.driver.OracleDriver");??
????????}?catch?(ClassNotFoundException?e)?{??
????????e.printStackTrace();??
????????}??
????????System.out.println("Done.");??
????????//??
????????System.out.println("設(shè)置數(shù)據(jù)源");??
????????DataSource?dataSource?=?setupDataSource("jdbc:oracle:thin:@localhost:1521:test");??
????????System.out.println("Done.");??
????????//??
????????Connection?conn?=?null;??
????????Statement?stmt?=?null;??
????????ResultSet?rset?=?null;??
????????try?{??
????????System.out.println("Creating?connection.");??
????????conn?=?dataSource.getConnection();??
????????System.out.println("Creating?statement.");??
????????stmt?=?conn.createStatement();??
????????System.out.println("Executing?statement.");??
????????rset?=?stmt.executeQuery("select?*?from?person");??
????????System.out.println("Results:");??
????????int?numcols?=?rset.getMetaData().getColumnCount();??
????????while(rset.next())?{??
????????for(int?i=0;i<=numcols;i++)?{??
????????System.out.print("\t"?+?rset.getString(i));??
????????}??
????????System.out.println("");??
????????}??
????????}?catch(SQLException?e)?{??
????????e.printStackTrace();??
????????}?finally?{??
????????try?{?if?(rset?!=?null)?rset.close();?}?catch(Exception?e)?{?}??
????????try?{?if?(stmt?!=?null)?stmt.close();?}?catch(Exception?e)?{?}??
????????try?{?if?(conn?!=?null)?conn.close();?}?catch(Exception?e)?{?}??
????????}??
????????}??
????public?static?DataSource?setupDataSource(String?connectURI)?{??
????????//設(shè)置連接地址??
????????ConnectionFactory?connectionFactory?=?new?DriverManagerConnectionFactory(??
????????????????connectURI,?null);??
????????//?創(chuàng)建連接工廠??
????????PoolableConnectionFactory?poolableConnectionFactory?=?new?PoolableConnectionFactory(??
????????????????connectionFactory);??
????????//獲取GenericObjectPool?連接的實例??
????????ObjectPool?connectionPool?=?new?GenericObjectPool(??
????????????????poolableConnectionFactory);??
????????//?創(chuàng)建?PoolingDriver??
????????PoolingDataSource?dataSource?=?new?PoolingDataSource(connectionPool);??
????????return?dataSource;??
????}??
}
8.DbUtils
Apache組織提供的一個資源JDBC工具類庫,它是對JDBC的簡單封裝,對傳統(tǒng)操作數(shù)據(jù)庫的類進(jìn)行二次封裝,可以把結(jié)果集轉(zhuǎn)化成List。,同時也不影響程序的性能。
DbUtils類:啟動類
ResultSetHandler接口:轉(zhuǎn)換類型接口
MapListHandler類:實現(xiàn)類,把記錄轉(zhuǎn)化成List
BeanListHandler類:實現(xiàn)類,把記錄轉(zhuǎn)化成List,使記錄為JavaBean類型的對象
Qrery Runner類:執(zhí)行SQL語句的類
import?org.apache.commons.dbutils.DbUtils;??import?org.apache.commons.dbutils.QueryRunner;??
import?org.apache.commons.dbutils.handlers.BeanListHandler;??
import?java.sql.Connection;??
import?java.sql.DriverManager;??
import?java.sql.SQLException;??
import?java.util.List;??
//轉(zhuǎn)換成list??
public?class?BeanLists?{??
????public?static?void?main(String[]?args)?{??
????????Connection?conn?=?null;??
????????String?url?=?"jdbc:mysql://localhost:3306/ptest";??
????????String?jdbcDriver?=?"com.mysql.jdbc.Driver";??
????????String?user?=?"root";??
????????String?password?=?"ptest";??
????????DbUtils.loadDriver(jdbcDriver);??
????????try?{??
????????????conn?=?DriverManager.getConnection(url,?user,?password);??
????????????QueryRunner?qr?=?new?QueryRunner();??
????????????List?results?=?(List)?qr.query(conn,?"select?id,name?from?person",?new?BeanListHandler(Person.class));??
????????????for?(int?i?=?0;?i?????????????????Person?p?=?(Person)?results.get(i);??
????????????????System.out.println("id:"?+?p.getId()?+?",name:"?+?p.getName());??
????????????}??
????????}?catch?(SQLException?e)?{??
????????????e.printStackTrace();??
????????}?finally?{??
????????????DbUtils.closeQuietly(conn);??
????????}??
????}??
}??
public?class?Person{??
????private?Integer?id;??
????private?String?name;??
???//省略set,?get方法??
}??
import?org.apache.commons.dbutils.DbUtils;??
import?org.apache.commons.dbutils.QueryRunner;??
import?org.apache.commons.dbutils.handlers.MapListHandler;??
import?java.sql.Connection;??
import?java.sql.DriverManager;??
import?java.sql.SQLException;??
import?java.util.List;??
import?java.util.Map;??
//轉(zhuǎn)換成map??
public?class?MapLists?{??
????public?static?void?main(String[]?args)?{??
????????Connection?conn?=?null;??
????????String?url?=?"jdbc:mysql://localhost:3306/ptest";??
????????String?jdbcDriver?=?"com.mysql.jdbc.Driver";??
????????String?user?=?"root";??
????????String?password?=?"ptest";??
????????DbUtils.loadDriver(jdbcDriver);??
????????try?{??
????????????conn?=?DriverManager.getConnection(url,?user,?password);??
????????????QueryRunner?qr?=?new?QueryRunner();??
????????????List?results?=?(List)?qr.query(conn,?"select?id,name?from?person",?new?MapListHandler());??
????????????for?(int?i?=?0;?i?????????????????Map?map?=?(Map)?results.get(i);??
????????????????System.out.println("id:"?+?map.get("id")?+?",name:"?+?map.get("name"));??
????????????}??
????????}?catch?(SQLException?e)?{??
????????????e.printStackTrace();??
????????}?finally?{??
????????????DbUtils.closeQuietly(conn);??
????????}??
????}??
}
9.Email
提供的一個開源的API,是對javamail的封裝。
//用commons?email發(fā)送郵件??public?static?void?main(String?args[]){??
????Email?email?=?new?SimpleEmail();??
????email.setHostName("smtp.googlemail.com");??
????email.setSmtpPort(465);??
????email.setAuthenticator(new?DefaultAuthenticator("username",?"password"));??
????email.setSSLOnConnect(true);??
????email.setFrom("user@gmail.com");??
????email.setSubject("TestMail");??
????email.setMsg("This?is?a?test?mail?...?:-)");??
????email.addTo("foo@bar.com");??
????email.send();??
}
10.FileUpload
java web文件上傳功能。
//官方示例://*?檢查請求是否含有上傳文件??
//?Check?that?we?have?a?file?upload?request??
boolean?isMultipart?=?ServletFileUpload.isMultipartContent(request);??
//現(xiàn)在我們得到了items的列表??
//如果你的應(yīng)用近于最簡單的情況,上面的處理就夠了。但我們有時候還是需要更多的控制。
//下面提供了幾種控制選擇:
//?Create?a?factory?for?disk-based?file?items??
DiskFileItemFactory?factory?=?new?DiskFileItemFactory();??
//?Set?factory?constraints??
factory.setSizeThreshold(yourMaxMemorySize);??
factory.setRepository(yourTempDirectory);??
//?Create?a?new?file?upload?handler??
ServletFileUpload?upload?=?new?ServletFileUpload(factory);??
//?設(shè)置最大上傳大小??
upload.setSizeMax(yourMaxRequestSize);??
//?解析所有請求??
List?/*?FileItem?*/?items?=?upload.parseRequest(request);??
//?Create?a?factory?for?disk-based?file?items??
DiskFileItemFactory?factory?=?new?DiskFileItemFactory(??
????????yourMaxMemorySize,?yourTempDirectory);??
//一旦解析完成,你需要進(jìn)一步處理item的列表。
//?Process?the?uploaded?items??
Iterator?iter?=?items.iterator();??
while?(iter.hasNext())?{??
????FileItem?item?=?(FileItem)?iter.next();??
????if?(item.isFormField())?{??
????????processFormField(item);??
????}?else?{??
????????processUploadedFile(item);??
????}??
}??
//區(qū)分?jǐn)?shù)據(jù)是否為簡單的表單數(shù)據(jù),如果是簡單的數(shù)據(jù):
//?processFormField??
if?(item.isFormField())?{??
????String?name?=?item.getFieldName();??
????String?value?=?item.getString();??
????//...省略步驟??
}??
//如果是提交的文件:
//?processUploadedFile??
if?(!item.isFormField())?{??
????String?fieldName?=?item.getFieldName();??
????String?fileName?=?item.getName();??
????String?contentType?=?item.getContentType();??
????boolean?isInMemory?=?item.isInMemory();??
????long?sizeInBytes?=?item.getSize();??
????//...省略步驟??
}??
//對于這些item,我們通常要把它們寫入文件,或轉(zhuǎn)為一個流??
//?Process?a?file?upload??
if?(writeToFile)?{??
????File?uploadedFile?=?new?File(...);??
????item.write(uploadedFile);??
}?else?{??
????InputStream?uploadedStream?=?item.getInputStream();??
????//...省略步驟??
????uploadedStream.close();??
}??
//或轉(zhuǎn)為字節(jié)數(shù)組保存在內(nèi)存中:
//?Process?a?file?upload?in?memory??
byte[]?data?=?item.get();??
//...省略步驟??
//如果這個文件真的很大,你可能會希望向用戶報告到底傳了多少到服務(wù)端,讓用戶了解上傳的過程??
//Create?a?progress?listener??
ProgressListener?progressListener?=?new?ProgressListener(){??
???public?void?update(long?pBytesRead,?long?pContentLength,?int?pItems)?{??
???????System.out.println("We?are?currently?reading?item?"?+?pItems);??
???????if?(pContentLength?==?-1)?{??
???????????System.out.println("So?far,?"?+?pBytesRead?+?"?bytes?have?been?read.");??
???????}?else?{??
???????????System.out.println("So?far,?"?+?pBytesRead?+?"?of?"?+?pContentLength??
??????????????????????????????+?"?bytes?have?been?read.");??
???????}??
???}??
};??
upload.setProgressListener(progressListener);
11.HttpClient
基于HttpCore實 現(xiàn)的一個HTTP/1.1兼容的HTTP客戶端,它提供了一系列可重用的客戶端身份驗證、HTTP狀態(tài)保持、HTTP連接管理module。
//GET方法??import?java.io.IOException;??
import?org.apache.commons.httpclient.*;??
import?org.apache.commons.httpclient.methods.GetMethod;??
import?org.apache.commons.httpclient.params.HttpMethodParams;??
public?class?GetSample{??
????public?static?void?main(String[]?args)?{??
????????//?構(gòu)造HttpClient的實例??
????????HttpClient?httpClient?=?new?HttpClient();??
????????//?創(chuàng)建GET方法的實例??
????????GetMethod?getMethod?=?new?GetMethod("http://www.ibm.com");??
????????//?使用系統(tǒng)提供的默認(rèn)的恢復(fù)策略??
????????getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,??
????????????????new?DefaultHttpMethodRetryHandler());??
????????try?{??
????????????//?執(zhí)行g(shù)etMethod??
????????????int?statusCode?=?httpClient.executeMethod(getMethod);??
????????????if?(statusCode?!=?HttpStatus.SC_OK)?{??
????????????????System.err.println("Method?failed:?"??
????????????????????????+?getMethod.getStatusLine());??
????????????}??
????????????//?讀取內(nèi)容??
????????????byte[]?responseBody?=?getMethod.getResponseBody();??
????????????//?處理內(nèi)容??
????????????System.out.println(new?String(responseBody));??
????????}?catch?(HttpException?e)?{??
????????????//?發(fā)生致命的異常,可能是協(xié)議不對或者返回的內(nèi)容有問題??
????????????System.out.println("Please?check?your?provided?http?address!");??
????????????e.printStackTrace();??
????????}?catch?(IOException?e)?{??
????????????//?發(fā)生網(wǎng)絡(luò)異常??
????????????e.printStackTrace();??
????????}?finally?{??
????????????//?釋放連接??
????????????getMethod.releaseConnection();??
????????}??
????}??
}??
//POST方法??
import?java.io.IOException;??
import?org.apache.commons.httpclient.*;??
import?org.apache.commons.httpclient.methods.PostMethod;??
import?org.apache.commons.httpclient.params.HttpMethodParams;??
public?class?PostSample{??
????public?static?void?main(String[]?args)?{??
????????//?構(gòu)造HttpClient的實例??
????????HttpClient?httpClient?=?new?HttpClient();??
????????//?創(chuàng)建POST方法的實例??
????????String?url?=?"http://www.oracle.com/";??
????????PostMethod?postMethod?=?new?PostMethod(url);??
????????//?填入各個表單域的值??
????????NameValuePair[]?data?=?{?new?NameValuePair("id",?"youUserName"),??
????????new?NameValuePair("passwd",?"yourPwd")?};??
????????//?將表單的值放入postMethod中??
????????postMethod.setRequestBody(data);??
????????//?執(zhí)行postMethod??
????????int?statusCode?=?httpClient.executeMethod(postMethod);??
????????//?HttpClient對于要求接受后繼服務(wù)的請求,象POST和PUT等不能自動處理轉(zhuǎn)發(fā)??
????????//?301或者302??
????????if?(statusCode?==?HttpStatus.SC_MOVED_PERMANENTLY?||???
????????statusCode?==?HttpStatus.SC_MOVED_TEMPORARILY)?{??
????????????//?從頭中取出轉(zhuǎn)向的地址??
????????????Header?locationHeader?=?postMethod.getResponseHeader("location");??
????????????String?location?=?null;??
????????????if?(locationHeader?!=?null)?{??
?????????????location?=?locationHeader.getValue();??
?????????????System.out.println("The?page?was?redirected?to:"?+?location);??
????????????}?else?{??
?????????????System.err.println("Location?field?value?is?null.");??
????????????}??
????????????return;??
????????}??
????}??
}
12.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:/");
13.Lang
主要是一些公共的工具集合,比如對字符、數(shù)組的操作等等。
//?1?合并兩個數(shù)組:?org.apache.commons.lang.?ArrayUtils??// 有時我們需要將兩個數(shù)組合并為一個數(shù)組,用ArrayUtils就非常方便,示例如下:
private?static?void?testArr()?{??
String[]?s1?=?new?String[]?{?"1",?"2",?"3"?};??
String[]?s2?=?new?String[]?{?"a",?"b",?"c"?};??
String[]?s?=?(String[])?ArrayUtils.addAll(s1,?s2);??
for?(int?i?=?0;?i?????System.out.println(s[i]);??
}??
String?str?=?ArrayUtils.toString(s);??
str?=?str.substring(1,?str.length()?-?1);??
System.out.println(str?+?">>"?+?str.length());??
}??
//2?截取從from開始字符串??
StringUtils.substringAfter("SELECT?*?FROM?PERSON?",?"from");??
//3 判斷該字符串是不是為數(shù)字(0~9)組成,如果是,返回true 但該方法不識別有小數(shù)點(diǎn)和 請注意。
StringUtils.isNumeric("454534");?//返回true??
//4.取得類名??
System.out.println(ClassUtils.getShortClassName(Test.class));??
//取得其包名??
System.out.println(ClassUtils.getPackageName(Test.class));??
//5.NumberUtils??
System.out.println(NumberUtils.stringToInt("6"));??
//6.五位的隨機(jī)字母和數(shù)字??
System.out.println(RandomStringUtils.randomAlphanumeric(5));??
//7.StringEscapeUtils??
System.out.println(StringEscapeUtils.escapeHtml(""));??
//輸出結(jié)果為>html
System.out.println(StringEscapeUtils.escapeJava("String"));??//8.StringUtils,判斷是否是空格字符??
System.out.println(StringUtils.isBlank("???"));??//將數(shù)組中的內(nèi)容以,分隔??
System.out.println(StringUtils.join(test,","));??//在右邊加下字符,使之總長度為6??
System.out.println(StringUtils.rightPad("abc",?6,?'T'));??//首字母大寫??
System.out.println(StringUtils.capitalize("abc"));??//Deletes?all?whitespaces?from?a?String?刪除所有空格??
System.out.println(?StringUtils.deleteWhitespace("???ab??c??"));??//判斷是否包含這個字符??
System.out.println(?StringUtils.contains("abc",?"ba"));??//表示左邊兩個字符??
System.out.println(?StringUtils.left("abc",?2));??
System.out.println(NumberUtils.stringToInt("33"));
14.Logging
提供的是一個Java 的日志接口,同時兼顧輕量級和不依賴于具體的日志實現(xiàn)工具。
import?org.apache.commons.logging.Log;??import?org.apache.commons.logging.LogFactory;??
public?class?CommonLogTest?{??
?private?static?Log?log?=?LogFactory.getLog(CommonLogTest.class);??
?//日志打印??
?public?static?void?main(String[]?args)?{??
?????log.error("ERROR");??
?????log.debug("DEBUG");??
?????log.warn("WARN");??
?????log.info("INFO");??
?????log.trace("TRACE");??
??System.out.println(log.getClass());??
?}??
}
15.Validator
通用驗證系統(tǒng),該組件提供了客戶端和服務(wù)器端的數(shù)據(jù)驗證框架。
1.驗證日期
//?獲取日期驗證??DateValidator?validator?=?DateValidator.getInstance();??
//?驗證/轉(zhuǎn)換日期??
Date?fooDate?=?validator.validate(fooString,?"dd/MM/yyyy");??
if?(fooDate?==?null)?{??
??//?錯誤?不是日期??
??return;??
}
2.表達(dá)式驗證
//?設(shè)置參數(shù)??boolean?caseSensitive?=?false;??
String?regex1???=?"^([A-Z]*)(?:\\-)([A-Z]*)*$"??
String?regex2???=?"^([A-Z]*)$";??
String[]?regexs?=?new?String[]?{regex1,?regex1};??
//?創(chuàng)建驗證??
RegexValidator?validator?=?new?RegexValidator(regexs,?caseSensitive);??
//?驗證返回boolean??
boolean?valid?=?validator.isValid("abc-def");??
//?驗證返回字符串??
String?result?=?validator.validate("abc-def");??
//?驗證返回數(shù)組??
String[]?groups?=?validator.match("abc-def");
3.配置文件中使用驗證
<form-validation>?????<global>??
???????<validator?name="required"??classname="org.apache.commons.validator.TestValidator"??method="validateRequired"??methodParams="java.lang.Object,?org.apache.commons.validator.Field"/>??
????global>??
????<formset>??
????formset>??
form-validation>??
添加姓名驗證.??
<form-validation>??
???<global>??
???????<validator?name="required"??classname="org.apache.commons.validator.TestValidator"??method="validateRequired"??methodParams="java.lang.Object,?org.apache.commons.validator.Field"/>??
????global>??
????<formset>??
???????<form?name="nameForm">??
??????????<field?property="firstName"?depends="required">??
?????????????<arg0?key="nameForm.firstname.displayname"/>??
??????????field>??
??????????<field?property="lastName"?depends="required">??
?????????????<arg0?key="nameForm.lastname.displayname"/>??
??????????field>??
???????form>??
????formset>??
form-validation>
4.驗證類
Excerpts?from?org.apache.commons.validator.RequiredNameTest??//加載驗證配置文件??
InputStream?in?=?this.getClass().getResourceAsStream("validator-name-required.xml");??
ValidatorResources?resources?=?new?ValidatorResources(in);??
//這個是自己創(chuàng)建的bean?我這里省略了??
Name?name?=?new?Name();??
Validator?validator?=?new?Validator(resources,?"nameForm");??
//設(shè)置參數(shù)??
validator.setParameter(Validator.BEAN_PARAM,?name);??
Map?results?=?null;??
//驗證??
results?=?validator.validate();??
if?(results.get("firstName")?==?null)?{??
????//驗證成功??
}?else?{??
????//有錯誤?????int?errors?=?((Integer)results.get("firstName")).intValue();??
}
總結(jié)
以上是生活随笔為你收集整理的beanutils工具类_Apache Commons 工具类介绍及简单使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: flac3d命令流实例大全_ANSYS
- 下一篇: arraylist删除指定元素_面试官: