Apache Commons组件集合

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代码
  1. //得到TeacherForm    
  2. TeacherForm teacherForm=(TeacherForm)form;    
  3. //构造Teacher对象    
  4. Teacher teacher=new Teacher();    
  5. //赋值    
  6. teacher.setName(teacherForm.getName());    
  7. teacher.setAge(teacherForm.getAge());    
  8. teacher.setGender(teacherForm.getGender());    
  9. teacher.setMajor(teacherForm.getMajor());    
  10. teacher.setDepartment(teacherForm.getDepartment());    
  11.   
  12. //持久化Teacher对象到数据库    
  13. HibernateDAO= ;    
  14. HibernateDAO.save(teacher);   
Java代码 
  1. //得到TeacherForm   
  2. TeacherForm teacherForm=(TeacherForm)form;   
  3. //构造Teacher对象   
  4. Teacher teacher=new Teacher();   
  5. //赋值   
  6. teacher.setName(teacherForm.getName());   
  7. teacher.setAge(teacherForm.getAge());   
  8. teacher.setGender(teacherForm.getGender());   
  9. teacher.setMajor(teacherForm.getMajor());   
  10. teacher.setDepartment(teacherForm.getDepartment());   
  11.   
  12. //持久化Teacher对象到数据库   
  13. HibernateDAO= ;   
  14. HibernateDAO.save(teacher);   


使用BeanUtils后,代码就大大改观了,如下所示: 

Java代码 
  1. //得到TeacherForm    
  2. TeacherForm teacherForm=(TeacherForm)form;    
  3. //构造Teacher对象    
  4. Teacher teacher=new Teacher();    
  5. //赋值    
  6. BeanUtils.copyProperties(teacher,teacherForm);    
  7. //持久化Teacher对象到数据库    
  8. HibernateDAO= ;    
  9. HibernateDAO.save(teacher);   
Java代码  
  1. //得到TeacherForm   
  2. TeacherForm teacherForm=(TeacherForm)form;   
  3. //构造Teacher对象   
  4. Teacher teacher=new Teacher();   
  5. //赋值   
  6. BeanUtils.copyProperties(teacher,teacherForm);   
  7. //持久化Teacher对象到数据库   
  8. HibernateDAO= ;   
  9. 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代码 
  1. // create Options object    
  2. Options options = new Options();    
  3. // add t option, option is the command parameter, false indicates that    
  4. // this parameter is not required.    
  5.   
  6. options.addOption(“t”, false, “display current time”);    
  7. options.addOption("c", true, "country code");    
  8.   
  9. CommandLineParser parser = new PosixParser();    
  10. CommandLine cmd = parser.parse( options, args);    
  11.   
  12. if(cmd.hasOption("t")) {    
  13. // print the date and time    
  14. }else {    
  15. // print the date    
  16. }    
  17.   
  18. // get c option value    
  19. String countryCode = cmd.getOptionValue("c");    
  20.   
  21. if(countryCode == null) {    
  22. // print default date    
  23. }else {    
  24. // print date for country specified by countryCode    
  25. }   
Java代码  
  1. // create Options object   
  2. Options options = new Options();   
  3. // add t option, option is the command parameter, false indicates that   
  4. // this parameter is not required.   
  5.   
  6. options.addOption(“t”, false, “display current time”);   
  7. options.addOption("c", true, "country code");   
  8.   
  9. CommandLineParser parser = new PosixParser();   
  10. CommandLine cmd = parser.parse( options, args);   
  11.   
  12. if(cmd.hasOption("t")) {   
  13. // print the date and time   
  14. }else {   
  15. // print the date   
  16. }   
  17.   
  18. // get c option value   
  19. String countryCode = cmd.getOptionValue("c");   
  20.   
  21. if(countryCode == null) {   
  22. // print default date   
  23. }else {   
  24. // print date for country specified by countryCode   
  25. }   


三、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代码 
  1. OrderedMap map = new LinkedMap();    
  2. map.put("FIVE", "5");    
  3. map.put("SIX", "6");    
  4. map.put("SEVEN", "7");    
  5. map.firstKey(); // returns "FIVE"    
  6. map.nextKey("FIVE"); // returns "SIX"    
  7. map.nextKey("SIX"); // returns "SEVEN"  
Java代码  
  1. OrderedMap map = new LinkedMap();   
  2. map.put("FIVE", "5");   
  3. map.put("SIX", "6");   
  4. map.put("SEVEN", "7");   
  5. map.firstKey(); // returns "FIVE"   
  6. map.nextKey("FIVE"); // returns "SIX"   
  7. 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代码 
  1. # usergui.properties, definining the GUI,    
  2. colors.background = #FFFFFF    
  3. colors.foreground = #000080    
  4. window.width = 500    
  5. window.height = 300    
  6.   
  7. PropertiesConfiguration config = new PropertiesConfiguration("usergui.properties");    
  8. config.setProperty("colors.background", "#000000);    
  9. config.save();    
  10.   
  11. config.save("usergui.backup.properties);//save a copy    
  12. Integer integer = config.getInteger("window.width");   
Java代码  
  1. # usergui.properties, definining the GUI,   
  2. colors.background = #FFFFFF   
  3. colors.foreground = #000080   
  4. window.width = 500   
  5. window.height = 300   
  6.   
  7. PropertiesConfiguration config = new PropertiesConfiguration("usergui.properties");   
  8. config.setProperty("colors.background", "#000000);   
  9. config.save();   
  10.   
  11. config.save("usergui.backup.properties);//save a copy   
  12. Integer integer = config.getInteger("window.width");   



六、Commons DBCP 

[url]http://jakarta.apache.org/commons/dbcp/ [/url] 

例子: 

Java代码 
  1. import java.sql.*;    
  2.   
  3. import com.gwnet.games.antiLord.util.*;    
  4.   
  5. import org.apache.commons.dbcp.ConnectionFactory;    
  6.   
  7. import org.apache.commons.dbcp.BasicDataSource;    
  8.   
  9. import org.apache.commons.dbcp.DataSourceConnectionFactory;    
  10.   
  11.   
  12.   
  13. private static BasicDataSource bds=new BasicDataSource();    
  14.   
  15. private static ConnectionFactory fac=null;    
  16.   
  17.   
  18.   
  19. //初始化连接池    
  20.   
  21. bds.setDriverClassName(“org.postgresql.Driver”); //数据库驱动程序    
  22.   
  23. bds.setUrl(“jdbc:postgresql://localhost:5432/myDB”); //数据库url    
  24.   
  25. bds.setUsername(“postgres”); //dba帐号    
  26.   
  27. bds.setPassword(“XXXXXXXX”); //密码    
  28.   
  29. bds.setInitialSize(100); //初始化连接数量    
  30.   
  31. bds.setMaxIdle(10); //最大idle数    
  32.   
  33. bds.setMaxWait(1000*60); //超时回收时间    
  34.   
  35. fac=new DataSourceConnectionFactory(bds); //得到连接工厂    
  36.   
  37. Connection conn=fac.createConnection(); //从池中获得连接    
  38.   
  39. conn.close(); //释放连接,回到池中    
  40.   
  41.   
  42.   
  43. //销毁连接池    
  44.   
  45. bds.close();    
  46. bds=null;    
  47. fac=null;   
Java代码  
  1. import java.sql.*;   
  2.   
  3. import com.gwnet.games.antiLord.util.*;   
  4.   
  5. import org.apache.commons.dbcp.ConnectionFactory;   
  6.   
  7. import org.apache.commons.dbcp.BasicDataSource;   
  8.   
  9. import org.apache.commons.dbcp.DataSourceConnectionFactory;   
  10.   
  11.   
  12.   
  13. private static BasicDataSource bds=new BasicDataSource();   
  14.   
  15. private static ConnectionFactory fac=null;   
  16.   
  17.   
  18.   
  19. //初始化连接池   
  20.   
  21. bds.setDriverClassName(“org.postgresql.Driver”); //数据库驱动程序   
  22.   
  23. bds.setUrl(“jdbc:postgresql://localhost:5432/myDB”); //数据库url   
  24.   
  25. bds.setUsername(“postgres”); //dba帐号   
  26.   
  27. bds.setPassword(“XXXXXXXX”); //密码   
  28.   
  29. bds.setInitialSize(100); //初始化连接数量   
  30.   
  31. bds.setMaxIdle(10); //最大idle数   
  32.   
  33. bds.setMaxWait(1000*60); //超时回收时间   
  34.   
  35. fac=new DataSourceConnectionFactory(bds); //得到连接工厂   
  36.   
  37. Connection conn=fac.createConnection(); //从池中获得连接   
  38.   
  39. conn.close(); //释放连接,回到池中   
  40.   
  41.   
  42.   
  43. //销毁连接池   
  44.   
  45. bds.close();   
  46. bds=null;   
  47. fac=null;   


七、Commons DbUtils 

[url]http://jakarta.apache.org/commons/dbutils/ [/url] 

说明:我以前在写数据库程序的时候,往往把数据库操作单独做一个包。DbUtils就是这样一个工具,以后开发不用再重复这样的工作了。值得一体的是,这个工具并不是现在流行的OR-Mapping工具(比如Hibernate),只是简化数据库操作,比如 

Java代码 
  1. QueryRunner run = new QueryRunner(dataSource);    
  2.   
  3. // Execute the query and get the results back from the handler    
  4. Object[] result = (Object[]) run.query("SELECT * FROM Person WHERE name=?", "John Doe");   
Java代码  
  1. QueryRunner run = new QueryRunner(dataSource);   
  2.   
  3. // Execute the query and get the results back from the handler   
  4. Object[] result = (Object[]) run.query("SELECT * FROM Person WHERE name=?", "John Doe");   


八、Commons FileUpload 

[url]http://jakarta.apache.org/commons/fileupload/ [/url] 

说明:jsp的上传文件功能怎么做呢? 

使用示例: 

Java代码 
  1. // Create a factory for disk-based file items    
  2. FileItemFactory factory = new DiskFileItemFactory();    
  3. // Create a new file upload handler    
  4. ServletFileUpload upload = new ServletFileUpload(factory);    
  5.   
  6. // Parse the request    
  7. List /* FileItem */ items = upload.parseRequest(request);    
  8. // Process the uploaded items    
  9. Iterator iter = items.iterator();    
  10. while (iter.hasNext()) {    
  11. FileItem item = (FileItem) iter.next();    
  12. if (item.isFormField()) {    
  13. processFormField(item);    
  14. } else {    
  15. processUploadedFile(item);    
  16. }    
  17. }   
Java代码  
  1. // Create a factory for disk-based file items   
  2. FileItemFactory factory = new DiskFileItemFactory();   
  3. // Create a new file upload handler   
  4. ServletFileUpload upload = new ServletFileUpload(factory);   
  5.   
  6. // Parse the request   
  7. List /* FileItem */ items = upload.parseRequest(request);   
  8. // Process the uploaded items   
  9. Iterator iter = items.iterator();   
  10. while (iter.hasNext()) {   
  11. FileItem item = (FileItem) iter.next();   
  12. if (item.isFormField()) {   
  13. processFormField(item);   
  14. } else {   
  15. processUploadedFile(item);   
  16. }   
  17. }   


九、Commons HttpClient 

[url]http://jakarta.apache.org/commons/httpclient/ [/url] 

说明:这个工具可以方便通过编程的方式去访问网站。 

使用示例:最简单的Get操作 

Java代码 
  1. GetMethod get = new GetMethod("http://jakarta.apache.org");    
  2.   
  3. // execute method and handle any error responses.    
  4.   
  5. ...    
  6.   
  7. InputStream in = get.getResponseBodyAsStream();    
  8. // Process the data from the input stream.    
  9. get.releaseConnection();   
Java代码  
  1. GetMethod get = new GetMethod("http://jakarta.apache.org");   
  2.   
  3. // execute method and handle any error responses.   
  4.   
  5. ...   
  6.   
  7. InputStream in = get.getResponseBodyAsStream();   
  8. // Process the data from the input stream.   
  9. get.releaseConnection();   



十、Commons IO 

[url]http://jakarta.apache.org/commons/io/ [/url] 

说明:可以看成是java.io的扩展,我觉得用起来非常方便。 

使用示例: 

1.读取Stream 

标准代码: 

Java代码 
  1. InputStream in = new URL( "http://jakarta.apache.org" ).openStream();    
  2. try {    
  3. InputStreamReader inR = new InputStreamReader( in );    
  4. BufferedReader buf = new BufferedReader( inR );    
  5. String line;    
  6. while ( ( line = buf.readLine() ) != null ) {    
  7. System.out.println( line );    
  8. }    
  9. } finally {    
  10. in.close();    
  11. }   
Java代码  
  1. InputStream in = new URL( "http://jakarta.apache.org" ).openStream();   
  2. try {   
  3. InputStreamReader inR = new InputStreamReader( in );   
  4. BufferedReader buf = new BufferedReader( inR );   
  5. String line;   
  6. while ( ( line = buf.readLine() ) != null ) {   
  7. System.out.println( line );   
  8. }   
  9. } finally {   
  10. in.close();   
  11. }   


使用IOUtils 

Java代码 
  1. InputStream in = new URL( "http://jakarta.apache.org" ).openStream();    
  2. try {    
  3. System.out.println( IOUtils.toString( in ) );    
  4. } finally {    
  5. IOUtils.closeQuietly(in);    
  6. }   
Java代码  
  1. InputStream in = new URL( "http://jakarta.apache.org" ).openStream();   
  2. try {   
  3. System.out.println( IOUtils.toString( in ) );   
  4. } finally {   
  5. IOUtils.closeQuietly(in);   
  6. }   



2.读取文件 

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


3.察看剩余空间 

Java代码 
  1. long freeSpace = FileSystemUtils.freeSpace("C:/");   
Java代码  
  1. long freeSpace = FileSystemUtils.freeSpace("C:/");   



十一、Commons JXPath 

[url]http://jakarta.apache.org/commons/jxpath/ [/url] 

说明:Xpath你知道吧,那么JXpath就是基于Java对象的Xpath,也就是用Xpath对Java对象进行查询。这个东西还是很有想像力的。 

使用示例: 

Java代码 
  1. Address address = (Address)JXPathContext.newContext(vendor).    
  2. getValue("locations[address/zipCode='90210']/address");   
Java代码 
  1. Address address = (Address)JXPathContext.newContext(vendor).   
  2. getValue("locations[address/zipCode='90210']/address");   



上述代码等同于 

Java代码 
  1. Address address = null;    
  2. Collection locations = vendor.getLocations();    
  3. Iterator it = locations.iterator();    
  4. while (it.hasNext()){    
  5. Location location = (Location)it.next();    
  6. String zipCode = location.getAddress().getZipCode();    
  7. if (zipCode.equals("90210")){    
  8. address = location.getAddress();    
  9. break;    
  10. }    
  11. }   
Java代码  
  1. Address address = null;   
  2. Collection locations = vendor.getLocations();   
  3. Iterator it = locations.iterator();   
  4. while (it.hasNext()){   
  5. Location location = (Location)it.next();   
  6. String zipCode = location.getAddress().getZipCode();   
  7. if (zipCode.equals("90210")){   
  8. address = location.getAddress();   
  9. break;   
  10. }   
  11. }   



十二、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代码 
  1. TelnetClient telnet = new TelnetClient();    
  2. telnet.connect( "192.168.1.99", 23 );    
  3. InputStream in = telnet.getInputStream();    
  4. PrintStream out = new PrintStream( telnet.getOutputStream() );    
  5. ...    
  6. telnet.close();   
Java代码  
  1. TelnetClient telnet = new TelnetClient();   
  2. telnet.connect( "192.168.1.99", 23 );   
  3. InputStream in = telnet.getInputStream();   
  4. PrintStream out = new PrintStream( telnet.getOutputStream() );   
  5. ...   
  6. telnet.close();   



十六、Commons Validator 

[url]http://jakarta.apache.org/commons/validator/ [/url] 

说明:用来帮助进行验证的工具。比如验证Email字符串,日期字符串等是否合法。 

使用示例: 

Java代码 
  1. // Get the Date validator    
  2. DateValidator validator = DateValidator.getInstance();    
  3. // Validate/Convert the date    
  4. Date fooDate = validator.validate(fooString, "dd/MM/yyyy");    
  5. if (fooDate == null) {    
  6. // error...not a valid date    
  7. return;    
  8. }   
Java代码  
  1. // Get the Date validator   
  2. DateValidator validator = DateValidator.getInstance();   
  3. // Validate/Convert the date   
  4. Date fooDate = validator.validate(fooString, "dd/MM/yyyy");   
  5. if (fooDate == null) {   
  6. // error...not a valid date   
  7. return;   
  8. }   



十七、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代码 
  1. // Locate the Jar file    
  2. FileSystemManager fsManager = VFS.getManager();    
  3. FileObject jarFile = fsManager.resolveFile( "jar:lib/aJarFile.jar" );    
  4.   
  5. // List the children of the Jar file    
  6. FileObject[] children = jarFile.getChildren();    
  7. System.out.println( "Children of " + jarFile.getName().getURI() );    
  8. for ( int i = 0; i < children.length; i++ ){    
  9. System.out.println( children[ i ].getName().getBaseName() );    
  10. }   
Java代码  
  1. // Locate the Jar file   
  2. FileSystemManager fsManager = VFS.getManager();   
  3. FileObject jarFile = fsManager.resolveFile( "jar:lib/aJarFile.jar" );   
  4.   
  5. // List the children of the Jar file   
  6. FileObject[] children = jarFile.getChildren();   
  7. System.out.println( "Children of " + jarFile.getName().getURI() );   
  8. for ( int i = 0; i < children.length; i++ ){   
  9. System.out.println( children[ i ].getName().getBaseName() );   
  10. }   



从smb读取文件 

Java代码 
  1. StaticUserAuthenticator auth = new StaticUserAuthenticator("username", "password", null);    
  2. FileSystemOptions opts = new FileSystemOptions();    
  3. DefaultFileSystemConfigBuilder.getInstance().setUserAuthenticator(opts, auth);    
  4. FileObject fo = VFS.getManager().resolveFile("smb://host/anyshare/dir", opts);  
Java代码  
  1. StaticUserAuthenticator auth = new StaticUserAuthenticator("username", "password", null);   
  2. FileSystemOptions opts = new FileSystemOptions();   
  3. DefaultFileSystemConfigBuilder.getInstance().setUserAuthenticator(opts, auth);   
  4. 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代码 
  1. SimpleEmail email = new SimpleEmail();    
  2. //smtp host    
  3. email.setHostName("mail.test.com");    
  4. //登陆邮件服务器的用户名和密码    
  5. email.setAuthentication("test","testpassword");    
  6. //接收人    
  7. email.addTo("jdoe@somewhere.org", "John Doe");    
  8. //发送人    
  9. email.setFrom("me@apache.org", "Me");    
  10. //标题    
  11. email.setSubject("Test message");    
  12. //邮件内容    
  13. email.setMsg("This is a simple test of commons-email");    
  14. //发送    
  15. email.send();   
Java代码  
  1. SimpleEmail email = new SimpleEmail();   
  2. //smtp host   
  3. email.setHostName("mail.test.com");   
  4. //登陆邮件服务器的用户名和密码   
  5. email.setAuthentication("test","testpassword");   
  6. //接收人   
  7. email.addTo("jdoe@somewhere.org", "John Doe");   
  8. //发送人   
  9. email.setFrom("me@apache.org", "Me");   
  10. //标题   
  11. email.setSubject("Test message");   
  12. //邮件内容   
  13. email.setMsg("This is a simple test of commons-email");   
  14. //发送   
  15. email.send();   



发送文本格式,带附件邮件: 
================== 

Java代码 
  1. //附件,可以定义多个附件对象    
  2. EmailAttachment attachment = new EmailAttachment();    
  3. attachment.setPath("e:\\1.pdf");    
  4. attachment.setDisposition(EmailAttachment.ATTACHMENT);    
  5. attachment.setDescription("Picture of John");    
  6. //    
  7. MultiPartEmail email = new MultiPartEmail();    
  8. //smtp host    
  9. email.setHostName("mail.test.com");    
  10. //登陆邮件服务器的用户名和密码    
  11. email.setAuthentication("test","testpassword");    
  12. //接收人    
  13. email.addTo("jdoe@somewhere.org", "John Doe");    
  14. //发送人    
  15. email.setFrom("me@apache.org", "Me");    
  16. //标题    
  17. email.setSubject("Test message");    
  18. //邮件内容    
  19. email.setMsg("This is a simple test of commons-email");    
  20. //添加附件    
  21. email.attach(attachment);    
  22. //发送    
  23. email.send();   
Java代码  
  1. //附件,可以定义多个附件对象   
  2. EmailAttachment attachment = new EmailAttachment();   
  3. attachment.setPath("e:\\1.pdf");   
  4. attachment.setDisposition(EmailAttachment.ATTACHMENT);   
  5. attachment.setDescription("Picture of John");   
  6. //   
  7. MultiPartEmail email = new MultiPartEmail();   
  8. //smtp host   
  9. email.setHostName("mail.test.com");   
  10. //登陆邮件服务器的用户名和密码   
  11. email.setAuthentication("test","testpassword");   
  12. //接收人   
  13. email.addTo("jdoe@somewhere.org", "John Doe");   
  14. //发送人   
  15. email.setFrom("me@apache.org", "Me");   
  16. //标题   
  17. email.setSubject("Test message");   
  18. //邮件内容   
  19. email.setMsg("This is a simple test of commons-email");   
  20. //添加附件   
  21. email.attach(attachment);   
  22. //发送   
  23. email.send();   



发送HTML格式带附件邮件: 
================= 

Java代码 
  1. //附件,可以定义多个附件对象    
  2. EmailAttachment attachment = new EmailAttachment();    
  3. attachment.setPath("e:\\1.pdf");    
  4. attachment.setDisposition(EmailAttachment.ATTACHMENT);    
  5. attachment.setDescription("Picture of John");    
  6. //    
  7. HtmlEmail email = new HtmlEmail ();    
  8. //smtp host    
  9. email.setHostName("mail.test.com");    
  10. //登陆邮件服务器的用户名和密码    
  11. email.setAuthentication("test","testpassword");    
  12. //接收人    
  13. email.addTo("jdoe@somewhere.org", "John Doe");    
  14. //发送人    
  15. email.setFrom("me@apache.org", "Me");    
  16. //标题    
  17. email.setSubject("Test message");    
  18. //邮件内容    
  19. email.setHtmlMsg("This is a simple test of commons-email");    
  20. //添加附件    
  21. email.attach(attachment);    
  22. //发送   
Java代码  
  1. //附件,可以定义多个附件对象   
  2. EmailAttachment attachment = new EmailAttachment();   
  3. attachment.setPath("e:\\1.pdf");   
  4. attachment.setDisposition(EmailAttachment.ATTACHMENT);   
  5. attachment.setDescription("Picture of John");   
  6. //   
  7. HtmlEmail email = new HtmlEmail ();   
  8. //smtp host   
  9. email.setHostName("mail.test.com");   
  10. //登陆邮件服务器的用户名和密码   
  11. email.setAuthentication("test","testpassword");   
  12. //接收人   
  13. email.addTo("jdoe@somewhere.org", "John Doe");   
  14. //发送人   
  15. email.setFrom("me@apache.org", "Me");   
  16. //标题   
  17. email.setSubject("Test message");   
  18. //邮件内容   
  19. email.setHtmlMsg("This is a simple test of commons-email");   
  20. //添加附件   
  21. email.attach(attachment);   
  22. //发送   


十九、 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代码 
  1. //生成一个digester。主要需要引进commons-logging.jar、commons-collections.jar、commons- beanutils.jar    
  2. Digester digester = new Digester();    
  3.   
  4. //设置对XML文档资料是否进行DTD验证    
  5. digester.setValidating( false );    
  6.   
  7. //当遇见 catalog 元素的时候,产生一个Catalog对象    
  8. digester.addObjectCreate( "catalog", Catalog.class );    
  9.   
  10. //当遇见 catalog 元素下面的book的时候,产生一个Book对象    
  11. digester.addObjectCreate( "catalog/book", Book.class );    
  12. // 当遇见 catalog 元素下面的book的author时候,调用author属性的Set方法    
  13. digester.addBeanPropertySetter( "catalog/book/author", "author" );    
  14. digester.addBeanPropertySetter( "catalog/book/title", "title" );    
  15. //当再一次遇见 catalog 元素下面的book的时候,调用catalog类的addBook()方法    
  16. digester.addSetNext( "catalog/book", "addBook" );    
  17.   
  18. digester.addObjectCreate( "catalog/magazine", Magazine.class );    
  19. digester.addBeanPropertySetter( "catalog/magazine/name", "name" );    
  20.   
  21. digester.addObjectCreate( "catalog/magazine/article", Article.class );    
  22. //addSetProperties()是将对应元素的属性赋值。    
  23. digester.addSetProperties( "catalog/magazine/article", "page", "page" );    
  24. digester.addBeanPropertySetter( "catalog/magazine/article/headline" );    
  25. digester.addSetNext( "catalog/magazine/article", "addArticle" );    
  26.   
  27. digester.addSetNext( "catalog/magazine", "addMagazine" );    
  28. \Digester\\catalog.xml"为XML文档    
  29. File input = new File( "F:\\Digester\\catalog.xml" );    
  30. Catalog c = (Catalog)digester.parse( input );    
  31. System.out.println( c.toString() );
Java 使用 commons-net 包实现 FTP 服务器的文件上传和下载 前言 由于业务需求,需要实现 ftp server 的文件上传和下载功能。于是便借助了 apache 的一个工具包 commons-net。使用起来很简单,但是有些细节比较坑,特此说明一下。 使用 第三方包的核心工具类是 FTPClient ,不管是文件上传还是文件下载,都要进行连接和登录,具体会在代码中体现出来。 准备工作 引入 maven 依赖 <dependency> &... 阅读详情

相关推荐

全面解析Apache Commons库的常用jar包

在IT开发领域,是一个非常著名的开源项目,它包含了一系列用于处理Java开发中常见的问题的实用工具库。这个项目由Apache软件基金会维护,旨在通过提供通用的实用工具类,简化Java开发者的工作,让开发者能够专注于业务逻辑的实现,而不是重复编写通用代码。Apache Commons涵盖了多个不同的子项目,每一个子项目都致力于解决特定的问题领域。其中,一些比较著名的子项目包括:Commons IO:提供了一系列用于文件操作的实用工具类,比如文件复制、移动、删除和搜索等功能。

weixin_35835030的博客 969

Apache Commons Net 实现 FTP 文件上传、文件下载、删除、同步

Table of Contents 本文导读 commons-net 简述 开发包获取 Maven 依赖 环境准备 新建项目 项目设置 pom. xml 依赖 FTP 常见操作 FTP 连接 单个文件下载 文件目录下载 上传文件/目录 文件同步 删除文件/目录 完整类文件 FTPUtil FileWmxUtil 本文导读 查看本文之前,可以先了解《FTP ...

蚩尤后裔-汪茂雄 3万+

Java通过Apache提供的Commons Email工具类实现邮箱发送验证码

Java通过Apache提供的Commons Email工具类实现邮箱发送验证码功能,代码附详细注释文本,实现方法中附有验证码生成方法

基于commons-net实现ftp创建文件夹、上传、下载功能.

commons-net 概述 与 下载 1、Apache 官方说明地址:http://commons.apache.org/proper/commons-net/index.html 2、Apache 的 common-net 是 commos 顶级项目下一个非常强大的用于网络编程的子项目 FtpClientUtil ​ package com.demo.ftp; import java.io.FileInputStream; import java.io.FileOutputStream;

赵广陆 2148

采用LM324输出方波、正弦波、三角波

介绍以LM324运放芯片为核心,设计电路连接,实现三角波转化为正弦波,再由正弦波转化为方波输出的简易函数信号发生器的基本功能。本文介绍通过使用NI Multisim 14.0软件仿真模拟搭建所设计的电路,再使用这个软件的示波器进行仿真输出三角波,正弦波,方波。使用软件进行仿真后再到实验室进行调试,将其接入电源,并通过在显示器上观察波形以及数据,得到结果。该电路结构简单,信号的幅度、频率等参数可调,在仿真软件和实验室检测都有较好的性能输出,可替代实验室标准的函数信号发生器完成一般的实验要求。

qq_48771816的博客 7万+

RK3588 C-PHY摄像头驱动升级踩坑记:从‘Only CSI2 supported’报错到成功取流

本文详细记录了在RK3588平台上调试C-PHY摄像头驱动的全过程,从‘Only CSI2 supported’报错分析到成功取流。内容涵盖C-PHY与CSI-2协议差异、SDK版本对比、V4L2框架下的bus-type解析机制,以及硬件排查与寄存器调优实战经验,为嵌入式Camera驱动工程师提供宝贵参考。

weixin_42522374的博客 125

Apache组件commons的MultiHashMap的一对多集合用法

1 此实例需要导入两个jar包 一个是long包,导入StringUtils 一个是Collections包,导入MultiHashMap 具体实例: package com.commons.collection; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator;

有 prepare , No out 4190

树莓派5新手必看:保姆级ibus中文输入法安装与配置全流程(含.bashrc设置避坑)

本文详细介绍了在树莓派5上安装和配置ibus中文输入法的完整流程,包括系统环境准备、ibus框架安装、图形界面配置及常见问题解决方案。通过清晰的步骤说明和避坑指南,帮助新手快速实现中文输入功能,提升开发效率。

weixin_29159441的博客 532

Apache Commons工具类库使用整理

Apache Commons 工具类库分类 - commons-lang3 - commons-io - commons-pool2 - commons-codec - commons-collections4 - commons-math3 - commons-compress - commons-net - commons-csv - commons-configuration2 - commons-text

骑个小蜗牛的博客 2677

CAPL 中的变量类型详解与应用

CAPL 中的变量类型详解与应用

qq_42268594的博客 1449

Python爬招聘网站:Selenium+ActionChains破解滑动验证码,批量采集岗位数据(新手可跑)

通过本文实战,你不仅学会了用Selenium+ActionChains破解滑动验证码,还掌握了爬虫的核心优化思路——“模拟人类行为”是突破反爬的关键。这套逻辑不仅适用于招聘网站,还能迁移到其他有滑动验证码的平台(如电商、资讯网站)。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1188

Java 的 Apache Commons 工具库 助力开发

Java 开发中,Apache Commons 是一个不可或缺的工具库。它简化了开发过程,为日常编程提供了大量实用的功能扩展。

码刀攻城 2532

matlab 显示曲面网格【2025最新版】

matlab点云工具箱对点云三维重建结果显示的函数。博客长期更新,本文最近更新时间为:2025年9月14日。

点云侠的博客 2581

apache commons常用方法

Apache Commons 是一套由 Apache 基金会维护的开源 Java 工具集,包含多个实用组件。主要组件包括:Lang(基本对象操作)、Collections(集合扩展)、IO(文件操作)、Codec(编码处理)等。这些工具简化了开发中常见任务,如StringUtils.isNotBlank()替代空判断、FileUtils.readFileToString()简化文件读取、CollectionUtils.filter()实现集合过滤等。该工具集经过20年生产验证,稳定性高,能有效避免重复造轮子

Lifelong learning 1110

【WRF-Chem教程第四期上】运行 WRF-Chem 模型

完整介绍运行 WRF-Chem 模型的详细步骤

WW、forever的博客 3114

Autosar入门_OS_5

os hook函数说明

u012406840的博客 401

apache commons组件地址

地址:  http://commons.apache.org/components.html apache commons组件都很有用,可以经常去看看。

可口可乐的博客 431

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Apache Commons Collections 教程

Apache Commons Collections 是一个强大的Java库,扩展了Java集合框架的功能。自从JDK 1.2引入集合框架以来,它已成为处理集合的标准工具箱。Commons Collections提供了许多高级接口和实现,包括但不限于Bag(允许每个对象有多个副本)、BidiMap(支持双向查找,即通过值到键和键到值的映射)、MapIterator等。此外,它还包括变换装饰器、复合

gitblog_00234的博客 407

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Apache Commons Collections组件介绍使用

Commons Collections组件介绍使用介绍其实Java JDK已经提供了丰富的集合操作,但是在某些场合下,可能无法满足,apache commons组件提供了更加丰富的集数据结构。其实collections下实现的数据结构都是基于JDK已有数据结构的扩展和补充,掌握好JDK的基础集合框架才是重点。 如果在新项目中药使用集合扩展组件,我推荐使用google guava或不适用扩展组件,我觉

小白成长记录 7521

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

【源码阅读】Apache Commons DbUtils 阅读第一天

最近有幸用到apache Commons    下的DbUtils组件,进而研究了一下其源码,现把阅读过程中的一些感想记录下来,以供参考!!! 一:介绍 Commons Dbutils 是一个操作数据库的组件,原则上这不能说是一个持久层框架,它提供了一些Jdbc的操作封装来简化数据查询和记录读取操作。如果大家需要其源码的话,可以通过以下地址下载:http://commons.apac

冷冷的博客 2372

apache commons 下载

[url]http://archive.apache.org/dist/commons/[/url]

macleo的路 83

Apache-Commons家族的八兄弟(下)

Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动。篇幅很长所以拆分为两篇。 组件 功能介绍 Utility classes 包括一些静态方法来执行常用任务 Input  InputStream 和 Reader 实现 ...

KHOST的博客 595

apache.commons

根据官网上的介绍,apache.commons是一个专注于各方面高复用的java组件项目。个人觉得,只要是做java项目的,多多少少会用到apache.commons包。 apache.commons包分成三部分: The Commons Proper - A repository of reusable Java components. 高度复用的java组件库The Commons

xiaotianhxf的专栏 705
上一篇: Eclipse 代码自动补全功能设置
下一篇: EL表达式语言
weixir123
博客等级 码龄16年 1粉丝 207原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值