Class DefaultStaticContentLoader

java.lang.Object
org.apache.struts2.dispatcher.DefaultStaticContentLoader
All Implemented Interfaces:
StaticContentLoader

public class DefaultStaticContentLoader extends Object implements StaticContentLoader

Default implementation to server static content

This class is used to serve common static content needed when using various parts of Struts, such as JavaScript files, CSS files, etc. It works by looking for requests to uiStaticContentPath/* and then mapping the value after to common packages in Struts and, optionally, in your class path. By default, the following packages are automatically searched:

  • org.apache.struts2.static
  • template
  • static

This means that you can simply request uiStaticContentPath/xhtml/styles.css and the XHTML UI theme's default stylesheet will be returned. Likewise, many of the AJAX UI components require various JavaScript files, which are found in the org.apache.struts2.static package. If you wish to add additional packages to be searched, you can add a comma separated (space, tab and new line will do as well) list in the filter init parameter named "packages". Be careful, however, to expose any packages that may have sensitive information, such as properties file with database access credentials.

  • Field Details

    • pathPrefixes

      protected List<String> pathPrefixes
      Store set of path prefixes to use with static resources.
    • serveStatic

      protected boolean serveStatic
      Store state of StrutsConstants.STRUTS_SERVE_STATIC_CONTENT setting.
    • uiStaticContentPath

      protected String uiStaticContentPath
    • serveStaticBrowserCache

      protected boolean serveStaticBrowserCache
      Store state of StrutsConstants.STRUTS_SERVE_STATIC_BROWSER_CACHE setting.
    • lastModifiedCal

      protected final Calendar lastModifiedCal
      Provide a formatted date for setting heading information when caching static content.
    • encoding

      protected String encoding
      Store state of StrutsConstants.STRUTS_I18N_ENCODING setting.
    • devMode

      protected boolean devMode
  • Constructor Details

    • DefaultStaticContentLoader

      public DefaultStaticContentLoader()
  • Method Details

    • setServeStaticContent

      public void setServeStaticContent(String serveStaticContent)
      Modify state of StrutsConstants.STRUTS_SERVE_STATIC_CONTENT setting.
      Parameters:
      serveStaticContent - New setting
    • setStaticContentPath

      public void setStaticContentPath(String uiStaticContentPath)
    • setServeStaticBrowserCache

      public void setServeStaticBrowserCache(String serveStaticBrowserCache)
      Modify state of StrutsConstants.STRUTS_SERVE_STATIC_BROWSER_CACHE setting.
      Parameters:
      serveStaticBrowserCache - New setting
    • setEncoding

      public void setEncoding(String encoding)
      Modify state of StrutsConstants.STRUTS_I18N_ENCODING setting.
      Parameters:
      encoding - New setting
    • setDevMode

      public void setDevMode(String devMode)
    • setHostConfig

      public void setHostConfig(HostConfig filterConfig)
      Specified by:
      setHostConfig in interface StaticContentLoader
      Parameters:
      filterConfig - The filter configuration
    • getAdditionalPackages

      protected String getAdditionalPackages()
    • parse

      protected List<String> parse(String packages)
      Create a string array from a comma-delimited list of packages.
      Parameters:
      packages - A comma-delimited String listing packages
      Returns:
      A string array of packages
    • findStaticResource

      public void findStaticResource(String path, jakarta.servlet.http.HttpServletRequest request, jakarta.servlet.http.HttpServletResponse response) throws IOException
      Description copied from interface: StaticContentLoader
      Locate a static resource and copy directly to the response, setting the appropriate caching headers.
      Specified by:
      findStaticResource in interface StaticContentLoader
      Parameters:
      path - The resource name
      request - The request
      response - The response
      Throws:
      IOException - If anything goes wrong
    • process

      protected void process(InputStream is, String path, jakarta.servlet.http.HttpServletRequest request, jakarta.servlet.http.HttpServletResponse response) throws IOException
      Throws:
      IOException
    • findResource

      protected URL findResource(String path) throws IOException
      Look for a static resource in the classpath.
      Parameters:
      path - The resource path
      Returns:
      The URL of the resource
      Throws:
      IOException - If there is a problem locating the resource
    • buildPath

      protected String buildPath(String name, String packagePrefix) throws UnsupportedEncodingException
      Parameters:
      name - resource name
      packagePrefix - The package prefix to use to locate the resource
      Returns:
      full path
      Throws:
      UnsupportedEncodingException - If there is a encoding problem
    • getContentType

      protected String getContentType(String name)
      Determine the content type for the resource name.
      Parameters:
      name - The resource name
      Returns:
      The mime type
    • copy

      protected void copy(InputStream input, OutputStream output) throws IOException
      Copy bytes from the input stream to the output stream.
      Parameters:
      input - The input stream
      output - The output stream
      Throws:
      IOException - If anything goes wrong
    • canHandle

      public boolean canHandle(String resourcePath)
      Specified by:
      canHandle in interface StaticContentLoader
      Parameters:
      resourcePath - Requested resource path
      Returns:
      true if this loader is able to load this type of resource, false otherwise
    • cleanupPath

      protected String cleanupPath(String path)
      Parameters:
      path - requested path
      Returns:
      path without leading uiStaticContentPath