public interface PushBuilder
PushBuilderは、 HttpServletRequest.newPushBuilder()
を呼び出すことで得られます。
このメソッドを呼び出すたびに現在のHttpServletRequestに基づくPushBuilderの新しいインスタンスが作成されるかnullを返します。
返されたPushBuilderインスタンスへの変更はその次以降の呼び出しには反映されません。
インスタンスは次のように初期化されます。
HttpServletRequest
の既存のリクエストヘッダーは以下を除いてPushBuilderに追加されます。
PushBuilder
を作成する前に、新しいHttpSession
を作成するためにHttpServletRequest.getSession(boolean)
が呼び出されていない場合、
HttpServletRequest.getRequestedSessionId()
から返された値となり、
この場合PushBuilderでリクエストされたセッションIDとして新しいセッションIDが使用されます。
リクエストから返されるセッションIDはCookieまたはURLの事実上二つの"ソース"から返されることに注意してください。(Cookie:HttpServletRequest.isRequestedSessionIdFromCookie()
もしくはURL:HttpServletRequest.isRequestedSessionIdFromURL()
で得られる)
PushBuilder
のセッションIDはリクエストと同じソースが使用されます。HttpServletRequest.getRequestURL()
と任意のHttpServletRequest.getQueryString()
に設定されます。Cookie.getMaxAge()
が<= 0でない時は対応するCookieヘッダがPushBuilderに追加されます。
<= 0の時はCookieはPushBuilderから削除されます。push()
メソッドの呼び出しの前にpath(java.lang.String)
メソッドをPushBuilder
のインスタンスで呼び出す必要があります。
そうしないと、そのメソッドで指定されているようにから例外がスローされる必要があり失敗します。
PushBuilderはpush()
メソッドが呼び出される前にミューテーターメソッドのチェーン呼び出しによってカスタマイズされ、
PushBuilderの現在の状態で非同期プッシュ要求が開始されます。
push()
メソッドが呼び出された後、PushBuilderは別のプッシュで再利用されるかもしれませんが、
実装はpush()から戻る前におよび条件付きヘッダー(conditionalヘッダー:RFC 7232で定義)の値がクリアされるようにする必要があります。
他のすべての値はpush()
呼び出しをまたいで保持されます。
修飾子とタイプ | メソッドと説明 |
---|---|
PushBuilder |
addHeader(String name,
String value)
プッシュに使用されるリクエストヘッダーの値を追加します。
|
String |
getHeader(String name)
指定された名前でプッシュに使用されるヘッダーの値を返します。
|
Set<String> |
getHeaderNames()
プッシュに使用されるヘッダーの名前のsetを返します。
|
String |
getMethod()
プッシュに使用されるメソッドを返します。
|
String |
getPath()
プッシュに使用されるURIのパスを返します。
|
String |
getQueryString()
プッシュに使用されるクエリ文字列を返します。
|
String |
getSessionId()
プッシュに使用されるセッションIDを返します。
|
PushBuilder |
method(String method)
プッシュに使用される(HTTPの)メソッドを設定します。
|
PushBuilder |
path(String path)
プッシュに使用されるURIパスを設定します。
|
void |
push()
PushBuilderの現在の状態でリソースをプッシュします、このメソッドはノンブロッキングでなければいけません。
|
PushBuilder |
queryString(String queryString)
プッシュに使用されるクエリ文字列を設定します。
|
PushBuilder |
removeHeader(String name)
リクエストヘッダーから指定された名前を削除します。
|
PushBuilder |
sessionId(String sessionId)
プッシュに使用されるセッションIDを設定します。
|
PushBuilder |
setHeader(String name,
String value)
プッシュに使用されるリクエストヘッダーを設定します。
|
PushBuilder method(String method)
プッシュに使用される(HTTPの)メソッドを設定します。
method
- プッシュに使用する(HTTPの)メソッドNullPointerException
- 引数が null
の場合IllegalArgumentException
- 引数が空文字列だった場合や、RFC 7231で定義されたキャッシュができないか安全でない、POST、PUT、DELETE、CONNECT、OPTIONS、TRACEメソッドの場合。PushBuilder queryString(String queryString)
path(String)
呼び出しに含まれるすべてのクエリ文字列に追加されます。
重複するパラメータはすべて保持しなければいけません。
このメソッドは、同じクエリ文字列で複数のpush()
を呼び出すときに path(String)
のクエリの代わりに使用する必要があります。queryString
- プッシュに使用されるクエリ文字列PushBuilder sessionId(String sessionId)
sessionId
- プッシュに使用されるセッションIDPushBuilder setHeader(String name, String value)
プッシュに使用されるリクエストヘッダーを設定します。すでにヘッダーに同じ名前が含まれていた場合、その値は上書きされます。
name
- 設定されるヘッダーの名前value
- 設定されるヘッダーの値PushBuilder addHeader(String name, String value)
プッシュに使用されるリクエストヘッダーの値を追加します。
name
- 追加されるヘッダーの名前value
- 追加されるヘッダーの値PushBuilder removeHeader(String name)
リクエストヘッダーから指定された名前を削除します。ヘッダーに存在しない場合何もしません。
name
- 削除されるヘッダーの名前PushBuilder path(String path)
push()
メソッドを毎回呼び出すたびにpath(String)
メソッドも呼び出す必要があります。
クエリ文字列がpath
引数で渡された場合、その内容は以前にqueryString(java.lang.String)
メソッドで渡された内容とマージされ、重複が保存される必要があります。path
- プッシュに使用されるクエリ文字列を含むことがあるURIパスvoid push()
PushBuilderの現在の状態に基づいてリソースをプッシュします。 このメソッドを呼び出してもリソースが実際にプッシュされることが保証されるわけではありません。 なぜならばHTTP/2プロトコルではクライアントはプッシュされたリソースの受け入れを拒否することができるからです。
PushBuilderにセッションIDがある場合、プッシュされたリクエストにはCookieまたはURIパラメーターとして適切なセッションIDが含まれます。 PushBuilderのクエリ文字列は渡されたクエリ文字列とマージされます。
このメソッドから戻る前にビルダーはパスと条件付きヘッダー(conditionalヘッダー:RFC 7232で定義されています)をnullにしています。 他のすべてのフィールドの値は別のプッシュで再利用することができるようにそのままです。
IllegalStateException
- インスタンス化されてから、もしくは最後のIllegalStateExceptionが発生しなかった
push()
メソッドの呼び出しのからpath(java.lang.String)
メソッドが呼び出されていなかった場合。String getMethod()
String getQueryString()
String getSessionId()
Set<String> getHeaderNames()
返されたsetはPushBuilder
オブジェクトにから切り離されるため、返されたセットの変更はPushBuilder
オブジェクトに反映されず、その逆もそうです。
String getHeader(String name)
name
- ヘッダーの名前String getPath()
Copyright © 1999-2017, Oracle and/or its affiliates. All Rights Reserved. Use is subject to license terms. Portions Copyright © 1999-2002 The Apache Software Foundation. Portions Copyright © 2017- @megascus. Translated by @megascus.