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 文字列が Pattern SE を介してパターンと一致するかどうかをテストします。 |
protected static class | AntPathMatcher.AntPatternComparator getPatternComparator(String) によって返されるデフォルトの Comparator SE 実装。 |
修飾子と型 | フィールドと説明 |
---|---|
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) 完全なパスを指定すると、明示性の順序でパターンをソートするのに適した Comparator SE を返します。 |
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, waitSE
public 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(@Nullable StringSE path)
PathMatcher
path
は、このインターフェースの実装によって一致するパターンを表しますか? 戻り値が false
の場合、静的パス文字列での直接の等価比較は同じ結果をもたらすため、PathMatcher.match(java.lang.String, java.lang.String)
メソッドを使用する必要はありません。
PathMatcher
の isPattern
path
- チェックするパス path
がパターンを表す場合、true
public boolean match(StringSE pattern, StringSE path)
PathMatcher
path
を指定された pattern
に一致させます。PathMatcher
の match
pattern
- 照合するパターン path
- テストするパス path
が一致した場合は true
、一致しなかった場合は false
public boolean matchStart(StringSE pattern, StringSE path)
PathMatcher
path
を指定された pattern
の対応する部分と一致させます。完全なパスも一致すると想定して、指定されたベースパスに至るまでパターンが少なくとも一致するかどうかを決定します。
PathMatcher
の matchStart
pattern
- 照合するパターン path
- テストするパス path
が一致した場合は true
、一致しなかった場合は false
protected boolean doMatch(StringSE pattern, @Nullable 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)
Comparator
SE を返します。 この Comparator
は、より具体的なパターン(URI テンプレートまたはワイルドカードなし)が一般的なパターンの前に来るようにリストをソートSEします。したがって、次のパターンのリストが与えられると、返されるコンパレータはこのリストをソートして、示されている順序になります。
/hotels/new
/hotels/{hotel}
/hotels/*
パラメーターとして指定された完全パスは、完全一致をテストするために使用されます。指定されたパスが /hotels/2
の場合、パターン /hotels/2
は /hotels/1
の前にソートされます。
PathMatcher
の getPatternComparator
path
- 比較に使用する完全なパス