org.springframework.web.context.support

## Class ServletContextResource

- java.lang.Object
- - org.springframework.core.io.AbstractResource
  - - org.springframework.core.io.AbstractFileResolvingResource
    - - org.springframework.web.context.support.ServletContextResource

- All Implemented Interfaces:
    ContextResource, InputStreamSource, Resource

      public class ServletContextResource
      extends AbstractFileResolvingResource
      implements ContextResource

  `Resource` implementation for `ServletContext` resources, interpreting relative paths within the web application root directory.

  Always supports stream access and URL access, but only allows `java.io.File` access when the web application archive is expanded.

  Since:
    28.12.2003
  Author:
    Juergen Hoeller
  See Also:
    `ServletContext.getResourceAsStream(java.lang.String)`, `ServletContext.getResource(java.lang.String)`, `ServletContext.getRealPath(java.lang.String)`

- - ### Constructor Summary

    Constructors
    Constructor and Description
    `ServletContextResource(ServletContext servletContext, String path)` Create a new `ServletContextResource` for the given path.

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `Resource` | `createRelative(String relativePath)` This implementation creates a ServletContextResource, applying the given path relative to the path of the underlying file of this resource descriptor.
    `boolean` | `equals(Object other)` This implementation compares the underlying ServletContext resource locations.
    `boolean` | `exists()` This implementation checks `ServletContext.getResource`.
    `String` | `getDescription()` This implementation returns a description that includes the ServletContext resource location.
    `File` | `getFile()` This implementation resolves "file:" URLs or alternatively delegates to `ServletContext.getRealPath`, throwing a FileNotFoundException if not found or not resolvable.
    `String` | `getFilename()` This implementation returns the name of the file that this ServletContext resource refers to.
    `InputStream` | `getInputStream()` This implementation delegates to `ServletContext.getResourceAsStream`, but throws a FileNotFoundException if no resource found.
    `String` | `getPath()` Return the path for this resource.
    `String` | `getPathWithinContext()` Return the path within the enclosing 'context'.
    `ServletContext` | `getServletContext()` Return the ServletContext for this resource.
    `URL` | `getURL()` This implementation delegates to `ServletContext.getResource`, but throws a FileNotFoundException if no resource found.
    `int` | `hashCode()` This implementation returns the hash code of the underlying ServletContext resource location.
    `boolean` | `isFile()` This implementation always returns `false`.
    `boolean` | `isReadable()` This implementation delegates to `ServletContext.getResourceAsStream`, which returns `null` in case of a non-readable resource (e.g.

    - ### Methods inherited from class org.springframework.core.io.AbstractFileResolvingResource

      `contentLength, customizeConnection, customizeConnection, getFile, getFileForLastModifiedCheck, isFile, lastModified, readableChannel`

    - ### Methods inherited from class org.springframework.core.io.AbstractResource

      `getURI, isOpen, toString`

    - ### Methods inherited from class java.lang.Object

      `clone, finalize, getClass, notify, notifyAll, wait, wait, wait`

    - ### Methods inherited from interface org.springframework.core.io.Resource

      `contentLength, getURI, isOpen, lastModified, readableChannel`

- - ### Constructor Detail

    - #### ServletContextResource

          public ServletContextResource(ServletContext servletContext,
                                        String path)

      Create a new `ServletContextResource` for the given path.

      The Servlet spec requires that resource paths start with a slash, even if many containers accept paths without leading slash too. Consequently, the given path will be prepended with a slash if it doesn't already start with one.

      Parameters:
        `servletContext` - the ServletContext to load from
        `path` - the path of the resource

  - ### Method Detail

    - #### getServletContext

          public final ServletContext getServletContext()

      Return the ServletContext for this resource.

    - #### getPath

          public final String getPath()

      Return the path for this resource.

    - #### exists

          public boolean exists()

      This implementation checks `ServletContext.getResource`.
      Specified by:
        `exists` in interface `Resource`
      Overrides:
        `exists` in class `AbstractFileResolvingResource`
      See Also:
        `ServletContext.getResource(String)`

    - #### isReadable

          public boolean isReadable()

      This implementation delegates to `ServletContext.getResourceAsStream`, which returns `null` in case of a non-readable resource (e.g. a directory).
      Specified by:
        `isReadable` in interface `Resource`
      Overrides:
        `isReadable` in class `AbstractFileResolvingResource`
      See Also:
        `ServletContext.getResourceAsStream(String)`

    - #### isFile

          public boolean isFile()

      Description copied from class: `AbstractResource`
      This implementation always returns `false`.
      Specified by:
        `isFile` in interface `Resource`
      Overrides:
        `isFile` in class `AbstractFileResolvingResource`
      See Also:
        `Resource.getFile()`

    - #### getInputStream

          public InputStream getInputStream()
                                     throws IOException

      This implementation delegates to `ServletContext.getResourceAsStream`, but throws a FileNotFoundException if no resource found.
      Specified by:
        `getInputStream` in interface `InputStreamSource`
      Returns:
        the input stream for the underlying resource (must not be `null`)
      Throws:
        `FileNotFoundException` - if the underlying resource does not exist
        `IOException` - if the content stream could not be opened
      See Also:
        `ServletContext.getResourceAsStream(String)`

    - #### getURL

          public URL getURL()
                     throws IOException

      This implementation delegates to `ServletContext.getResource`, but throws a FileNotFoundException if no resource found.
      Specified by:
        `getURL` in interface `Resource`
      Overrides:
        `getURL` in class `AbstractResource`
      Throws:
        `IOException` - if the resource cannot be resolved as URL, i.e. if the resource is not available as a descriptor
      See Also:
        `ServletContext.getResource(String)`

    - #### getFile

          public File getFile()
                       throws IOException

      This implementation resolves "file:" URLs or alternatively delegates to `ServletContext.getRealPath`, throwing a FileNotFoundException if not found or not resolvable.
      Specified by:
        `getFile` in interface `Resource`
      Overrides:
        `getFile` in class `AbstractFileResolvingResource`
      Throws:
        `FileNotFoundException` - if the resource cannot be resolved as absolute file path, i.e. if the resource is not available in a file system
        `IOException` - in case of general resolution/reading failures
      See Also:
        `ServletContext.getResource(String)`, `ServletContext.getRealPath(String)`

    - #### createRelative

          public Resource createRelative(String relativePath)

      This implementation creates a ServletContextResource, applying the given path relative to the path of the underlying file of this resource descriptor.
      Specified by:
        `createRelative` in interface `Resource`
      Overrides:
        `createRelative` in class `AbstractResource`
      Parameters:
        `relativePath` - the relative path (relative to this resource)
      Returns:
        the resource handle for the relative resource
      See Also:
        `StringUtils.applyRelativePath(String, String)`

    - #### getFilename

          @Nullable
          public String getFilename()

      This implementation returns the name of the file that this ServletContext resource refers to.
      Specified by:
        `getFilename` in interface `Resource`
      Overrides:
        `getFilename` in class `AbstractResource`
      See Also:
        `StringUtils.getFilename(String)`

    - #### getDescription

          public String getDescription()

      This implementation returns a description that includes the ServletContext resource location.
      Specified by:
        `getDescription` in interface `Resource`
      See Also:
        `Object.toString()`

    - #### getPathWithinContext

          public String getPathWithinContext()

      Description copied from interface: `ContextResource`
      Return the path within the enclosing 'context'.

      This is typically path relative to a context-specific root directory, e.g. a ServletContext root or a PortletContext root.

      Specified by:
        `getPathWithinContext` in interface `ContextResource`

    - #### equals

          public boolean equals(@Nullable
                                Object other)

      This implementation compares the underlying ServletContext resource locations.
      Overrides:
        `equals` in class `AbstractResource`
      See Also:
        `Resource.getDescription()`

    - #### hashCode

          public int hashCode()

      This implementation returns the hash code of the underlying ServletContext resource location.
      Overrides:
        `hashCode` in class `AbstractResource`
      See Also:
        `Resource.getDescription()`