add WebStatFilter's exclusions, support /foo*, *.html, /bar/index.html

This commit is contained in:
Zhanming Qi
2012-08-12 20:14:52 +08:00
parent f26c98ace9
commit 98f91b177a
6 changed files with 642 additions and 1 deletions
@@ -1,7 +1,11 @@
package com.alibaba.druid.util;
import java.util.ArrayList;
import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.StringTokenizer;
import com.alibaba.druid.support.logging.Log;
import com.alibaba.druid.support.logging.LogFactory;
@@ -97,6 +101,85 @@ public class StringUtils {
return parameters;
}
/**
* Tokenize the given String into a String array via a StringTokenizer. Trims tokens and omits empty tokens.
* <p>
* The given delimiters string is supposed to consist of any number of delimiter characters. Each of those
* characters can be used to separate tokens. A delimiter is always a single character; for multi-character
* delimiters, consider using <code>delimitedListToStringArray</code>
* <p/>
* <p>
* Copied from the Spring Framework while retaining all license, copyright and author information.
*
* @param str the String to tokenize
* @param delimiters the delimiter characters, assembled as String (each of those characters is individually
* considered as delimiter).
* @return an array of the tokens
* @see java.util.StringTokenizer
* @see java.lang.String#trim()
*/
public static String[] tokenizeToStringArray(String str, String delimiters) {
return tokenizeToStringArray(str, delimiters, true, true);
}
/**
* Tokenize the given String into a String array via a StringTokenizer.
* <p>
* The given delimiters string is supposed to consist of any number of delimiter characters. Each of those
* characters can be used to separate tokens. A delimiter is always a single character; for multi-character
* delimiters, consider using <code>delimitedListToStringArray</code>
* <p/>
* <p>
* Copied from the Spring Framework while retaining all license, copyright and author information.
*
* @param str the String to tokenize
* @param delimiters the delimiter characters, assembled as String (each of those characters is individually
* considered as delimiter)
* @param trimTokens trim the tokens via String's <code>trim</code>
* @param ignoreEmptyTokens omit empty tokens from the result array (only applies to tokens that are empty after
* trimming; StringTokenizer will not consider subsequent delimiters as token in the first place).
* @return an array of the tokens (<code>null</code> if the input String was <code>null</code>)
* @see java.util.StringTokenizer
* @see java.lang.String#trim()
*/
@SuppressWarnings({ "unchecked", "rawtypes" })
public static String[] tokenizeToStringArray(String str, String delimiters, boolean trimTokens,
boolean ignoreEmptyTokens) {
if (str == null) {
return null;
}
StringTokenizer st = new StringTokenizer(str, delimiters);
List tokens = new ArrayList();
while (st.hasMoreTokens()) {
String token = st.nextToken();
if (trimTokens) {
token = token.trim();
}
if (!ignoreEmptyTokens || token.length() > 0) {
tokens.add(token);
}
}
return toStringArray(tokens);
}
/**
* Copy the given Collection into a String array. The Collection must contain String elements only.
* <p/>
* <p>
* Copied from the Spring Framework while retaining all license, copyright and author information.
*
* @param collection the Collection to copy
* @return the String array (<code>null</code> if the passed-in Collection was <code>null</code>)
*/
@SuppressWarnings({ "unchecked", "rawtypes" })
public static String[] toStringArray(Collection collection) {
if (collection == null) {
return null;
}
return (String[]) collection.toArray(new String[collection.size()]);
}
public static void main(String args[]) {
System.out.println(JSON.toJSONString(getParameters("test?t=1&f=").get("t")));
}