クラス ResourceHttpRequestHandler

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

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

プロパティ "locations" および "locationValues" は、このハンドラーが静的リソースを提供できる場所を受け入れます。これは、Web アプリケーションのルートからの相対的なもの、またはクラスパスからの相対的なものです。"classpath:/META-INF/public-web-resources/"。jar ファイルで .js、.css などのリソースを便利にパッケージ化して提供できます。

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

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

導入:
3.0.4
作成者:
Keith Donald, Jeremy Grelle, Juergen Hoeller, Arjen Poutsma, Brian Clozel, Rossen Stoyanchev
  • コンストラクターの詳細

    • ResourceHttpRequestHandler

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

    • setLocationValues

      public void setLocationValues(ListSE<StringSE> locations)
      リソースを提供する文字列ベースの場所を構成します。

      例: {"/""classpath:/META-INF/public-web-resources/"} では、Web アプリケーションルートと、/META-INF/public-web-resources/ ディレクトリを含むクラスパス上の JAR の両方からリソースを提供できます。Web アプリケーションルートのリソースが優先されます。

      URL-based resources(ファイル、HTTP URL など)の場合、このメソッドは、URL に関連付けられた文字セットを示す特別なプレフィックスをサポートし、それに追加された相対パスを正しくエンコードできるようにします(例: "[charset=Windows-31J]https://example.org/path")。

      導入:
      4.3.13
      関連事項:
    • setLocations

      public void setLocations(ListSE<Resource> locations)
      事前リソースリソースとしてリソースを提供する場所を構成します。
      関連事項:
    • getLocations

      public ListSE<Resource> getLocations()
      setLocationValues を介して提供される文字列ベースの場所と setLocations を介して提供される事前解決済みの Resource の場所の両方を含む、Resource の場所の構成済み List を返します。

      返されるリストは、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()
      設定済みのリソーストランスフォーマのリストを返します。
    • setResourceHttpMessageConverter

      public void setResourceHttpMessageConverter(@Nullable ResourceHttpMessageConverter messageConverter)
      使用する ResourceHttpMessageConverter を構成します。

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

      導入:
      4.3
    • getResourceHttpMessageConverter

      @Nullable public ResourceHttpMessageConverter getResourceHttpMessageConverter()
      構成済みのリソースコンバーターを返します。
      導入:
      4.3
    • setResourceRegionHttpMessageConverter

      public void setResourceRegionHttpMessageConverter(@Nullable ResourceRegionHttpMessageConverter messageConverter)
      使用する ResourceRegionHttpMessageConverter を構成します。

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

      導入:
      4.3
    • getResourceRegionHttpMessageConverter

      @Nullable public ResourceRegionHttpMessageConverter getResourceRegionHttpMessageConverter()
      構成済みのリソース領域コンバーターを返します。
      導入:
      4.3
    • setContentNegotiationManager

      @DeprecatedSE public void setContentNegotiationManager(@Nullable ContentNegotiationManager contentNegotiationManager)
      使用すべきではありません。
      5.2.4 以降、ContentNegotiationManager.getMediaTypeMappings() から取得したマッピングで setMediaTypes(Map) を使用することを推奨します。
      ContentNegotiationManager を設定して、提供されているリソースのメディア型を決定します。マネージャーにパス拡張子戦略が含まれている場合、登録されているファイル拡張子がチェックされます。
      導入:
      4.3
    • getContentNegotiationManager

      @Nullable @DeprecatedSE public ContentNegotiationManager getContentNegotiationManager()
      使用すべきではありません。
      5.2.4 現在
      設定済みのコンテンツネゴシエーションマネージャーを返します。
      導入:
      4.3
    • setMediaTypes

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

      マッピングは ServletContext.getMimeType(String)EE または MediaTypeFactory.getMediaType(Resource) を介して別の方法で決定されるため、通常、このメソッドを使用する必要はありません。

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

      public MapSE<StringSE,MediaType> getMediaTypes()
      configured メディア型を返します。
      導入:
      5.2.4
    • setCorsConfiguration

      public void setCorsConfiguration(CorsConfiguration corsConfiguration)
      このハンドラーによって処理されるリソースの CORS 構成を指定します。

      デフォルトでは、これはクロスオリジンリクエストを許可するように設定されていません。

    • getCorsConfiguration

      @Nullable public CorsConfiguration getCorsConfiguration(HttpServletRequestEE request)
      指定された CORS 設定を返します。
      次で指定:
      インターフェース CorsConfigurationSourcegetCorsConfiguration 
      戻り値:
      関連する CorsConfiguration、または存在しない場合は null 
    • setUrlPathHelper

      public void setUrlPathHelper(@Nullable UrlPathHelper urlPathHelper)
      リクエストを静的リソースにマップするために使用される UrlPathHelper への参照を提供します。これは、デコードされているかどうかなど、ルックアップパスに関する情報を導き出すのに役立ちます。
      導入:
      4.3.13
    • getUrlPathHelper

      @Nullable public UrlPathHelper getUrlPathHelper()
      構成された UrlPathHelper
      導入:
      4.3.13
    • 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 情報の作成に使用されるジェネレーター関数を構成します。

      この関数は、ServletWebRequest.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
    • setEmbeddedValueResolver

      public void setEmbeddedValueResolver(StringValueResolver resolver)
      インターフェースからコピーされた説明: EmbeddedValueResolverAware
      StringValueResolver を設定して、埋め込まれた定義値の解決に使用します。
      次で指定:
      インターフェース EmbeddedValueResolverAwaresetEmbeddedValueResolver 
    • afterPropertiesSet

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

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

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

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

      @Nullable @DeprecatedSE protected PathExtensionContentNegotiationStrategy initContentNegotiationStrategy()
      使用すべきではありません。
      5.2.4 の時点で、このメソッドは null を返します。サブクラスが実際のインスタンスを返す場合、インスタンスはメディア型マッピングのソースとしてのみ使用されます(含まれている場合)。代わりに setMediaTypes(Map) を使用してください。動作を変更する必要がある場合は、getMediaType(HttpServletRequest, Resource) をオーバーライドできます。
      リソースのメディア型を決定するために使用する戦略を初期化します。
    • handleRequest

      public void handleRequest(HttpServletRequestEE request, HttpServletResponseEE response) throws ServletExceptionEE, IOExceptionSE
      リソースリクエストを処理します。

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

      次で指定:
      インターフェース HttpRequestHandlerhandleRequest 
      パラメーター:
      request - 現在の HTTP リクエスト
      response - 現在の HTTP レスポンス
      例外:
      ServletExceptionEE - 一般的なエラーの場合
      IOExceptionSE - I/O エラーの場合
    • getResource

      @Nullable protected Resource getResource(HttpServletRequestEE request) throws IOExceptionSE
      例外:
      IOExceptionSE
    • processPath

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

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

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

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

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

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

      @Nullable protected MediaType getMediaType(HttpServletRequestEE request, Resource resource)
      指定されたリクエストのメディア型とそれに一致するリソースを特定します。この実装は、リソースファイル名とそのパス拡張子に基づいて、次のルックアップのいずれかを使用して MediaType を決定しようとします。
      1. ServletContext.getMimeType(String)EE
      2. getMediaTypes()
      3. MediaTypeFactory.getMediaType(String)
      パラメーター:
      request - 現在のリクエスト
      resource - チェックするリソース
      戻り値:
      対応するメディア型、または見つからない場合は null 
    • setHeaders

      protected void setHeaders(HttpServletResponseEE response, Resource resource, @Nullable MediaType mediaType) throws IOExceptionSE
      指定されたサーブレットレスポンスにヘッダーを設定します。GET リクエストおよび HEAD リクエストに対して呼び出されます。
      パラメーター:
      response - 現在のサーブレットレスポンス
      resource - 特定されたリソース (非 null)
      mediaType - リソースのメディア型 (非 null)
      例外:
      IOExceptionSE - ヘッダーの設定中にエラーが発生した場合
    • toString

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