public class AntPathMatcher extends ObjectSE 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 文字列が PatternSE を介してパターンと一致するかどうかをテストします。 |
protected static class | AntPathMatcher.AntPatternComparatorgetPatternComparator(String) によって返されるデフォルトの ComparatorSE 実装。 |
| 修飾子と型 | フィールドと説明 |
|---|---|
static StringSE | DEFAULT_PATH_SEPARATOR デフォルトのパス区切り文字: "/" |
| コンストラクターと説明 |
|---|
AntPathMatcher()DEFAULT_PATH_SEPARATOR を使用して新しいインスタンスを作成します。 |
AntPathMatcher(StringSE pathSeparator) カスタムパス区切り文字で使用する便利な代替コンストラクター。 |
| 修飾子と型 | メソッドと説明 |
|---|---|
StringSE | combine(StringSE pattern1, StringSE pattern2)2 つのパターンを新しいパターンに結合します。 |
protected boolean | doMatch(StringSE pattern, StringSE path, boolean fullMatch, MapSE<StringSE, StringSE> uriTemplateVariables) 実際に、指定された path を指定された pattern に一致させます。 |
StringSE | extractPathWithinPattern(StringSE pattern, StringSE path) パターンとフルパスを指定して、パターンマッピングされた部分を決定します。 |
MapSE<StringSE, StringSE> | extractUriTemplateVariables(StringSE pattern, StringSE path) パターンとフルパスを指定して、URI テンプレート変数を抽出します。 |
ComparatorSE<StringSE> | getPatternComparator(StringSE path) 完全なパスを指定すると、明示性の順序でパターンをソートするのに適した ComparatorSE を返します。 |
protected AntPathMatcher.AntPathStringMatcher | getStringMatcher(StringSE pattern) 指定されたパターンの AntPathMatcher.AntPathStringMatcher をビルドまたは取得します。 |
boolean | isPattern(StringSE path) 指定された path は、このインターフェースの実装によって一致するパターンを表しますか? |
boolean | match(StringSE pattern, StringSE path) この PathMatcher のマッチング戦略に従って、指定された path を指定された pattern に一致させます。 |
boolean | matchStart(StringSE pattern, StringSE path) この PathMatcher のマッチング戦略に従って、指定された path を指定された pattern の対応する部分と一致させます。 |
void | setCachePatterns(boolean cachePatterns) このマッチャーの match(java.lang.String, java.lang.String) メソッドに渡されるパターンの解析済みパターンメタデータをキャッシュするかどうかを指定します。 |
void | setCaseSensitive(boolean caseSensitive) 大文字と小文字を区別してパターンマッチングを実行するかどうかを指定します。 |
void | setPathSeparator(StringSE pathSeparator) パターン解析に使用するパス区切り文字を設定します。 |
void | setTrimTokens(boolean trimTokens) トークン化されたパスとパターンをトリミングするかどうかを指定します。 |
protected StringSE[] | tokenizePath(StringSE path) このマッチャーの設定に基づいて、指定されたパス文字列を部分にトークン化します。 |
protected StringSE[] | tokenizePattern(StringSE pattern) このマッチャーの設定に基づいて、指定されたパスパターンをトークン化してパーツにします。 |
cloneSE, equalsSE, finalizeSE, getClassSE, hashCodeSE, notifySE, notifyAllSE, toStringSE, waitSE, waitSE, waitSEpublic AntPathMatcher()
DEFAULT_PATH_SEPARATOR を使用して新しいインスタンスを作成します。public AntPathMatcher(StringSE pathSeparator)
pathSeparator - 使用するパス区切り文字。null であってはなりません。public void setPathSeparator(@Nullable StringSE 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(StringSE path)
PathMatcherpath は、このインターフェースの実装によって一致するパターンを表しますか? 戻り値が false の場合、静的パス文字列での直接の等価比較は同じ結果をもたらすため、PathMatcher.match(java.lang.String, java.lang.String) メソッドを使用する必要はありません。
PathMatcher の isPattern path - チェックするパス文字列 path がパターンを表す場合、true public boolean match(StringSE pattern, StringSE path)
PathMatcherpath を指定された pattern に一致させます。PathMatcher の match pattern - 照合するパターン path - テストするパス文字列 path が一致した場合は true、一致しなかった場合は false public boolean matchStart(StringSE pattern, StringSE path)
PathMatcherpath を指定された pattern の対応する部分と一致させます。完全なパスも一致すると想定して、指定されたベースパスに至るまでパターンが少なくとも一致するかどうかを決定します。
PathMatcher の matchStart pattern - 照合するパターン path - テストするパス文字列 path が一致した場合は true、一致しなかった場合は false protected boolean doMatch(StringSE pattern, StringSE path, boolean fullMatch, @Nullable MapSE<StringSE,StringSE> uriTemplateVariables)
path を指定された pattern に一致させます。pattern - 照合するパターン path - テストするパス文字列 fullMatch - 完全なパターン一致が必要かどうか (それ以外の場合、指定されたベースパスが進む限り、パターンマッチで十分です。)path が一致した場合は true、一致しなかった場合は false protected StringSE[] tokenizePattern(StringSE pattern)
setCachePatterns(boolean) に基づいてキャッシュを実行し、実際のトークン化アルゴリズムのために tokenizePath(String) に委譲します。
pattern - トークン化するパターン protected StringSE[] tokenizePath(StringSE path)
path - トークン化するパス protected AntPathMatcher.AntPathStringMatcher getStringMatcher(StringSE pattern)
AntPathMatcher.AntPathStringMatcher をビルドまたは取得します。 デフォルトの実装では、この AntPathMatcher の内部キャッシュ(setCachePatterns(boolean) を参照)をチェックし、キャッシュされたコピーが見つからない場合、新しい AntPathStringMatcher インスタンスを作成します。
実行時にキャッシュするパターンが多すぎる場合(しきい値は 65536)、パターンの任意の順列が入ってくると仮定して、デフォルトのキャッシュをオフにし、繰り返しパターンに遭遇する可能性はほとんどありません。
このメソッドは、カスタムキャッシュ戦略を実装するためにオーバーライドされる場合があります。
pattern - 照合するパターン (非 null)null)setCachePatterns(boolean)public StringSE extractPathWithinPattern(StringSE pattern, StringSE 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 MapSE<StringSE,StringSE> extractUriTemplateVariables(StringSE pattern, StringSE path)
PathMatcher次に例を示します: パターン "/hotels/{hotel}" およびパス "/hotels/1" の場合、このメソッドは "hotel" -> "1" を含むマップを返します。
PathMatcher の extractUriTemplateVariables pattern - おそらく URI テンプレートを含むパスパターン path - テンプレート変数を抽出するフルパス public StringSE combine(StringSE pattern1, StringSE 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 番目のパターン IllegalArgumentExceptionSE - 2 つのパターンを結合できない場合 public ComparatorSE<StringSE> getPatternComparator(StringSE path)
ComparatorSE を返します。 この Comparator は、より具体的なパターン(uri テンプレートまたはワイルドカードなし)が一般的なパターンの前に来るようにリストをソートSEします。したがって、次のパターンのリストが与えられます。
/hotels/new/hotels/{hotel}/hotels/* パラメーターとして指定された完全パスは、完全一致をテストするために使用されます。指定されたパスが /hotels/2 の場合、パターン /hotels/2 は /hotels/1 の前にソートされます。
PathMatcher の getPatternComparator path - 比較に使用する完全なパス