クラス RedirectView

実装されたすべてのインターフェース:
AwareBeanNameAwareInitializingBeanApplicationContextAwareServletContextAwareSmartViewView

public class RedirectView extends AbstractUrlBasedView implements SmartView
絶対 URL、コンテキスト相対 URL、現在のリクエスト相対 URL にリダイレクトするビュー。URL は URI テンプレートの場合があり、その場合、URI テンプレート変数はモデルで使用可能な値に置き換えられます。デフォルトでは、すべてのプリミティブモデル属性(またはそのコレクション)は HTTP クエリパラメーターとして公開されます(URI テンプレート変数として使用されていない場合)が、この動作は isEligibleProperty(String, Object) メソッドをオーバーライドすることで変更できます。

このビューの URL は、HTTP リダイレクト URL であることが想定されています。つまり、HttpServletResponse の sendRedirect メソッドに適しています。これは、HTTP 1.0 フラグがオンの場合、または HTTP 303 コードの送信を介してリダイレクトを実際に行うものです -HTTP 1.0 互換性の場合フラグはオフです。

"contextRelative" フラグのデフォルト値はオフですが、ほとんどの場合は true に設定することをお勧めします。フラグをオフにすると、"/" で始まる URL は Web サーバーのルートを基準にして見なされ、フラグをオンにすると、Web アプリケーションのルートを基準にして見なされます。ほとんどの Web アプリケーションは、コンテキストパスが実際に何であるかを決して認識または気にしないため、このフラグを true に設定し、Web アプリケーションルートからの相対パスと見なすことをお勧めします。

ポートレット環境でこのリダイレクトビューを使用する場合の注意 : コントローラーがポートレット sendRedirect 制約を遵守していることを確認してください。

作成者:
Rod Johnson, Juergen Hoeller, Colin Sampaleanu, Sam Brannen, Arjen Poutsma, Rossen Stoyanchev
関連事項:
  • コンストラクターの詳細

    • RedirectView

      public RedirectView()
      Bean として使用するコンストラクター。
    • RedirectView

      public RedirectView(StringSE url)
      指定された URL で新しい RedirectView を作成します。

      指定された URL は、現在の ServletContext に対してではなく、Web サーバーに対するものと見なされます。

      パラメーター:
      url - リダイレクト先の URL
      関連事項:
    • RedirectView

      public RedirectView(StringSE url, boolean contextRelative)
      指定された URL で新しい RedirectView を作成します。
      パラメーター:
      url - リダイレクト先の URL
      contextRelative - 指定された URL を現在の ServletContext を基準にして解釈するかどうか
    • RedirectView

      public RedirectView(StringSE url, boolean contextRelative, boolean http10Compatible)
      指定された URL で新しい RedirectView を作成します。
      パラメーター:
      url - リダイレクト先の URL
      contextRelative - 指定された URL を現在の ServletContext を基準にして解釈するかどうか
      http10Compatible - HTTP 1.0 クライアントとの互換性を維持するかどうか
    • RedirectView

      public RedirectView(StringSE url, boolean contextRelative, boolean http10Compatible, boolean exposeModelAttributes)
      指定された URL で新しい RedirectView を作成します。
      パラメーター:
      url - リダイレクト先の URL
      contextRelative - 指定された URL を現在の ServletContext を基準にして解釈するかどうか
      http10Compatible - HTTP 1.0 クライアントとの互換性を維持するかどうか
      exposeModelAttributes - モデル属性をクエリパラメーターとして公開する必要があるかどうか
  • メソッドの詳細

    • setContextRelative

      public void setContextRelative(boolean contextRelative)
      スラッシュ("/")で始まる特定の URL を、現在の ServletContext を基準として、つまり Web アプリケーションのルートを基準として解釈するかどうかを設定します。

      デフォルトは「false」: スラッシュで始まる URL は、絶対的なものとして解釈されます。つまり、そのまま解釈されます。"true" の場合、このような場合、コンテキストパスが URL の前に付加されます。

      関連事項:
    • setHttp10Compatible

      public void setHttp10Compatible(boolean http10Compatible)
      HTTP 1.0 クライアントとの互換性を維持するかどうかを設定します。

      デフォルトの実装では、これにより HTTP ステータスコード 302 が強制されます。つまり、HttpServletResponse.sendRedirect に委譲されます。これをオフにすると、HTTP 1.1 クライアントの正しいコードである HTTP ステータスコード 303 が送信されますが、HTTP 1.0 クライアントでは認識されません。

      多くの HTTP 1.1 クライアントは、302 を 303 のように扱い、違いはありません。ただし、POST リクエストの後でリダイレクトする場合、一部のクライアントは 303 に依存します。このようなシナリオでは、このフラグをオフにしてください。

      関連事項:
    • setExposeModelAttributes

      public void setExposeModelAttributes(boolean exposeModelAttributes)
      モデル属性を HTTP クエリパラメーターとして公開するかどうかを示す exposeModelAttributes フラグを設定します。

      デフォルトは true です。

    • setEncodingScheme

      public void setEncodingScheme(StringSE encodingScheme)
      このビューのコード化スキームを設定します。

      デフォルトはリクエストのコード化スキームです(特に指定されていない場合は ISO-8859-1 です)。

    • setStatusCode

      public void setStatusCode(HttpStatusCode statusCode)
      このビューのステータスコードを設定します。

      デフォルトでは、http10Compatible フラグの値に応じて、302/303 を送信します。

    • setExpandUriTemplateVariables

      public void setExpandUriTemplateVariables(boolean expandUriTemplateVariables)
      リダイレクト URL を URI テンプレートとして扱うかどうか。リダイレクト URL にオープンおよびクローズの波括弧 "{"、"}" が含まれていて、URI 変数として解釈させたくない場合は、このフラグを false に設定します。

      デフォルトは true です。

    • setPropagateQueryParams

      public void setPropagateQueryParams(boolean propagateQueryParams)
      true に設定すると、現在の URL のクエリ文字列が追加され、リダイレクトされた URL に伝達されます。

      デフォルトは false です。

      導入:
      4.1
    • isPropagateQueryProperties

      public boolean isPropagateQueryProperties()
      現在の URL のクエリパラメーターを伝達するかどうか。
      導入:
      4.1
    • setHosts

      public void setHosts(@Nullable StringSE... hosts)
      アプリケーションに関連付けられた 1 つ以上のホストを構成します。他のすべてのホストは外部ホストと見なされます。

      実際、このプロパティは、ホストがあり、そのホストが既知のホストとしてリストされていない URL に対して、HttpServletResponse.encodeRedirectURL(java.lang.String)EE を介したエンコーディングをオフにする方法を提供します。

      設定されていない場合(デフォルト)、すべての URL がレスポンスを通じてエンコードされます。

      パラメーター:
      hosts - 1 つ以上のアプリケーションホスト
      導入:
      4.3
    • getHosts

      @Nullable public StringSE[] getHosts()
      設定されたアプリケーションホストを返します。
      導入:
      4.3
    • isRedirectView

      public boolean isRedirectView()
      このビューがリダイレクトを実行することを示す "true" を返します。
      次で指定:
      インターフェース SmartViewisRedirectView 
    • isContextRequired

      protected boolean isContextRequired()
      ApplicationContext は、RedirectView には厳密には必要ありません。
      オーバーライド:
      クラス WebApplicationObjectSupportisContextRequired 
      関連事項:
    • renderMergedOutputModel

      protected void renderMergedOutputModel(MapSE<StringSE,ObjectSE> model, HttpServletRequestEE request, HttpServletResponseEE response) throws IOExceptionSE
      モデルをリクエストパラメーターに変換し、指定された URL にリダイレクトします。
      次で指定:
      クラス AbstractViewrenderMergedOutputModel 
      パラメーター:
      model - 静的な属性よりも動的な値が優先される、結合された出力マップ(非 null
      request - 現在の HTTP リクエスト
      response - 現在の HTTP レスポンス
      例外:
      IOExceptionSE
      関連事項:
    • createTargetUrl

      protected final StringSE createTargetUrl(MapSE<StringSE,ObjectSE> model, HttpServletRequestEE request) throws UnsupportedEncodingExceptionSE
      最初にリダイレクト文字列が URI テンプレートであるかどうかを確認してターゲット URL を作成し、指定されたモデルでそれを展開してから、オプションでクエリ文字列パラメーターとして単純型モデル属性を追加します。
      例外:
      UnsupportedEncodingExceptionSE
    • replaceUriTemplateVariables

      protected StringBuilderSE replaceUriTemplateVariables(StringSE targetUrl, MapSE<StringSE,ObjectSE> model, MapSE<StringSE,StringSE> currentUriVariables, StringSE encodingScheme) throws UnsupportedEncodingExceptionSE
      ターゲット URL の URI テンプレート変数を、現在のリクエストからのエンコードされたモデル属性または URI 変数に置き換えます。URL で参照されているモデル属性がモデルから削除されます。
      パラメーター:
      targetUrl - リダイレクト URL
      model - モデル属性を含むマップ
      currentUriVariables - 使用する現在のリクエスト URI 変数
      encodingScheme - 使用するコード化スキーム
      例外:
      UnsupportedEncodingExceptionSE - 文字列のエンコードに失敗した場合
    • appendCurrentQueryParams

      protected void appendCurrentQueryParams(StringBuilderSE targetUrl, HttpServletRequestEE request)
      現在のリクエストのクエリ文字列をターゲットリダイレクト URL に追加します。
      パラメーター:
      targetUrl - プロパティを追加する StringBuilder
      request - 現在のリクエスト
      導入:
      4.1
    • appendQueryProperties

      protected void appendQueryProperties(StringBuilderSE targetUrl, MapSE<StringSE,ObjectSE> model, StringSE encodingScheme) throws UnsupportedEncodingExceptionSE
      クエリのプロパティをリダイレクト URL に追加します。モデル属性をクエリプロパティとして文字列化、URL エンコード、フォーマットします。
      パラメーター:
      targetUrl - プロパティを追加する StringBuilder
      model - モデル属性を含むマップ
      encodingScheme - 使用するコード化スキーム
      例外:
      UnsupportedEncodingExceptionSE - 文字列のエンコードに失敗した場合
      関連事項:
    • queryProperties

      protected MapSE<StringSE,ObjectSE> queryProperties(MapSE<StringSE,ObjectSE> model)
      appendQueryProperties(java.lang.StringBuilder, java.util.Map<java.lang.String, java.lang.Object>, java.lang.String) によって文字列化、URL エンコード、フォーマットされるクエリ文字列の名前と値のペアを決定します。

      この実装では、デフォルトで文字列、プリミティブ、プリミティブラッパーのみを受け入れ、各要素の isEligibleProperty(String, Object) をチェックすることでモデルをフィルタリングします。

      パラメーター:
      model - 元のモデルマップ
      戻り値:
      適格なクエリプロパティのフィルターされたマップ
      関連事項:
    • isEligibleProperty

      protected boolean isEligibleProperty(StringSE key, @Nullable ObjectSE value)
      指定されたモデル要素をクエリプロパティとして公開するかどうかを決定します。

      デフォルトの実装では、文字列とプリミティブが適格であると見なされ、対応する要素を持つ配列とコレクション / イテラブルも考慮されます。これはサブクラスでオーバーライドできます。

      パラメーター:
      key - モデル要素のキー
      value - モデル要素の値
      戻り値:
      要素がクエリプロパティとして適格かどうか
    • isEligibleValue

      protected boolean isEligibleValue(@Nullable ObjectSE value)
      指定されたモデル要素の値が公開の対象かどうかを判断します。

      BeanUtils.isSimpleValueType(java.lang.Class<?>) によると、デフォルトの実装では、プリミティブ、文字列、数値、日付、URI、URL などが適格と見なされます。これはサブクラスでオーバーライドできます。

      パラメーター:
      value - モデル要素の値
      戻り値:
      要素の値が適格かどうか
      関連事項:
    • urlEncode

      protected StringSE urlEncode(StringSE input, StringSE encodingScheme) throws UnsupportedEncodingExceptionSE
      指定されたエンコードスキームを使用して、指定された入力文字列を URL エンコードします。

      デフォルトの実装では URLEncoder.encode(input, enc) を使用します。

      パラメーター:
      input - エンコードされていない入力文字列
      encodingScheme - エンコーディングスキーム
      戻り値:
      エンコードされた出力文字列
      例外:
      UnsupportedEncodingExceptionSE - JDK URLEncoder によってスローされた場合
      関連事項:
    • updateTargetUrl

      protected StringSE updateTargetUrl(StringSE targetUrl, MapSE<StringSE,ObjectSE> model, HttpServletRequestEE request, HttpServletResponseEE response)
      登録されている RequestDataValueProcessor がある場合は検索して、リダイレクトターゲット URL を更新できるようにします。
      パラメーター:
      targetUrl - 指定されたリダイレクト URL
      戻り値:
      更新された URL または渡された URL と同じ
    • sendRedirect

      protected void sendRedirect(HttpServletRequestEE request, HttpServletResponseEE response, StringSE targetUrl, boolean http10Compatible) throws IOExceptionSE
      HTTP クライアントにリダイレクトを送り返します。
      パラメーター:
      request - 現在の HTTP リクエスト (リクエストメソッドに反応することができます)
      response - 現在の HTTP レスポンス (レスポンスヘッダーを送信するため)
      targetUrl - リダイレクトするターゲット URL
      http10Compatible - HTTP 1.0 クライアントとの互換性を維持するかどうか
      例外:
      IOExceptionSE - レスポンスメソッドによってスローされた場合
    • isRemoteHost

      protected boolean isRemoteHost(StringSE targetUrl)
      指定された targetUrl に「外部」システムであるホストがあるかどうか。この場合、HttpServletResponse.encodeRedirectURL(java.lang.String)EE は適用されません。

      このメソッドは、setHosts(String[]) プロパティが構成されていて、ターゲット URL に一致しないホストがある場合に true を返します。

      パラメーター:
      targetUrl - ターゲットのリダイレクト URL
      戻り値:
      ターゲット URL にリモートホストがある場合は true、URL にホストがない場合または "host" プロパティが構成されていない場合は false 
      導入:
      4.3
    • getHttp11StatusCode

      protected HttpStatusCode getHttp11StatusCode(HttpServletRequestEE request, HttpServletResponseEE response, StringSE targetUrl)
      HTTP 1.1 互換リクエストに使用するステータスコードを決定します。

      デフォルトの実装は、設定されている場合は statusCode プロパティ、または View.RESPONSE_STATUS_ATTRIBUTE 属性の値を返します。どちらも設定されていない場合、デフォルトは HttpStatus.SEE_OTHER(303) です。

      パラメーター:
      request - インスペクション依頼
      response - サーブレットレスポンス
      targetUrl - ターゲット URL
      戻り値:
      レスポンスステータス