天天看點

java-類庫-Apache Commons

   Apache Commons包含了很多開源的工具,用于解決平時程式設計經常會遇到的問題,減少重複勞動。下面是我這幾年做開發過程中自己用過的工具類做簡單介紹。

元件

功能介紹

BeanUtils

提供了對于JavaBean進行各種操作,克隆對象,屬性等等.

Betwixt

XML與Java對象之間互相轉換.

Codec

處理常用的編碼方法的工具類包 例如DES、SHA1、MD5、Base64等.

Collections

java集合架構操作.

Compress

java提供檔案打包 壓縮類庫.

Configuration

一個java應用程式的配置管理類庫.

DBCP

提供資料庫連接配接池服務.

DbUtils

提供對jdbc 的操作封裝來簡化資料查詢和記錄讀取操作.

Email

java發送郵件 對javamail的封裝.

FileUpload

提供檔案上傳功能.

HttpClien

提供HTTP用戶端與伺服器的各種通訊操作. 現在已改成HttpComponents

IO

io工具的封裝.

Lang

Java基本對象方法的工具類包 如:StringUtils,ArrayUtils等等.

Logging

提供的是一個Java 的日志接口.

Validator

提供了用戶端和伺服器端的資料驗證架構.

1、BeanUtils 提供了對于JavaBean進行各種操作, 比如對象,屬性複制等等。

java-類庫-Apache Commons

//1、 克隆對象  

//  新建立一個普通Java Bean,用來作為被克隆的對象  

    public class Person {  

    private String name = "";  

    private String email = "";  

    private int age;  

    //省略 set,get方法  

    }  

//  再建立一個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) {  

    } catch (InvocationTargetException e) {  

    } catch (NoSuchMethodException e) {  

//  原理也是通過Java的反射機制來做的。  

//  2、 将一個Map對象轉化為一個Bean  

//  這個Map對象的key必須與Bean的屬性相對應。  

    Map map = new HashMap();  

    map.put("name","tom");  

    map.put("email","tom@");  

    map.put("age","21");  

    //将map轉化為一個Person對象  

    BeanUtils.populate(person,map);  

//  通過上面的一行代碼,此時person的屬性就已經具有了上面所賦的值了。  

//  将一個Bean轉化為一個Map對象了,如下:  

    Map map = BeanUtils.describe(person)  

2、Betwixt  XML與Java對象之間互相轉換。

java-類庫-Apache Commons

//1、 将JavaBean轉為XML内容  

    // 新建立一個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 + "']";  

    //再建立一個WriteApp類:  

    import java.io.StringWriter;  

    import org.apache.commons.betwixt.io.BeanWriter;  

    public class WriteApp {  

    * 建立一個例子Bean,并将它轉化為XML. 

    public static final void main(String [] args) throws Exception {  

        // 先建立一個StringWriter,我們将把它寫入為一個字元串         

        StringWriter outputWriter = new StringWriter();  

        // Betwixt在這裡僅僅是将Bean寫入為一個片斷  

        // 是以如果要想完整的XML内容,我們應該寫入頭格式  

        outputWriter.write(“<?xml version=’1.0′ encoding=’UTF-8′ ?>\n”);  

        // 建立一個BeanWriter,其将寫入到我們預備的stream中  

        BeanWriter beanWriter = new BeanWriter(outputWriter);  

        // 配置betwixt  

        // 更多詳情請參考java docs 或最新的文檔  

        beanWriter.getXMLIntrospector().getConfiguration().setAttributesForPrimitives(false);  

        beanWriter.getBindingConfiguration().setMapIDs(false);  

        beanWriter.enablePrettyPrint();  

        // 如果這個地方不傳入XML的根節點名,Betwixt将自己猜測是什麼  

        // 但是讓我們将例子Bean名作為根節點吧  

        beanWriter.write(“person”, new PersonBean(“John Smith”, 21));  

        //輸出結果  

        System.out.println(outputWriter.toString());  

        // Betwixt寫的是片斷而不是一個文檔,是以不要自動的關閉掉writers或者streams,  

        //但這裡僅僅是一個例子,不會做更多事情,是以可以關掉  

        outputWriter.close();  

//2、 将XML轉化為JavaBean  

    import java.io.StringReader;  

    import org.apache.commons.betwixt.io.BeanReader;  

    public class ReadApp {  

    public static final void main(String args[]) throws Exception{  

        // 先建立一個XML,由于這裡僅是作為例子,是以我們寫死了一段XML内容  

        StringReader xmlReader = new StringReader(  

        "<?xml version=’1.0′ encoding=’UTF-8′ ?> <person><age>25</age><name>James Smith</name></person>");  

        //建立BeanReader  

        BeanReader beanReader  = new BeanReader();  

        //配置reader  

        beanReader.getXMLIntrospector().getConfiguration().setAttributesForPrimitives(false);  

        beanReader.getBindingConfiguration().setMapIDs(false);  

        //注冊beans,以便betwixt知道XML将要被轉化為一個什麼Bean  

        beanReader.registerBeanClass("person", PersonBean.class);  

        //現在我們對XML進行解析  

        PersonBean person = (PersonBean) beanReader.parse(xmlReader);  

        System.out.println(person);  

3、Codec 提供了一些公共的編解碼實作,比如Base64, Hex, MD5,Phonetic and URLs等等。

java-類庫-Apache Commons

//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){  

        //str = Arrays.toString(Base64.decodeBase64(str));  

        str = new String(Base64.decodeBase64(str));  

        System.out.println("Base64 解碼後:"+str);  

4、Collections 對java.util的擴充封裝,處理資料還是挺靈活的。

org.apache.commons.collections – Commons Collections自定義的一組公用的接口和工具類

org.apache.commons.collections.bag – 實作Bag接口的一組類

org.apache.commons.collections.bidimap – 實作BidiMap系列接口的一組類

org.apache.commons.collections.buffer – 實作Buffer接口的一組類

org.apache.commons.collections.collection – 實作java.util.Collection接口的一組類

org.apache.commons.collections.comparators – 實作java.util.Comparator接口的一組類

org.apache.commons.collections.functors – Commons Collections自定義的一組功能類

org.apache.commons.collections.iterators – 實作java.util.Iterator接口的一組類

org.apache.commons.collections.keyvalue – 實作集合和鍵/值映射相關的一組類

org.apache.commons.collections.list – 實作java.util.List接口的一組類

org.apache.commons.collections.map – 實作Map系列接口的一組類

org.apache.commons.collections.set – 實作Set系列接口的一組類

java-類庫-Apache Commons

/** 

        * 得到集合裡按順序存放的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對調 

        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中的打包、壓縮類庫。 

java-類庫-Apache Commons

//建立壓縮對象  

    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

java-類庫-Apache Commons

//舉一個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對象池機制的資料庫連接配接池,Tomcat的資料源使用的就是DBCP。

java-類庫-Apache Commons

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 {  

        System.out.println("加載jdbc驅動");  

        Class.forName("oracle.jdbc.driver.OracleDriver");  

        } catch (ClassNotFoundException e) {  

        System.out.println("Done.");  

        //  

        System.out.println("設定資料源");  

        DataSource dataSource = setupDataSource("jdbc:oracle:thin:@localhost:1521:test");  

        Connection conn = null;  

        Statement stmt = null;  

        ResultSet rset = null;  

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

        } 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) {  

        //設定連接配接位址  

        ConnectionFactory connectionFactory = new DriverManagerConnectionFactory(  

                connectURI, null);  

        // 建立連接配接工廠  

        PoolableConnectionFactory poolableConnectionFactory = new PoolableConnectionFactory(  

                connectionFactory);  

        //擷取GenericObjectPool 連接配接的執行個體  

        ObjectPool connectionPool = new GenericObjectPool(  

                poolableConnectionFactory);  

        // 建立 PoolingDriver  

        PoolingDataSource dataSource = new PoolingDataSource(connectionPool);  

        return dataSource;  

}  

8、DbUtils Apache組織提供的一個資源JDBC工具類庫,它是對JDBC的簡單封裝,對傳統操作資料庫的類進行二次封裝,可以把結果集轉化成List。,同時也不影響程式的性能。

DbUtils類:啟動類

ResultSetHandler接口:轉換類型接口

MapListHandler類:實作類,把記錄轉化成List

BeanListHandler類:實作類,把記錄轉化成List,使記錄為JavaBean類型的對象

Qrery Runner類:執行SQL語句的類

java-類庫-Apache Commons

import org.apache.commons.dbutils.DbUtils;  

import org.apache.commons.dbutils.QueryRunner;  

import org.apache.commons.dbutils.handlers.BeanListHandler;  

import java.sql.DriverManager;  

import java.util.List;  

//轉換成list  

public class BeanLists {  

        String url = "jdbc:mysql://localhost:3306/ptest";  

        String jdbcDriver = "com.mysql.jdbc.Driver";  

        String user = "root";  

        String password = "ptest";  

        DbUtils.loadDriver(jdbcDriver);  

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

            DbUtils.closeQuietly(conn);  

public class Person{  

    private Integer id;  

    private String name;  

   //省略set, get方法  

import org.apache.commons.dbutils.handlers.MapListHandler;  

import java.util.Map;  

//轉換成map  

public class MapLists {  

            List results = (List) qr.query(conn, "select id,name from person", new MapListHandler());  

                Map map = (Map) results.get(i);  

                System.out.println("id:" + map.get("id") + ",name:" + map.get("name"));  

9、Email 提供的一個開源的API,是對javamail的封裝。

java-類庫-Apache Commons

//用commons email發送郵件  

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("[email protected]");  

        email.setSubject("TestMail");  

        email.setMsg("This is a test mail ... :-)");  

        email.addTo("[email protected]");  

        email.send();  

10、FileUpload java web檔案上傳功能。

java-類庫-Apache Commons

//官方示例:  

//* 檢查請求是否含有上傳檔案  

    // Check that we have a file upload request  

    boolean isMultipart = ServletFileUpload.isMultipartContent(request);  

    //現在我們得到了items的清單  

    //如果你的應用近于最簡單的情況,上面的處理就夠了。但我們有時候還是需要更多的控制。  

    //下面提供了幾種控制選擇:  

    // 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);  

    // 設定最大上傳大小  

    upload.setSizeMax(yourMaxRequestSize);  

    // 解析所有請求  

    List /* FileItem */ items = upload.parseRequest(request);  

    DiskFileItemFactory factory = new DiskFileItemFactory(  

            yourMaxMemorySize, yourTempDirectory);  

    //一旦解析完成,你需要進一步處理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);  

    //區分資料是否為簡單的表單資料,如果是簡單的資料:  

    // 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,我們通常要把它們寫入檔案,或轉為一個流  

    // Process a file upload  

    if (writeToFile) {  

        File uploadedFile = new File(...);  

        item.write(uploadedFile);  

    } else {  

        InputStream uploadedStream = item.getInputStream();  

        uploadedStream.close();  

    //或轉為位元組數組儲存在記憶體中:  

    // Process a file upload in memory  

    byte[] data = item.get();  

    //...省略步驟  

    //如果這個檔案真的很大,你可能會希望向使用者報告到底傳了多少到服務端,讓使用者了解上傳的過程  

    //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、HttpClien 基于HttpCore實 現的一個HTTP/1.1相容的HTTP用戶端,它提供了一系列可重用的用戶端身份驗證、HTTP狀态保持、HTTP連接配接管理module。

java-類庫-Apache Commons

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

        // 構造HttpClient的執行個體  

        HttpClient httpClient = new HttpClient();  

        // 建立GET方法的執行個體  

        GetMethod getMethod = new GetMethod("http://www.ibm.com");  

        // 使用系統提供的預設的恢複政策  

        getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,  

                new DefaultHttpMethodRetryHandler());  

            // 執行getMethod  

            int statusCode = httpClient.executeMethod(getMethod);  

            if (statusCode != HttpStatus.SC_OK) {  

                System.err.println("Method failed: "  

                        + getMethod.getStatusLine());  

            // 讀取内容  

            byte[] responseBody = getMethod.getResponseBody();  

            // 處理内容  

            System.out.println(new String(responseBody));  

        } catch (HttpException e) {  

            // 發生緻命的異常,可能是協定不對或者傳回的内容有問題  

            System.out.println("Please check your provided http address!");  

        } catch (IOException e) {  

            // 發生網絡異常  

            // 釋放連接配接  

            getMethod.releaseConnection();  

//POST方法  

import org.apache.commons.httpclient.methods.PostMethod;  

public class PostSample{  

        // 建立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);  

        // 執行postMethod  

        int statusCode = httpClient.executeMethod(postMethod);  

        // HttpClient對于要求接受後繼服務的請求,象POST和PUT等不能自動處理轉發  

        // 301或者302  

        if (statusCode == HttpStatus.SC_MOVED_PERMANENTLY ||   

        statusCode == HttpStatus.SC_MOVED_TEMPORARILY) {  

            // 從頭中取出轉向的位址  

            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的擴充 操作檔案非常友善。

java-類庫-Apache Commons

//1.讀取Stream  

//标準代碼:  

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  

    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 主要是一些公共的工具集合,比如對字元、數組的操作等等。

java-類庫-Apache Commons
java-類庫-Apache Commons

// 1 合并兩個數組: org.apache.commons.lang. ArrayUtils  

    // 有時我們需要将兩個數組合并為一個數組,用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 判斷該字元串是不是為數字(0~9)組成,如果是,傳回true 但該方法不識别有小數點和 請注意  

    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.五位的随機字母和數字  

       System.out.println(RandomStringUtils.randomAlphanumeric(5));  

       //7.StringEscapeUtils  

       System.out.println(StringEscapeUtils.escapeHtml("<html>"));  

       //輸出結果為<html>  

       System.out.println(StringEscapeUtils.escapeJava("String"));  

       //8.StringUtils,判斷是否是空格字元  

       System.out.println(StringUtils.isBlank("   "));  

       //将數組中的内容以,分隔  

       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 的日志接口,同時兼顧輕量級和不依賴于具體的日志實作工具。

java-類庫-Apache Commons

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 通用驗證系統,該元件提供了用戶端和伺服器端的資料驗證架構。 

 驗證日期

java-類庫-Apache Commons

// 擷取日期驗證  

      DateValidator validator = DateValidator.getInstance();  

      // 驗證/轉換日期  

      Date fooDate = validator.validate(fooString, "dd/MM/yyyy");  

      if (fooDate == null) {  

          // 錯誤 不是日期  

          return;  

表達式驗證

java-類庫-Apache Commons

// 設定參數  

      boolean caseSensitive = false;  

      String regex1   = "^([A-Z]*)(?:\\-)([A-Z]*)*$"  

      String regex2   = "^([A-Z]*)$";  

      String[] regexs = new String[] {regex1, regex1};  

      // 建立驗證  

      RegexValidator validator = new RegexValidator(regexs, caseSensitive);  

      // 驗證傳回boolean  

      boolean valid = validator.isValid("abc-def");  

      // 驗證傳回字元串  

      String result = validator.validate("abc-def");  

      // 驗證傳回數組  

      String[] groups = validator.match("abc-def");  

 配置檔案中使用驗證

java-類庫-Apache Commons

<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 name="nameForm">  

          <field property="firstName" depends="required">  

             <arg0 key="nameForm.firstname.displayname"/>  

          </field>  

          <field property="lastName" depends="required">  

             <arg0 key="nameForm.lastname.displayname"/>  

       </form>  

</form-validation>   

 驗證類

java-類庫-Apache Commons

 Excerpts from org.apache.commons.validator.RequiredNameTest  

//加載驗證配置檔案  

InputStream in = this.getClass().getResourceAsStream("validator-name-required.xml");  

ValidatorResources resources = new ValidatorResources(in);  

//這個是自己建立的bean 我這裡省略了  

Name name = new Name();  

Validator validator = new Validator(resources, "nameForm");  

//設定參數  

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

}