public class AntPathMatcher extends java.lang.Object implements PathMatcher
PathMatcher
実装。このマッピングコードの一部は、Apache Ant から親切に借りています。
マッピングは、次のルールを使用して URL と一致します。
?
は 1 文字に一致します *
はゼロ個以上の文字と一致します **
は、パス内のゼロ個以上のディレクトリに一致します {spring:[a-z]+}
は、"spring" という名前のパス変数として正規表現 [a-z]+
と一致します。com/t?st.jsp
— com/test.jsp
に一致しますが、com/tast.jsp
または com/txst.jsp
にも一致します com/*.jsp
— com
ディレクトリ内のすべての .jsp
ファイルに一致します com/**/test.jsp
— com
パスにあるすべての test.jsp
ファイルに一致します org/springframework/**/*.jsp
— org/springframework
パスにあるすべての .jsp
ファイルに一致します org/**/servlet/bla.jsp
— org/springframework/servlet/bla.jsp
に一致しますが、org/springframework/testing/servlet/bla.jsp
および org/servlet/bla.jsp
にも一致します com/{filename:\\w+}.jsp
は com/test.jsp
と一致し、値 test
を filename
変数に割り当てます 注意 : パターンとパスは両方とも絶対であるか、2 つが一致するために両方とも相対でなければなりません。この実装のユーザーは、使用されるコンテキストで意味があるため、パターンの前に "/" を付けるためにパターンをサニタイズすることをお勧めします。
修飾子と型 | クラスと説明 |
---|---|
protected static class | AntPathMatcher.AntPathStringMatcher 文字列が Pattern を介してパターンと一致するかどうかをテストします。 |
protected static class | AntPathMatcher.AntPatternComparator getPatternComparator(String) によって返されるデフォルトの Comparator 実装。 |
修飾子と型 | フィールドと説明 |
---|---|
static java.lang.String | DEFAULT_PATH_SEPARATOR デフォルトのパス区切り文字: "/". |
コンストラクターと説明 |
---|
AntPathMatcher() DEFAULT_PATH_SEPARATOR を使用して新しいインスタンスを作成します。 |
AntPathMatcher(java.lang.String pathSeparator) カスタムパス区切り文字で使用する便利な代替コンストラクター。 |
修飾子と型 | メソッドと説明 |
---|---|
java.lang.String | combine(java.lang.String pattern1, java.lang.String pattern2) 2 つのパターンを新しいパターンに結合します。 |
protected boolean | doMatch(java.lang.String pattern, java.lang.String path, boolean fullMatch, java.util.Map<java.lang.String,java.lang.String> uriTemplateVariables) 実際に、指定された path を指定された pattern に一致させます。 |
java.lang.String | extractPathWithinPattern(java.lang.String pattern, java.lang.String path) パターンとフルパスを指定して、パターンマッピングされた部分を決定します。 |
java.util.Map<java.lang.String,java.lang.String> | extractUriTemplateVariables(java.lang.String pattern, java.lang.String path) パターンとフルパスを指定して、URI テンプレート変数を抽出します。 |
java.util.Comparator<java.lang.String> | getPatternComparator(java.lang.String path) フルパスを指定すると、明示的な順序でパターンを並べ替えるのに適した Comparator を返します。 |
protected AntPathMatcher.AntPathStringMatcher | getStringMatcher(java.lang.String pattern) 指定されたパターンの AntPathMatcher.AntPathStringMatcher をビルドまたは取得します。 |
boolean | isPattern(java.lang.String path) 指定された path は、このインターフェースの実装によって一致するパターンを表しますか? |
boolean | match(java.lang.String pattern, java.lang.String path) この PathMatcher のマッチング戦略に従って、指定された path を指定された pattern に一致させます。 |
boolean | matchStart(java.lang.String pattern, java.lang.String path) この PathMatcher のマッチング戦略に従って、指定された path を指定された pattern の対応する部分と一致させます。 |
void | setCachePatterns(boolean cachePatterns) このマッチャーの match(java.lang.String, java.lang.String) メソッドに渡されるパターンの解析済みパターンメタデータをキャッシュするかどうかを指定します。 |
void | setCaseSensitive(boolean caseSensitive) 大文字と小文字を区別してパターンマッチングを実行するかどうかを指定します。 |
void | setPathSeparator(java.lang.String pathSeparator) パターン解析に使用するパス区切り文字を設定します。 |
void | setTrimTokens(boolean trimTokens) トークン化されたパスとパターンをトリミングするかどうかを指定します。 |
protected java.lang.String[] | tokenizePath(java.lang.String path) このマッチャーの設定に基づいて、指定されたパス文字列を部分にトークン化します。 |
protected java.lang.String[] | tokenizePattern(java.lang.String pattern) このマッチャーの設定に基づいて、指定されたパスパターンをトークン化してパーツにします。 |
public static final java.lang.String DEFAULT_PATH_SEPARATOR
public AntPathMatcher()
DEFAULT_PATH_SEPARATOR
を使用して新しいインスタンスを作成します。public AntPathMatcher(java.lang.String pathSeparator)
pathSeparator
- 使用するパス区切り文字。null
であってはなりません。public void setPathSeparator(@Nullable java.lang.String pathSeparator)
Ant の場合のように、デフォルトは "/" です。
public void setCaseSensitive(boolean caseSensitive)
デフォルトは true
です。大文字と小文字を区別しないマッチングのために、これを false
に切り替えます。
public void setTrimTokens(boolean trimTokens)
デフォルトは false
です。
public void setCachePatterns(boolean cachePatterns)
match(java.lang.String, java.lang.String)
メソッドに渡されるパターンの解析済みパターンメタデータをキャッシュするかどうかを指定します。true
の値は、無制限のパターンキャッシュをアクティブにします。false
の値は、パターンキャッシュを完全にオフにします。デフォルトではキャッシュがオンになっていますが、実行時にキャッシュするパターンが多すぎると自動的にオフになるバリアントがあります(しきい値は 65536 です)。パターンの任意の順列が入ってくると想定し、繰り返しパターン。
getStringMatcher(String)
public boolean isPattern(java.lang.String path)
PathMatcher
path
は、このインターフェースの実装によって一致するパターンを表しますか? 戻り値が false
の場合、静的パス文字列での直接の等価比較は同じ結果をもたらすため、PathMatcher.match(java.lang.String, java.lang.String)
メソッドを使用する必要はありません。
PathMatcher
の isPattern
path
- チェックするパス文字列 path
がパターンを表す場合、true
public boolean match(java.lang.String pattern, java.lang.String path)
PathMatcher
path
を指定された pattern
に一致させます。PathMatcher
の match
pattern
- 照合するパターン path
- テストするパス文字列 path
が一致した場合は true
、一致しなかった場合は false
public boolean matchStart(java.lang.String pattern, java.lang.String path)
PathMatcher
path
を指定された pattern
の対応する部分と一致させます。完全なパスも一致すると想定して、指定されたベースパスに至るまでパターンが少なくとも一致するかどうかを決定します。
PathMatcher
の matchStart
pattern
- 照合するパターン path
- テストするパス文字列 path
が一致した場合は true
、一致しなかった場合は false
protected boolean doMatch(java.lang.String pattern, java.lang.String path, boolean fullMatch, @Nullable java.util.Map<java.lang.String,java.lang.String> uriTemplateVariables)
path
を指定された pattern
に一致させます。pattern
- 照合するパターン path
- テストするパス文字列 fullMatch
- 完全なパターン一致が必要かどうか (それ以外の場合、指定されたベースパスが進む限り、パターンマッチで十分です。)path
が一致した場合は true
、一致しなかった場合は false
protected java.lang.String[] tokenizePattern(java.lang.String pattern)
setCachePatterns(boolean)
に基づいてキャッシュを実行し、実際のトークン化アルゴリズムのために tokenizePath(String)
に委譲します。
pattern
- トークン化するパターン protected java.lang.String[] tokenizePath(java.lang.String path)
path
- トークン化するパス protected AntPathMatcher.AntPathStringMatcher getStringMatcher(java.lang.String pattern)
AntPathMatcher.AntPathStringMatcher
をビルドまたは取得します。 デフォルトの実装では、この AntPathMatcher の内部キャッシュ(setCachePatterns(boolean)
を参照)をチェックし、キャッシュされたコピーが見つからない場合、新しい AntPathStringMatcher インスタンスを作成します。
実行時にキャッシュするパターンが多すぎる場合(しきい値は 65536)、パターンの任意の順列が入ってくると仮定して、デフォルトのキャッシュをオフにし、繰り返しパターンに遭遇する可能性はほとんどありません。
このメソッドは、カスタムキャッシュ戦略を実装するためにオーバーライドされる場合があります。
pattern
- 照合するパターン (非 null
)null
)setCachePatterns(boolean)
public java.lang.String extractPathWithinPattern(java.lang.String pattern, java.lang.String path)
例:
/docs/cvs/commit.html
' および '/docs/cvs/commit.html
->' '/docs/*
' および '/docs/cvs/commit
->'cvs/commit
'/docs/cvs/*.html
' および '/docs/cvs/commit.html
->'commit.html
'/docs/**
' および '/docs/cvs/commit
->'cvs/commit
'/docs/**\/*.html
' および '/docs/cvs/commit.html
->'cvs/commit.html
'/*.html
' および '/docs/cvs/commit.html
->'docs/cvs/commit.html
'*.html
' および '/docs/cvs/commit.html
->'/docs/cvs/commit.html
'*
' および '/docs/cvs/commit.html
->'/docs/cvs/commit.html
'match(java.lang.String, java.lang.String)
が 'pattern
' および 'path
' に対して true
を返すと仮定しますが、これを強制しません。
PathMatcher
の extractPathWithinPattern
pattern
- パスパターン path
- イントロスペクトへのフルパス path
のパターンマッピングされた部分 (非 null
)public java.util.Map<java.lang.String,java.lang.String> extractUriTemplateVariables(java.lang.String pattern, java.lang.String path)
PathMatcher
次に例を示します: パターン "/hotels/{hotel}" およびパス "/hotels/1" の場合、このメソッドは "hotel" -> "1" を含むマップを返します。
PathMatcher
の extractUriTemplateVariables
pattern
- おそらく URI テンプレートを含むパスパターン path
- テンプレート変数を抽出するフルパス public java.lang.String combine(java.lang.String pattern1, java.lang.String pattern2)
この実装は、最初のパターンにファイル拡張子の一致(例: *.html
)が含まれていない限り、2 つのパターンを単に連結します。その場合、2 番目のパターンは最初のパターンにマージされます。そうでない場合、IllegalArgumentException
がスローされます。
パターン 1 | パターン 2 | 結果 |
---|---|---|
null | null | |
/hotels | null | /hotels |
null | /hotels | /hotels |
/hotels | /bookings | /hotels/bookings |
/hotels | bookings | /hotels/bookings |
/hotels/* | /bookings | /hotels/bookings |
/hotels/** | /bookings | /hotels/**/bookings |
/hotels | {hotel} | /hotels/{hotel} |
/hotels/* | {hotel} | /hotels/{hotel} |
/hotels/** | {hotel} | /hotels/**/{hotel} |
/*.html | /hotels.html | /hotels.html |
/*.html | /hotels | /hotels.html |
/*.html | /*.txt | IllegalArgumentException |
PathMatcher
の combine
pattern1
- 最初のパターン pattern2
- 2 番目のパターン java.lang.IllegalArgumentException
- 2 つのパターンを結合できない場合 public java.util.Comparator<java.lang.String> getPatternComparator(java.lang.String path)
Comparator
を返します。 この Comparator
は、より具体的なパターン(uri テンプレートやワイルドカードなし)が一般的なパターンの前に来るようにリストをソートします。次のパターンのリストが与えられます。
/hotels/new
/hotels/{hotel}
/hotels/*
パラメーターとして指定された完全パスは、完全一致をテストするために使用されます。指定されたパスが /hotels/2
の場合、パターン /hotels/2
は /hotels/1
の前にソートされます。
PathMatcher
の getPatternComparator
path
- 比較に使用する完全なパス