クラス ResourceWebHandler

java.lang.ObjectSE
org.springframework.web.reactive.resource.ResourceWebHandler
実装されたすべてのインターフェース:
InitializingBeanWebHandler

public class ResourceWebHandler extends ObjectSE implements WebHandler, InitializingBean
PageSpeed、YSlow などのガイドラインに従って最適化された方法で静的リソースを提供する HttpRequestHandler 

"locations" プロパティは、静的リソースがこのハンドラーによって提供されることを許可されている Spring Resource ロケーションのリストを取ります。リソースは、クラスパスの場所から提供できます。"classpath:/META-INF/public-web-resources/"。jar ファイルで .js、.css などのリソースを便利にパッケージ化して提供できます。

このリクエストハンドラーは、resourcesResolver および resourceTransformer チェーンで構成して、提供されるリソースの任意の解決と変換をサポートすることもできます。デフォルトでは、PathResourceResolver は設定された「場所」に基づいてリソースを単に検索します。アプリケーションは、URL にあるバージョンのリソースの URL を解決および準備できる VersionResourceResolver などの追加のリゾルバーおよびトランスフォーマーを構成できます。

また、このハンドラーは Last-Modified ヘッダー(存在する場合)を適切に評価するため、304 ステータスコードが適切に返され、クライアントによってすでにキャッシュされているリソースの不要なオーバーヘッドが回避されます。

導入:
5.0
作成者:
Rossen Stoyanchev, Brian Clozel, Juergen Hoeller
  • コンストラクターの詳細

    • ResourceWebHandler

      public ResourceWebHandler()
  • メソッドの詳細

    • setResourceLoader

      public void setResourceLoader(ResourceLoader resourceLoader)
      location values をロードする ResourceLoader を提供します。
      導入:
      5.1
    • setLocationValues

      public void setLocationValues(ListSE<StringSE> locationValues)
      Resource ロケーションに解決される文字列ベースのロケーション値のリストを受け入れます。
      導入:
      5.1
    • getLocationValues

      public ListSE<StringSE> getLocationValues()
      構成された場所の値を返します。
      導入:
      5.1
    • setLocations

      public void setLocations(@Nullable ListSE<Resource> locations)
      静的リソースを提供するためのソースとして使用する Resource パスの List を設定します。
    • getLocations

      public ListSE<Resource> getLocations()
      静的リソースを提供するためのソースとして使用する Resource パスの List を返します。

      ロードされたリソースベースの場所の代わりに locationValues が提供される場合、このメソッドは afterPropertiesSet() による初期化の後まで空を返すことに注意してください。

      注意 : 5.3.11 の時点で、場所のリストは実際には存在しない場所を除外するようにフィルタリングされる可能性があるため、このメソッドから返されるリストは、指定されたすべての場所のサブセットである可能性があります。setOptimizeLocations(boolean) を参照してください。

      関連事項:
    • setResourceResolvers

      public void setResourceResolvers(@Nullable ListSE<ResourceResolver> resourceResolvers)
      使用する ResourceResolvers のリストを構成します。

      デフォルトでは、PathResourceResolver が構成されています。このプロパティを使用する場合、PathResourceResolver を最後のリゾルバーとして追加することをお勧めします。

    • getResourceResolvers

      public ListSE<ResourceResolver> getResourceResolvers()
      設定されたリソースリゾルバーのリストを返します。
    • setResourceTransformers

      public void setResourceTransformers(@Nullable ListSE<ResourceTransformer> resourceTransformers)
      使用する ResourceTransformers のリストを構成します。

      デフォルトでは、使用するトランスフォーマは構成されていません。

    • getResourceTransformers

      public ListSE<ResourceTransformer> getResourceTransformers()
      設定済みのリソーストランスフォーマのリストを返します。
    • setResourceHttpMessageWriter

      public void setResourceHttpMessageWriter(@Nullable ResourceHttpMessageWriter httpMessageWriter)
      使用する ResourceHttpMessageWriter を構成します。

      デフォルトでは、ResourceHttpMessageWriter が構成されます。

    • getResourceHttpMessageWriter

      @Nullable public ResourceHttpMessageWriter getResourceHttpMessageWriter()
      構成されたリソースメッセージライターを返します。
    • setCacheControl

      public void setCacheControl(@Nullable CacheControl cacheControl)
      CacheControl インスタンスを設定して、Cache-Control HTTP レスポンスヘッダーを構築します。
    • getCacheControl

      @Nullable public CacheControl getCacheControl()
      CacheControl インスタンスを返して、Cache-Control HTTP レスポンスヘッダーを作成します。
    • setUseLastModified

      public void setUseLastModified(boolean useLastModified)
      リソースを提供するときに Resource.lastModified() を確認し、この情報を使用して "Last-Modified" HTTP レスポンスヘッダーを駆動するかどうかを設定します。

      このオプションはデフォルトで有効になっており、静的ファイルのメタデータを無視する必要がある場合はオフにする必要があります。

      導入:
      5.3
    • isUseLastModified

      public boolean isUseLastModified()
      静的リソースを提供するときに、Resource.lastModified() 情報を使用して HTTP レスポンスを駆動するかどうかを返します。
      導入:
      5.3
    • setEtagGenerator

      public void setEtagGenerator(@Nullable FunctionSE<Resource,StringSE> etagGenerator)
      レスポンスに書き込もうとしている Resource を考慮して、ETag 情報の作成に使用されるジェネレーター関数を構成します。

      この関数は、ServerWebExchange.checkNotModified(String) で引数として使用される String を返す必要があります。指定されたリソースに対して値を生成できない場合は null で引数として使用されます。

      パラメーター:
      etagGenerator - 使用する HTTP ETag ジェネレーター関数。
      導入:
      6.1
    • getEtagGenerator

      @Nullable public FunctionSE<Resource,StringSE> getEtagGenerator()
      リソースを提供するときに使用される HTTP ETag ジェネレーター関数を返します。
      戻り値:
      HTTP ETag ジェネレーター関数
      導入:
      6.1
    • setOptimizeLocations

      public void setOptimizeLocations(boolean optimizeLocations)
      起動時の存在チェックで指定した場所を最適化するかどうかを設定し、存在しないディレクトリを事前にフィルタリングして、すべてのリソースアクセスでチェックする必要がないようにします。

      デフォルトは false です。これは、ディレクトリの存在を事前に公開できないディレクトリエントリのない zip ファイルに対する防御のためです。ディレクトリエントリとの一貫した jar レイアウトの場合に最適化されたアクセスのために、このフラグを true に切り替えます。

      導入:
      5.3.13
    • isOptimizeLocations

      public boolean isOptimizeLocations()
      起動時の存在チェックを通じて指定された場所を最適化するかどうかを返し、存在しないディレクトリを事前にフィルタリングして、すべてのリソースアクセスでチェックする必要がないようにします。
      導入:
      5.3.13
    • setMediaTypes

      public void setMediaTypes(MapSE<StringSE,MediaType> mediaTypes)
      静的 Resource のファイル名から抽出されたファイル拡張子と、レスポンスに使用するメディア型との間にマッピングを追加します。

      マッピングは MediaTypeFactory.getMediaType(Resource) を介して決定することもできるため、通常、この方法を使用する必要はありません。

      パラメーター:
      mediaTypes - メディア型のマッピング
      導入:
      5.3.2
    • getMediaTypes

      public MapSE<StringSE,MediaType> getMediaTypes()
      configured メディア型マッピングを返します。
      導入:
      5.3.2
    • afterPropertiesSet

      public void afterPropertiesSet() throws ExceptionSE
      インターフェースからコピーされた説明: InitializingBean
      すべての Bean プロパティを設定し、BeanFactoryAwareApplicationContextAware などを満たした後、包含 BeanFactory によって呼び出されます。

      このメソッドにより、Bean インスタンスは、すべての Bean プロパティが設定されたときに、その全体的な構成の検証と最終的な初期化を実行できます。

      次で指定:
      インターフェース InitializingBeanafterPropertiesSet 
      例外:
      ExceptionSE - 構成の誤り(必須プロパティの設定の失敗など)の場合、またはその他の理由で初期化が失敗した場合
    • initAllowedLocations

      protected void initAllowedLocations()
      構成されたリソースリゾルバーの中から PathResourceResolver を探し、そのクラスで構成された locations と一致するように allowedLocations プロパティ(空の場合)を設定します。
    • handle

      public reactor.core.publisher.Mono<VoidSE> handle(ServerWebExchange exchange)
      リソースリクエストを処理します。

      設定された場所のリストでリクエストされたリソースの存在を確認します。リソースが存在しない場合、404 レスポンスがクライアントに返されます。リソースが存在する場合、Last-Modified ヘッダーの存在についてリクエストがチェックされ、その値は指定されたリソースの最終変更タイムスタンプと比較され、Last-Modified 値が大きい場合は 304 ステータスコードが返されます。リソースが Last-Modified 値よりも新しい場合、またはヘッダーが存在しない場合、リソースのコンテンツリソースは、キャッシュヘッダーが 1 年後に期限切れになるように設定されたレスポンスに書き込まれます。

      次で指定:
      インターフェース WebHandlerhandle 
      パラメーター:
      exchange - 現在のサーバー交換
      戻り値:
      リクエスト処理が完了したことを示す Mono<Void> 
    • getResource

      protected reactor.core.publisher.Mono<Resource> getResource(ServerWebExchange exchange)
    • processPath

      protected StringSE processPath(StringSE path)
      指定されたリソースパスを処理します。

      デフォルトの実装は次のものに置き換わります。

      • バックスラッシュとスラッシュ。
      • スラッシュが 1 つのスラッシュと重複しています。
      • 先頭のスラッシュと制御文字(00-1F および 7F)の任意の組み合わせと単一の "/" または ""。たとえば、" / // foo/bar" は "/foo/bar" になります。
    • isInvalidPath

      protected boolean isInvalidPath(StringSE path)
      無効なリソースパスを識別します。デフォルトでは拒否:
      • "WEB-INF" または "META-INF" を含むパス
      • StringUtils.cleanPath(java.lang.String) の呼び出し後の "../" を含むパス。
      • valid URL を表すパス、または先頭のスラッシュが削除された後のパスを表すパス。

      注意 : この方法では、先頭の重複する "/" または制御文字(空白など)が削除され、パスが単一の "/" で予測どおりに開始するか、パスが 1 つもないことが想定されています。

      パラメーター:
      path - 検証するパス
      戻り値:
      パスが無効な場合は true、そうでない場合は false 
    • setHeaders

      protected void setHeaders(ServerWebExchange exchange, Resource resource, @Nullable MediaType mediaType) throws IOExceptionSE
      レスポンスにヘッダーを設定します。GET リクエストと HEAD リクエストの両方で呼び出されます。
      パラメーター:
      exchange - 現在の交換
      resource - 特定されたリソース (非 null)
      mediaType - リソースのメディア型 (非 null)
      例外:
      IOExceptionSE
    • toString

      public StringSE toString()
      オーバーライド:
      クラス ObjectSEtoString