最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java常用類庫Apache Commons工具類說明及使用實例詳解

 更新時間:2020年02月20日 09:20:27   作者:挽星  
這篇文章主要介紹了Java常用類庫Apache Commons工具類說明及使用實例詳解,需要的朋友可以參考下

Apache Commons包含了很多開源的工具,用于解決平時編程經(jīng)常會遇到的問題,減少重復(fù)勞動。下面是我這幾年做開發(fā)過程中自己用過的工具類做簡單介紹。

組件 功能介紹
BeanUtils 提供了對于JavaBean進(jìn)行各種操作,克隆對象,屬性等等.
Betwixt XML與Java對象之間相互轉(zhuǎn)換.
Codec 處理常用的編碼方法的工具類包 例如DES、SHA1、MD5、Base64等.
Collections java集合框架操作.
Compress java提供文件打包 壓縮類庫.
Configuration 一個java應(yīng)用程序的配置管理類庫.
DBCP 提供數(shù)據(jù)庫連接池服務(wù).
DbUtils 提供對jdbc 的操作封裝來簡化數(shù)據(jù)查詢和記錄讀取操作.
Email java發(fā)送郵件 對javamail的封裝.
FileUpload 提供文件上傳功能.
HttpClien 提供HTTP客戶端與服務(wù)器的各種通訊操作. 現(xiàn)在已改成HttpComponents
IO io工具的封裝.
Lang Java基本對象方法的工具類包 如:StringUtils,ArrayUtils等等.
Logging 提供的是一個Java 的日志接口.
Validator 提供了客戶端和服務(wù)器端的數(shù)據(jù)驗證框架.

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é)點名,Betwixt將自己猜測是什么 
      // 但是讓我們將例子Bean名作為根節(jié)點吧 
      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′ ?> <person><age>25</age><name>James Smith</name></person>"); 
      //創(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<String> list1 = new ArrayList<String>(); 
      list1.add("1"); 
      list1.add("2"); 
      list1.add("3"); 
      List<String> list2 = new ArrayList<String>(); 
      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

 用來幫助處理配置文件的,支持很多種存儲方式。

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的簡單例子 
  # 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 < results.size(); 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 < results.size(); 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 < s.length; 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ù)點和 請注意。 
    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("<html>")); 
      //輸出結(jié)果為&lt;html&gt; 
      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ù)驗證框架。 

 驗證日期

// 獲取日期驗證 
     DateValidator validator = DateValidator.getInstance(); 
   
     // 驗證/轉(zhuǎn)換日期 
     Date fooDate = validator.validate(fooString, "dd/MM/yyyy"); 
     if (fooDate == null) { 
       // 錯誤 不是日期 
       return; 
     }

表達(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");

配置文件中使用驗證

<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>

驗證類

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(); 
}

至此我們?yōu)榇蠹液唵谓榻B了Java常用類庫Apache Commons工具類說明及使用實例更多Java常用類庫請查看下面的相關(guān)鏈接

相關(guān)文章

  • Java中的String、StringBuilder、StringBuffer三者的區(qū)別詳解

    Java中的String、StringBuilder、StringBuffer三者的區(qū)別詳解

    這篇文章主要介紹了Java中的String、StringBuilder、StringBuffer三者的區(qū)別詳解,就是String,StringBuilder以及StringBuffer這三個類之間有什么區(qū)別呢,自己從網(wǎng)上搜索了一些資料,有所了解了之后在這里整理一下,便于大家觀看,需要的朋友可以參考下
    2023-12-12
  • spring整合struts2過程詳解

    spring整合struts2過程詳解

    這篇文章主要介紹了spring整合struts2過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-01-01
  • Jenkin郵件收發(fā)實現(xiàn)原理及過程詳解

    Jenkin郵件收發(fā)實現(xiàn)原理及過程詳解

    這篇文章主要介紹了Jenkin郵件收發(fā)實現(xiàn)原理及過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-09-09
  • MyBatisPlus的簡介及案例詳解

    MyBatisPlus的簡介及案例詳解

    MyBatisPlus(簡稱MP)是基于MyBatis框架基礎(chǔ)上開發(fā)的增強(qiáng)型工具,旨在簡化開發(fā)、提高效率。本文將為大家詳細(xì)介紹一下MyBatisPlus是使用,需要的可以參考一下
    2022-07-07
  • 詳解Spring 基于 Aspect 注解的增強(qiáng)實現(xiàn)

    詳解Spring 基于 Aspect 注解的增強(qiáng)實現(xiàn)

    本篇文章主要介紹了詳解Spring 基于 Aspect 注解的增強(qiáng)實現(xiàn),非常具有實用價值,需要的朋友可以參考下
    2017-04-04
  • IDEA插件開發(fā)注冊菜單之向主菜單注冊菜單項目

    IDEA插件開發(fā)注冊菜單之向主菜單注冊菜單項目

    這篇文章主要介紹了IDEA插件開發(fā)注冊菜單之向主菜單注冊菜單項目,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • Java實現(xiàn)簡單控制臺版ATM系統(tǒng)

    Java實現(xiàn)簡單控制臺版ATM系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了Java實現(xiàn)簡單控制臺版ATM系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • java交換排序之雞尾酒排序?qū)崿F(xiàn)方法

    java交換排序之雞尾酒排序?qū)崿F(xiàn)方法

    這篇文章主要介紹了java交換排序之雞尾酒排序?qū)崿F(xiàn)方法,實例分析了排序的原理與相關(guān)的實現(xiàn)技巧,需要的朋友可以參考下
    2015-02-02
  • Java中強(qiáng)引用,軟引用,弱引用概念解析

    Java中強(qiáng)引用,軟引用,弱引用概念解析

    這篇文章主要介紹了Java中強(qiáng)引用,軟引用,弱引用概念解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-03-03
  • 關(guān)閉支付寶小額免密支付步驟詳解

    關(guān)閉支付寶小額免密支付步驟詳解

    支付寶現(xiàn)在作為我們?nèi)粘I钪凶畛S玫膽?yīng)用之一,已經(jīng)成為了人們的虛擬錢包。但是最近,有人發(fā)現(xiàn)了支付寶的一個漏洞,本文將對如何關(guān)閉小額免密支付進(jìn)行步驟介紹。下面跟著小編一起來看下吧
    2017-01-01

最新評論

新巴尔虎左旗| 麻城市| 澳门| 清水县| 博爱县| 桑日县| 赤城县| 潜山县| 昌图县| 天峻县| 崇左市| 蒙山县| 五寨县| 班玛县| 威海市| 陵川县| 舒城县| 手机| 龙岩市| 思茅市| 平阳县| 普定县| 大厂| 甘孜| 鄂托克前旗| 彰武县| 桑植县| 聂荣县| 拉孜县| 从化市| 新泰市| 溧水县| 呼伦贝尔市| 冷水江市| 元氏县| 山西省| 方山县| 德钦县| 阳春市| 衡山县| 葵青区|