Apache Commons包含了很多開源的工具,用于解決平時編程經常會遇到的問題,減少重復勞動。我選了一些比較常用的項目做簡單介紹。文中用了很多網上現成的東西,我只是做了一個匯總整理。? 一、Commons BeanUtils? http://jakarta.apache.org/commons/beanutils/index.html 說明:針對Bean的一個工具集。由于Bean往往是有一堆get和set組成,所以BeanUtils也是在此基礎上進行一些包裝。 使用示例:功能有很多,網站上有詳細介紹。? 1、一個比較常用的功能是Bean Copy,也就是copy bean的屬性。如果做分層架構開發的話就會用到,比如從PO(Persistent Object)拷貝數據到VO(Value Object)。? 傳統方法如下:?
Java代碼
//得到TeacherForm???? TeacherForm?teacherForm=(TeacherForm)form;? ?? //構造Teacher對象???? 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對象到數據庫???? HibernateDAO=?;? ?? HibernateDAO.save(teacher);??? Java代碼?
//得到TeacherForm??? TeacherForm?teacherForm=(TeacherForm)form;??? //構造Teacher對象??? 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對象到數據庫??? HibernateDAO=?;??? HibernateDAO.save(teacher);??? 使用BeanUtils后,代碼就大大改觀了,如下所示:?
Java代碼?
//得到TeacherForm???? TeacherForm?teacherForm=(TeacherForm)form;? ?? //構造Teacher對象???? Teacher?teacher=new?Teacher();? ?? //賦值???? BeanUtils.copyProperties(teacher,teacherForm);? ?? //持久化Teacher對象到數據庫???? HibernateDAO=?;? ?? HibernateDAO.save(teacher);??? Java代碼??
//得到TeacherForm??? TeacherForm?teacherForm=(TeacherForm)form;??? //構造Teacher對象??? Teacher?teacher=new?Teacher();??? //賦值??? BeanUtils.copyProperties(teacher,teacherForm);??? //持久化Teacher對象到數據庫??? HibernateDAO=?;??? HibernateDAO.save(teacher);??? 2、copy單個value到bean中指定的property? public static void copyProperty(Object bean, String name, Object value)? 3、實現對象的clone? public static Object cloneBean(Object bean)? 相比:? SerializationUtils的? public static Object clone(Serializable object)? 4、bean和map的相互轉換? public static Map describe(Object bean)? public static void populate(Object bean, Map properties)? 5、get和set方法,忽略property的類型? public static String getProperty(Object bean, String name)? public static void setProperty(Object bean, String name, Object value)? 二、Commons CLI? [url]http://jakarta.apache.org/commons/cli/index.html [/url]? 說明:這是一個處理命令的工具。比如main方法輸入的string[]需要解析。你可以預先定義好參數的規則,然后就可以調用CLI來解析。? 使用示例:?
Java代碼?
//?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???? }??? Java代碼??
//?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? [url]? http://jakarta.apache.org/commons/codec/index.html [/url]? 說明:這個工具是用來編碼和解碼的,包括Base64,URL,Soundx等等。用這個工具的人應該很清楚這些,我就不多介紹了。? 四、Commons Collections? [url]http://jakarta.apache.org/commons/collections/ [/url]? 說明:你可以把這個工具看成是java.util的擴展。? 使用示例:舉一個簡單的例子?
Java代碼?
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"?? Java代碼??
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? [url]http://jakarta.apache.org/commons/configuration/ [/url]? 說明:這個工具是用來幫助處理配置文件的,支持很多種存儲方式?
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 使用示例:舉一個Properties的簡單例子?
Java代碼?
#?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");??? Java代碼??
#?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? [url]http://jakarta.apache.org/commons/dbcp/ [/url]? 例子:?
Java代碼?
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”);?//數據庫驅動程序???? ?? bds.setUrl(“jdbc:postgresql://localhost:5432/myDB”);?//數據庫url???? ?? bds.setUsername(“postgres”);?//dba帳號???? ?? bds.setPassword(“XXXXXXXX”);?//密碼???? ?? bds.setInitialSize(100);?//初始化連接數量???? ?? bds.setMaxIdle(10);?//最大idle數???? ?? bds.setMaxWait(1000*60);?//超時回收時間???? ?? fac=new?DataSourceConnectionFactory(bds);?//得到連接工廠???? ?? Connection?conn=fac.createConnection();?//從池中獲得連接???? ?? conn.close();?//釋放連接,回到池中???? ?? ?? ?? //銷毀連接池???? ?? bds.close();? ?? bds=null;? ?? fac=null;??? Java代碼??
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”);?//數據庫驅動程序??? ?? bds.setUrl(“jdbc:postgresql://localhost:5432/myDB”);?//數據庫url??? ?? bds.setUsername(“postgres”);?//dba帳號??? ?? bds.setPassword(“XXXXXXXX”);?//密碼??? ?? bds.setInitialSize(100);?//初始化連接數量??? ?? bds.setMaxIdle(10);?//最大idle數??? ?? bds.setMaxWait(1000*60);?//超時回收時間??? ?? fac=new?DataSourceConnectionFactory(bds);?//得到連接工廠??? ?? Connection?conn=fac.createConnection();?//從池中獲得連接??? ?? conn.close();?//釋放連接,回到池中??? ?? ?? ?? //銷毀連接池??? ?? bds.close();??? bds=null;??? fac=null;??? 七、Commons DbUtils? [url]http://jakarta.apache.org/commons/dbutils/ [/url]? 說明:我以前在寫數據庫程序的時候,往往把數據庫操作單獨做一個包。DbUtils就是這樣一個工具,以后開發不用再重復這樣的工作了。值得一體的是,這個工具并不是現在流行的OR-Mapping工具(比如Hibernate),只是簡化數據庫操作,比如?
Java代碼?
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");??? Java代碼??
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? [url]http://jakarta.apache.org/commons/fileupload/ [/url]? 說明:jsp的上傳文件功能怎么做呢?? 使用示例:?
Java代碼?
//?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);? ?? }? ?? }??? Java代碼??
//?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? [url]http://jakarta.apache.org/commons/httpclient/ [/url]? 說明:這個工具可以方便通過編程的方式去訪問網站。? 使用示例:最簡單的Get操作?
Java代碼?
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();??? Java代碼??
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? [url]http://jakarta.apache.org/commons/io/ [/url]? 說明:可以看成是java.io的擴展,我覺得用起來非常方便。? 使用示例:? 1.讀取Stream? 標準代碼:?
Java代碼?
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();? ?? }??? Java代碼??
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?
Java代碼?
InputStream?in?=?new ?URL(?"http://jakarta.apache.org"?).openStream();? ?? try?{? ?? System.out.println(?IOUtils.toString(?in?)?);? ?? }?finally?{? ?? IOUtils.closeQuietly(in);? ?? }??? Java代碼??
InputStream?in?=?new?URL(?"http://jakarta.apache.org"?).openStream();??? try?{??? System.out.println(?IOUtils.toString(?in?)?);??? }?finally?{??? IOUtils.closeQuietly(in);??? }??? 2.讀取文件?
Java代碼?
File?file?=?new ?File("/commons/io/project.properties");? ?? List?lines?=?FileUtils.readLines(file,?"UTF-8");??? Java代碼??
File?file?=?new?File("/commons/io/project.properties");??? List?lines?=?FileUtils.readLines(file,?"UTF-8");??? 3.察看剩余空間?
Java代碼?
long ?freeSpace?=?FileSystemUtils.freeSpace("C:/");??? Java代碼??
long?freeSpace?=?FileSystemUtils.freeSpace("C:/");??? 十一、Commons JXPath? [url]http://jakarta.apache.org/commons/jxpath/ [/url]? 說明:Xpath你知道吧,那么JXpath就是基于Java對象的Xpath,也就是用Xpath對Java對象進行查詢。這個東西還是很有想像力的。? 使用示例:?
Java代碼?
Address?address?=?(Address)JXPathContext.newContext(vendor).? ?? getValue("locations[address/zipCode='90210']/address");??? Java代碼?
Address?address?=?(Address)JXPathContext.newContext(vendor).??? getValue("locations[address/zipCode='90210']/address");??? 上述代碼等同于?
Java代碼?
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;? ?? }? ?? }??? Java代碼??
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? [url]http://jakarta.apache.org/commons/lang/ [/url]? 說明:這個工具包可以看成是對java.lang的擴展。提供了諸如StringUtils, StringEscapeUtils, RandomStringUtils, Tokenizer, WordUtils等工具類。? 1、StringUtils? public static boolean isNotEmpty(String str)? public static String defaultString(String str)? 2、StringEscapeUtils? public static String escapeHtml(String str)? public static void escapeJava(Writer out, String str)\public static String escapeJava(String str)? public static String escapeJavaScript(String str)? public static String escapeSql(String str)? public static String escapeXml(String str)? 3、RandomStringUtils? public static String randomAlphanumeric(int count)? public static String random(int count)? 4、SystemUtils? SystemUtils.getUserDir()? SystemUtils.FILE_ENCODING? SystemUtils.FILE_SEPARATOR? 十三、Commons Logging? [url]http://jakarta.apache.org/commons/logging/ [/url]? 說明:你知道Log4j嗎?? 十四、Commons Math? [url]http://jakarta.apache.org/commons/math/ [/url]? 說明:看名字你就應該知道這個包是用來干嘛的了吧。這個包提供的功能有些和Commons Lang重復了,但是這個包更專注于做數學工具,功能更強大。? 十五、Commons Net? [url]http://jakarta.apache.org/commons/net/ [/url]? 說明:這個包還是很實用的,封裝了很多網絡協議。?
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 使用示例:?
Java代碼?
TelnetClient?telnet?=?new ?TelnetClient();? ?? telnet.connect(?"192.168.1.99",?23?);? ?? InputStream?in?=?telnet.getInputStream();? ?? PrintStream?out?=?new?PrintStream(?telnet.getOutputStream()?);? ?? ...? ?? telnet.close();??? Java代碼??
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? [url]http://jakarta.apache.org/commons/validator/ [/url]? 說明:用來幫助進行驗證的工具。比如驗證Email字符串,日期字符串等是否合法。? 使用示例:?
Java代碼?
//?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;? ?? }??? Java代碼??
//?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? [url]http://jakarta.apache.org/commons/vfs/ [/url]? 說明:提供對各種資源的訪問接口。支持的資源類型包括?
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 這個包的功能很強大,極大的簡化了程序對資源的訪問。? 使用示例:? 從jar中讀取文件?
Java代碼?
//?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()?);? ?? }??? Java代碼??
//?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讀取文件?
Java代碼?
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);?? Java代碼??
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提供的一個開源的API,是對javamail的封裝,因此在使用時要將javamail.jar加到 class path中,主要包括SimpleEmail,MultiPartEmail,HtmlEmail,EmailAttachment四個類。? SimpleEmail:發送簡單的email,不能添加附件? MultiPartEmail:文本郵件,可以添加多個附件? HtmlEmail:HTML格式郵件,同時具有MultiPartEmail類所有“功能”? EmailAttchment:附件類,可以添加本地資源,也可以指定網絡上資源,在發送時自動將網絡上資源下載發送。? 發送基本文本格式郵件:? ==============?
Java代碼?
SimpleEmail?email?=?new ?SimpleEmail();? ?? //smtp?host???? email.setHostName("mail.test.com");? ?? //登陸郵件服務器的用戶名和密碼???? email.setAuthentication("test","testpassword");? ?? //接收人???? email.addTo("jdoe@somewhere.org",?"John?Doe");? ?? //發送人???? email.setFrom("me@apache.org",?"Me");? ?? //標題???? email.setSubject("Test?message");? ?? //郵件內容???? email.setMsg("This?is?a?simple?test?of?commons-email");? ?? //發送???? email.send();??? Java代碼??
SimpleEmail?email?=?new?SimpleEmail();??? //smtp?host??? email.setHostName("mail.test.com");??? //登陸郵件服務器的用戶名和密碼??? email.setAuthentication("test","testpassword");??? //接收人??? email.addTo("jdoe@somewhere.org",?"John?Doe");??? //發送人??? email.setFrom("me@apache.org",?"Me");??? //標題??? email.setSubject("Test?message");??? //郵件內容??? email.setMsg("This?is?a?simple?test?of?commons-email");??? //發送??? email.send();??? 發送文本格式,帶附件郵件:? ==================?
Java代碼?
//附件,可以定義多個附件對象???? 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");? ?? //登陸郵件服務器的用戶名和密碼???? email.setAuthentication("test","testpassword");? ?? //接收人???? email.addTo("jdoe@somewhere.org",?"John?Doe");? ?? //發送人???? email.setFrom("me@apache.org",?"Me");? ?? //標題???? email.setSubject("Test?message");? ?? //郵件內容???? email.setMsg("This?is?a?simple?test?of?commons-email");? ?? //添加附件???? email.attach(attachment);? ?? //發送???? email.send();??? Java代碼??
//附件,可以定義多個附件對象??? 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");??? //登陸郵件服務器的用戶名和密碼??? email.setAuthentication("test","testpassword");??? //接收人??? email.addTo("jdoe@somewhere.org",?"John?Doe");??? //發送人??? email.setFrom("me@apache.org",?"Me");??? //標題??? email.setSubject("Test?message");??? //郵件內容??? email.setMsg("This?is?a?simple?test?of?commons-email");??? //添加附件??? email.attach(attachment);??? //發送??? email.send();??? 發送HTML格式帶附件郵件:? =================?
Java代碼?
//附件,可以定義多個附件對象???? 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");? ?? //登陸郵件服務器的用戶名和密碼???? email.setAuthentication("test","testpassword");? ?? //接收人???? email.addTo("jdoe@somewhere.org",?"John?Doe");? ?? //發送人???? email.setFrom("me@apache.org",?"Me");? ?? //標題???? email.setSubject("Test?message");? ?? //郵件內容???? email.setHtmlMsg("This?is?a?simple?test?of?commons-email");? ?? //添加附件???? email.attach(attachment);? ?? //發送??? Java代碼??
//附件,可以定義多個附件對象??? 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");??? //登陸郵件服務器的用戶名和密碼??? email.setAuthentication("test","testpassword");??? //接收人??? email.addTo("jdoe@somewhere.org",?"John?Doe");??? //發送人??? email.setFrom("me@apache.org",?"Me");??? //標題??? email.setSubject("Test?message");??? //郵件內容??? email.setHtmlMsg("This?is?a?simple?test?of?commons-email");??? //添加附件??? email.attach(attachment);??? //發送??? 十九、 Commons Pool? 使用Jakarta Commons Pool可以根據需要快速的實現自己的對象池,只需要實現PoolableObjectFactory或者KeyedPoolableObjectFactory接口。KeyedPoolableObjectFactory和PoolableObjectFactory的不同之處在于KeyedPoolableObjectFactory的每個方法都比PoolableObjectFactory多了一個Object key的參數,使用這個參數可以使得對象池中的每個對象都有所不同。? PoolableObjectFactory定義了五個方法(摘至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文檔所定義的元素轉化為JAVA對象,其實它的用法有點象棧(當然內在的原理就是那個古老的東西,只是提供了更高一層的封裝)。?
Java代碼?
//生成一個digester。主要需要引進commons-logging.jar、commons-collections.jar、commons-?beanutils.jar???? Digester?digester?=?new?Digester();? ?? ?? //設置對XML文檔資料是否進行DTD驗證???? digester.setValidating(?false?);? ?? ?? //當遇見?catalog?元素的時候,產生一個Catalog對象???? digester.addObjectCreate(?"catalog",?Catalog.class?);? ?? ?? //當遇見?catalog?元素下面的book的時候,產生一個Book對象???? digester.addObjectCreate(?"catalog/book",?Book.class?);? ?? //?當遇見?catalog?元素下面的book的author時候,調用author屬性的Set方法???? digester.addBeanPropertySetter(?"catalog/book/author",?"author"?);? ?? digester.addBeanPropertySetter(?"catalog/book/title",?"title"?);? ?? //當再一次遇見?catalog?元素下面的book的時候,調用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()是將對應元素的屬性賦值。???? digester.addSetProperties(?"catalog/magazine/article",?"page",?"page"?);? ?? digester.addBeanPropertySetter(?"catalog/magazine/article/headline"?);? ?? digester.addSetNext(?"catalog/magazine/article",?"addArticle"?);? ?? ?? digester.addSetNext(?"catalog/magazine",?"addMagazine"?);? ?? \Digester\\catalog.xml"為XML文檔???? File?input?=?new?File(?"F:\\Digester\\catalog.xml"?);? ?? Catalog?c?=?(Catalog)digester.parse(?input?);? ?? System.out.println(?c.toString()?);
轉載于:https://www.cnblogs.com/hejiajunsh/archive/2013/02/06/2906478.html
總結
以上是生活随笔 為你收集整理的Apache Commons组件集合 的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網站內容還不錯,歡迎將生活随笔 推薦給好友。