Jakarta Commons Cookbook

 
Cookbook就是工具書,應該是前年看的,在中關村看的影印版,全英文,本書主要講解了一下模塊:
  1. Core:BeanUtils,Lang,Collections,logging
  2. Db:DbUtils,DBCP,Pool
  3. IO: IO,
  4. XML vs Bean:betwixt,Digester,JXPath,Jelly
  5. 模版:EL, JEXL
  6. 通用:Codec,Id
  7. Web:FileUpload,httpClient
  8. 文件系統:VFS
apache的工具包幾乎是每一個java工程都用到了的,或是common或是log等等,建議編程一兩年的java開發人員熟知,這樣你的生產力將大大的提升。不少網頁上有各類總結,但我更喜歡系統性的看書,固然我看的時候已經編了四五年了,有種相逢恨晚的感受,因而如今個人eclipse工程裏多了全部這些開源工程最新的代碼,能夠遲到,不能錯過。
 

1.apache的commons工程包括了許多方便的工程能夠節省開發人員的時間,本書主要介紹了:BeanUtils,Betwixt,CLI,Codec,Collections,Configuretion,Digester,HttpClient,ID,IO,JEXL,JXPath,Lang,html

Logging,Math,Net,Log4j,Velocity,FreeMarker,Lucene,Slide
//-------------------------Lang----------------------------------
http://commons.apache.org/proper/commons-lang/javadocs/api-3.1/index.html
2.toString方法,ReflectionToStringBuilder.toString(obj)能夠按默認格式打印對象的內容,也能夠用toStringBuilder.append來設置打印的內容,並能夠設置ToStringBuilder的ToStringStyle。
3.hashCode方法,能夠用new HashCodeBuilder(17,37).append(firstName).append(lastName).toHashCode()方法來生成hashCode,若是要讓對象的全部field都做用於hashCode,能夠調用HashCodeBuilder.reflectionHashCode(obj).
4.isEquals方法,EqualsBuilder用法相似HashCodeBuilder,能夠用append(支持全部原始類型及對象,也支持數組比較元素),也能夠用reflectionEquals(this,obj)來比較對象的每一個field。
5.compareTo方法,用於排序或比較對象,CompareToBuilder.reflectionCompare(this,obj)比較的是對象的field,不考慮static field和transient field,注意若是是append(first,obj.first).append(last,obj.last).toComparison()方法,則有一個比較順序問題,是從最後一個append開始往前比較,只有當前比較的的結果相同時纔會比較前一個append的值。固然,若是要比較bean能夠用BeanComparator,更細緻的比較能夠chain Comparetor......
6.ArrayUtils實用方法簡介,具體可參考
       1.toString方法打印數組內容
        2.clone出徹底新的數組
        3.reverse反轉數組元素,Java提供的Collections.reverse參數是list
        4.clone方法,內部調用了java自帶的clone方法,只是對null作了判斷,若是是null則返回null
        5.toObject/toPrimitive方法提供了裝箱與拆箱方法,java1.5後用不上了
        6.contains/indexOf/lastIndexOf用於判斷某數是否在數組中以及查找其位置,對象比較內部使用的是object.equals方法
        7.toMap方法,能夠將一個二維數組轉換爲map,第二維的數組必須至少有兩個元素,第一個爲key,第二個爲value
7.日期操做函數,用DataFormatUtils的多種格式建立線程安全的FastDateFormat來替換java原生的線程不安全的SimpleDateFormat.通常來講Sun提供的全部format類好比SimpleDateFormat,MessageFormat,NumberFormat,DecimalFOrmat,CoiceFormat等都是線程不安全的,DateUtils提供的一下實用方法:
        1.靈活的set方法,方便設置年月日,時間等
        2.round四捨五入及ceil去尾數法
        3.turncate能夠清除到指定時間幅度的值,好比將2014-1-8 23:06:03 作小時truncate會到2014-1-8 23:00:00
8.Validate類能夠提供一些基本的爲空,非null,數組範圍,正則等,若是驗不過則拋出exception,能夠在方法中作斷言用,能夠配Range範圍類來作一些邊界等判斷
9.StopWatch方法能夠像秒錶同樣提供時間的準確計算,能夠用在程序耗時方面,固然用System.nanoTime也能夠來作,可是StopWatch提供的start,stop,split等方式更具可讀性。
10.StringUtils處理字符串,主要方法以下:
  • abbreviate 縮寫
  • IsEmpty/IsBlank - checks if a String contains text
  • Trim/Strip - removes leading and trailing whitespace,strip提供了豐富的截除部分字符串的功能
  • Equals - compares two strings null-safe
  • startsWith - check if a String starts with a prefix null-safe
  • endsWith - check if a String ends with a suffix null-safe
  • IndexOf/LastIndexOf/Contains - null-safe index-of checks
  • IndexOfAny/LastIndexOfAny/IndexOfAnyBut/LastIndexOfAnyBut - index-of any of a set of Strings
  • ContainsOnly/ContainsNone/ContainsAny - does String contains only/none/any of these characters
  • Substring/Left/Right/Mid - null-safe substring extractions
  • SubstringBefore/SubstringAfter/SubstringBetween - substring extraction relative to other strings
  • Split/Join - splits a String into an array of substrings and vice versa
  • repeat 克隆字符
  • Remove/Delete - removes part of a String
  • Replace/Overlay - Searches a String and replaces one String with another
  • Chomp/Chop - removes the last part of a String
  • LeftPad/RightPad/Center/Repeat - pads a String
  • UpperCase/LowerCase/SwapCase/Capitalize/Uncapitalize - changes the case of a String
  • CountMatches - counts the number of occurrences of one String in another
  • IsAlpha/IsNumeric/IsWhitespace/IsAsciiPrintable - checks the characters in a String
  • DefaultString - protects against a null input String
  • Reverse/ReverseDelimited - reverses a String
  • Abbreviate - abbreviates a string using ellipsis
  • Difference/indexOfDifference - compares Strings and reports on their differences
  • LevenshteinDistance - the number of changes needed to change one String into another
     
11.WordUtils提供對字符串大小寫轉換,縮寫等操做,方法capitalize/uncapitalize/swapCase/initials等
12 Lang All Classes :
AggregateTranslator ,AnnotationUtils ,ArrayUtils ,AtomicInitializer ,AtomicSafeInitializer ,BackgroundInitializer ,BasicThreadFactory ,BasicThreadFactory.Builder ,BitField ,BooleanUtils ,Builder ,CallableBackgroundInitializer ,CharEncoding ,CharSequenceTranslator ,CharSequenceUtils ,CharSet ,CharSetUtils ,CharUtils ,ClassUtils ,CloneFailedException ,CodePointTranslator ,CompareToBuilder ,CompositeFormat ,ConcurrentException ,ConcurrentInitializer ,ConcurrentRuntimeException ,ConcurrentUtils ,ConstantInitializer ,ConstructorUtils ,ContextedException ,ContextedRuntimeException ,DateFormatUtils ,DateUtils ,DefaultExceptionContext ,DurationFormatUtils ,EntityArrays ,EnumUtils ,EqualsBuilder ,EventListenerSupport ,EventUtils ,ExceptionContext ,ExceptionUtils ,ExtendedMessageFormat ,FastDateFormat ,FieldUtils ,FormatFactory ,FormattableUtils ,Fraction ,HashCodeBuilder ,IEEE754rUtils ,ImmutablePair ,JavaVersion ,LazyInitializer ,LocaleUtils ,LookupTranslator ,MethodUtils ,MultiBackgroundInitializer ,MultiBackgroundInitializer.MultiBackgroundInitializerResults ,Mutable ,MutableBoolean ,MutableByte ,MutableDouble ,MutableFloat ,MutableInt ,MutableLong ,MutableObject ,MutablePair ,MutableShort ,NumberUtils ,NumericEntityEscaper ,NumericEntityUnescaper ,NumericEntityUnescaper.OPTION ,ObjectUtils ,ObjectUtils.Null ,OctalUnescaper ,Pair ,RandomStringUtils ,Range ,ReflectionToStringBuilder ,SerializationException ,SerializationUtils ,StandardToStringStyle ,StopWatch ,StrBuilder ,StringEscapeUtils ,StringUtils ,StrLookup ,StrMatcher ,StrSubstitutor ,StrTokenizer ,SystemUtils ,TimedSemaphore ,ToStringBuilder ,ToStringStyle ,TypeUtils ,UnicodeEscaper ,UnicodeUnescaper ,Validate ,WordUtils 
// Lang包的一些補充說明: 2014年3月13日
12.1.Fraction是一個分數的類,提供分子分母或分式型的字符串來生成一個Fraction對象,此類封裝了加減乘除,約分,變號,指數等常見的數學操做
12.2.NumberUtil提供了一些字符串解析成各類數字型的方法,包括解析成Number類型,同時提供了參數是各類數組或多個參數裏找出min/max的使用工具方法。Math包也提供了Min/Max類
12.3.Range類提供了抽象類型的範圍類,根據默認或傳入的comparator來肯定範圍和判斷是否屬於此範圍
 
//----------------------------------------------------Commons Codes --------------------------------------------------
13.提供了用來處理經常使用的編碼方法的工具類包,例如DES、SHA一、MD五、Base64,URL,Soundx等等http://commons.apache.org/proper/commons-codec
Commons Codes All Classes AbstractCaverphone,Base32,Base32InputStream,Base32OutputStream,Base64,Base64InputStream,Base64OutputStream,BaseNCodec,BaseNCodecInputStream,BaseNCodecOutputStream,BCodec,BeiderMorseEncoder,BinaryCodec,BinaryDecoder,BinaryEncoder,Caverphone,Caverphone1,Caverphone2,CharEncoding,Charsets,ColognePhonetic,Crypt,Decoder,DecoderException,DigestUtils,DoubleMetaphone,Encoder,EncoderException,Hex,Lang,Languages,Languages.LanguageSet,Languages.SomeLanguages,MatchRatingApproachEncoder,Md5Crypt,MessageDigestAlgorithms,Metaphone,NameType,Nysiis,PhoneticEngine,QCodec,QuotedPrintableCodec,RefinedSoundex,Rule,Rule.Phoneme,Rule.PhonemeExpr,Rule.PhonemeList,Rule.RPattern,RuleType,Sha2Crypt,Soundex,StringDecoder,StringEncoder,StringEncoderComparator,StringUtils,UnixCrypt,URLCodec
 
//----------------------------------------------------Commons BeanUtils--------------------------------------------------
14.beanutils是Struts等web開源框架的最基本思想實現庫,主要用於操做類及屬性,經過發射等手段提供方便對bean的基本工具方法:
15.PropertyUtils主要方法及使用:
  • 中提供了獲取bean中普通元素,bean元素,list元素,Map元素的值方法,分別是getSimpleProperty(bean,"name"),getNestedProperty(bean,"ext.balance"),getIndexedProperty(bean,"list[1]"),getMappedProperty(bean,"map(key)"),也能夠直接調用getProperty(bean,"ext.list[0].map(key)")組合的形式,被解析的時候根據具體形式再調用上面的具體方法,相應的set方法使用,尤爲是JEXL的描述用法很方便
  • isReadable/isWritable(bean,"name")能夠查看此屬性是否可讀/可寫
  • describe方法返回全部get方法可訪問的bean元素到一個Map中,key爲屬性名。BeanMap類經過傳入一個bean構造一個map,在此map上用map的基本方法直接操做bean,酷啊。
16.BeanComparator提供比較具體bean屬性從而排序的方法,此類也支持傳入具體的Comparator實現具體排序的算法
17.克隆bean能夠用PropertyUtils.copyProperties(destBean,sourBean),也能夠直接調用BeanUtils.cloneBean(sourBean)直接返回一個新的bean,可是須要注意,bean裏面若是是對象元素,則對象元素是兩個bean共同"引用"的,也就是在一個bean裏修改了對象元素,另外一個bean能看到。BeanUtils裏有一些和PropertyUtils重複的方法,可是BeanUtils裏的方法能靈活的convert,尤爲是setProperty的時候,如BeanUtils.setProperty(bean,"age","50"),而bean中的age爲int型,若是是用PropertyUtils.setProperty則會報類型錯誤
18.經過設置DynaProperty,DynaClass可用new出一個動態的bean用於靈活的表明一個data model。如能夠經過一個xml文件的配置來建立一個dynabean
19.BeanPredicae能夠利用collections提供的多種類型的Predicate來經過bean中的具體屬性對bean的某些屬性條件進行驗證,全部Predicate的子類:

 
//----------------------------------------------------Commons Collections--------------------------------------------------
20.ReverseComparator/ComparatorChain/NullComparator/FixedOrderComparator比較器,ComparatorChain能夠add多個comparator,從最後一個add的comparator開始比較直到不爲0,NullComparator經過構造的時候傳入false/ture來比較null對象與其餘對象相比時是-1/1, FixedOrderComparator則是經過預設的數組或list順序來比較傳入的對象,按此預設的值來決定順序
21.PredicateUtil提供了建立多種Predicate對象的方法,用於對bean進行判斷,TransForm用於根據傳入的對象來create 新對象,而Closure則是對傳入的對象進行修改,本質都至關於Decorator模式,根據傳入的對象作一些處理
22.LoopIterator能夠作循環iter,經過設置reset來重置,ArrayListIterator能夠iter部分list,FilterIterator能夠根據Predicate對象對集合遍歷時作一些條件限制,符合條件的才iter,好比UniqueFilterIterator就是一個惟一性遍歷的子實現
23.Bag能夠用來控制對象使用的數量,HashBag/TreeBag
24.一些牛B的Map
  •     MultiKeyMap:多個key共同做用才能對應到一個value
  • MultiValueMap:一個key能夠對應多個value,get(key)時返回的是一個ArrayList實例
  • BidiMap能夠經過value來反找key,這個時候key-value都是一一對應的,put的時候若是key不一樣而value,則後put的key會替換相同value對應的已經存在的key。
  • CaseInsensitiveMap 對key大小寫敏感的Map,即大小寫不一樣可是內容相同的key會被認爲是同一個key
25.Predicate*提供了對多種集合進行decorate的驗證的類,用於控制集合的有效性,如PredicatedBag,PredicatedSortedBag,PredicatedCollection,PredicateDecorator,PredicateTransformer,PredicatedList,PredicatedMap,PredicatedSortedMap,PredicatedQueue,PredicatedSet,PredicatedSortedSet
    示例:
        List list = PredicatedList.decorate(new ArrayList(),new Predicate<String>() {
            public boolean evaluate(String str) {               
                return str.startWith("cfca");
            }
        }); // PredicatedList繼承了list,並重寫了add方法,在add里加入了驗證
    
26.能夠利用CollecionUtils裏的transform對Collection系列類裏的元素進行一些轉換,傳入collection及former便可將collection 裏的各元素轉換,此CollecionUtils還有一個方法transformingCollection()用法相似,只不過是返回一個collection,在往此collection加入元素時纔開始進行轉換
CollecionUtils裏一些常見靜態工具方法:
  •         countMatches(collection,predicate)計算符合predicate的collection中的元素的個數
  • cardinality(ele,collection)計算ele在collection出現的次數
  • getCardinalityMap(collection)獲得一個map,key爲collection中的元素,value爲每一個元素出現的次數
  • union,intersection,disjunction,subtract能夠實現兩個iterable對象的並集,交集,非交集,不包括集
 
27.LRUMap根據Least Recently Used算法來淘汰放入裏面的元素,注意它是線程不安全的,須要用Collections.synchronized***來保障線程安全。
28. LazyMap.lazyMap(map,factory)  能夠將一個普通的map轉化成lazymap,即當get的時候若是map裏沒有對應的key,則會調用factory裏面一次生成value放到map中。
29.MapUtils裏封裝了不少轉化成不一樣功能map 的方法:
get***Value能夠將獲得的object或泛型V轉化成***對應的類型,比較方便
 
//----------------------------------------------------Commons Digester/Betwixt--------------------------------------------------
30.Digester能夠將xml文件轉成javabean,其原理是利用sax棧解析,根據定義好的rules(rules能夠是文件也能夠是Rules實例)
31.rules的做用就是告訴digester的parser當遇到xml中的某個節點時,應該按照什麼方式去解析,是生成對象,仍是設置屬性之類的。
demo:
        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" ); 
 
32.若是有多個namespace,則須要分別設置不一樣的namesapce後再設置不一樣的RuleSet,如:
digester.setRuleNamesapceURI("http://***1");digester.addRuleSet(new RuleSetBase1);
digester.setRuleNamesapceURI("http://***2");digester.addRuleSet(new RuleSetBase1);
33.全部的rule其實就是根據xpath的規則告訴digester按照不一樣的方式去處理當前處理到的這個節點,其優點相比較於sax在於匹配規則的靈活性及調用的方便性,如digester.addRule("*/email",new EmailRule());這樣在EmailRule能夠經過繼承Rule類來本身重載begin(),body(),end(),finish()等方法來實現特殊操做,好比真發emial。(繼承Rule的方式其實和sax解析實現ContentHandler接口思想是一致的)
34.digester也能夠經過setSubstitutor方法來設置解析時提供的值來替換xml裏相似${name}來實現相似「模板」解析,很方便
35.Betwixt用於在xml與bean之間作序列化和發序列化,利用BeanWriter/xmlintrospector的設置將bean轉化成xml字符串(利用了Digester),利用BeanReader/xmlIntrospector的設置將xml字符串轉化成bean 參考:http://lavasoft.blog.51cto.com/62575/107349/
 
//----------------------------------------------------Commons CLI/Configuration--------------------------------------------------
36.cli包能夠方便執行java應用時設置一些命令及參數,相似ls -l,rm -rf之類的,有多中命令方式:

Commons CLI supports different types of options:java

  • POSIX like options (ie. tar -zxvf foo.tar.gz)
  • GNU like long options (ie. du --human-readable --max-depth=1)
  • Java like properties (ie. java -Djava.awt.headless=true -Djava.net.useSystemProxies=true Foo)
  • Short options with value attached (ie. gcc -O2 foo.c)
  • long options with single hyphen (ie. ant -projecthelp)
cli是一個很小的包,作的事情就是把命令中的參數和值用option接收到而已。
並且在一個配置文件中能夠配置有不一樣的配置方式,如config.xml中能夠按xml的格式配置properties文件,ConfigurationFactory and a CompositeConfiguration會根據文件類型自動找到對應的解析類去加載
38. Configuration支持reloading,能夠靈活設置配置動態更新策略
//----------------------------------------------------Commons-logging--------------------------------------------------
39.commons-logging是一個抽象的日誌框架,當調用LogFactory.getLog("Test")試圖獲得log對象的時候,會按照以下步驟獲取log對象:經過獲取「org.apache.commons.logging.Log"屬性獲取Logger對象--->在類路徑上查找Log4j對象--->經過獲取"org.apache.commons.logging.impl.Jdk14Logger"屬性獲取JDK的log框架--->在類路徑上查找JDK 自身的log框架--->用自身的SimpleLog對象。
40.查找的順序按LogFactory定義的數組順序:
 private static final String[] classesToDiscover = {
          org.apache.commons.logging.impl.Log4JLogger,
            "org.apache.commons.logging.impl.Jdk14Logger",
            "org.apache.commons.logging.impl.Jdk13LumberjackLogger",
            "org.apache.commons.logging.impl.SimpleLog"
    };
通常來講若是項目中沒有配第一個(即用classLoad找不到Log4jLogger,沒有log4j.jar),那麼確定會有第二個的。
//----------------------------------------------------Commons Math--------------------------------------------------
41.RandomDataImpl提供各類隨機數的方法
42.StatUtils提供了操做基本算術的方法,如平均值,乘積,方差等
43.給定方程組的變量參數二維數組和值的數組,利用RealMatrix等類能夠解線性方程
44.利用SimpleRegression和StopWatch能夠來判斷剩餘操做時間估算,基於線性的估算算法。若是操做自己是非線性的,可能存在估算不許的狀況
//----------------------------------------------------Commons JEXL--------------------------------------------------
45.JEXL有點像PropertyUtils裏的按必定的語法來獲取對象屬性,以${obj.prop}、${obj.fun()}的形式。Expression是模板文本,Content是設置傳入值的上下文環境
//----------------------------------------------------Velocity--------------------------------------------------
http://velocity.apache.org/
46.Velocity相比JEXL有更豐富的功能,有專門的Velocity Template Language語法。支持語法基本的if/for/iterator/macro宏定義等。init的時候能夠設置一些基本的屬性。以$obj的方式。須要初始化engin,設置Context上下文和輸入輸出。能夠經過engin設置一些類路徑來動態調用模板裏面的方法定義等。Velocity也提供基本的tools工具類,如NumberTool,DateTool,MathTool等。能夠和web應用及IDE整合。
//----------------------------------------------------FreeMarker--------------------------------------------------
http://freemarker.org/
47.FreeMarker功能相似Velocity,也有專門的FTL語法,有專門的將VTL轉換成FTL的工具。能夠和web應用及IDE整合。
//----------------------------------------------------Commons  IO--------------------------------------------------
http://commons.apache.org/proper/commons-io/javadocs/api-release/index.html
48.IO包主要包括的功能:
48.5 CopyUtils類已經在2系列版本里被製成了Deprecated,其所有的功能都在IOUtils裏的copy/write實現。copy就是對源流按bufffer大小讀一遍write到目標流裏。copy後源流也被讀完了,須要reset才能夠從新被讀。
49.IOUtils主要的方法類型:
50.IOUtils中全部讀寫都是buffer的,大小默認是4k。能夠用readLine/writeLine來按行讀寫。通常來講,close流須要調用者本身調用。
51.FileUtils主要功能及方法:
  •    writing to a file
  • reading from a file
  • make a directory including parent directories
  • copying files and directories
  • deleting files and directories
  • converting to and from a URL
  • listing files and directories by filter and extension
  • comparing file content
  • file last changed date
  • calculating a checksum 
  •  byteCountToDisplaySize顯示human-readable size
  • copyFile/Directory/ 複製文件或目錄
  • copy[url,inputstream]ToFile 複製url連接內容或輸入流到文件
  • move/deleteDirectory
  • touch文件
 
52.多種過濾文件的FileFilter,CountIntput/OutPutStream能夠獲取已經讀寫的字節數,TeeInput/OutputStream能夠分發讀寫到兩個流裏。
//----------------------------------------------------Commons Net--------------------------------------------------
http://commons.apache.org/proper/commons-net/
53.Net工程實現了除http外的常見網絡應用協議,如FTP/FTPS,FTP over HTTP (experimental),NNTP,SMTP(S),POP3(S),IMAP(S),Telnet,TFTP,Finger,Whois,rexec/rcmd/rlogin,Time (rdate) and Daytime,Echo,Discard,NTP/SNTP等
54.官網上有一些基本的實例能夠參考做爲開發的依據。
//----------------------------------------------------Common HttpComponents --------------------------------------------------
http://hc.apache.org/
55. Apache HttpComponents project 即便原來的httpClient工程,原來屬於commons工程,升級成一級工程後變成HttpComponents  ,而且由 HttpClient 和 HttpCore 兩部分組成。
 
56.HttpCore is a set of low level HTTP transport components that can be used to build custom client and server side HTTP services with a minimal footprint. HttpCore supports two I/O models: blocking I/O model based on the classic Java I/O and non-blocking, event driven I/O model based on Java NIO.

The blocking I/O model may be more appropriate for data intensive, low latency scenarios, whereas the non-blocking model may be more appropriate for high latency scenarios where raw data throughput is less important than the ability to handle thousands of simultaneous HTTP connections in a resource efficient manner.ios

 
 
57.HttpClient is a HTTP/1.1 compliant HTTP agent implementation based on HttpCore. It also provides reusable components for client-side authentication, HTTP state management, and HTTP connection management. HttpComponents Client is a successor of and replacement for Commons HttpClient 3.x. Users of Commons HttpClient are strongly encouraged to upgrade.
 
58.還有一個異步的httpClient, a HTTP/1.1 compliant HTTP agent implementation based on HttpCore NIO and HttpClient components. It is a complementary module to Apache HttpClient intended for special cases where ability to handle a great number of concurrent connections is more important than performance in terms of a raw data throughput.
 
59.WebDav基於http協議,容許客戶端管理和鎖定webserver上的資源,目前slide已經退役,新的配置webdav的是Jackrabbit.
 
//----------------------------------------------------Commons jxpath--------------------------------------------------
http://commons.apache.org/proper/commons-jxpath/apidocs/index.html
 
60.jxpath能夠用xpath語法來操做JavaBeans, Maps, Servlet contexts, DOM 等多種數據集合。
 
 
 
 
 
 
 
 
 



相關文章
相關標籤/搜索