Class DownloadServlet

java.lang.Object
jakarta.servlet.GenericServlet
jakarta.servlet.http.HttpServlet
org.glassfish.admingui.common.servlet.DownloadServlet
All Implemented Interfaces:
jakarta.servlet.Servlet, jakarta.servlet.ServletConfig, Serializable

public class DownloadServlet extends jakarta.servlet.http.HttpServlet

This Servlet provides the ability to download information from the Server to the client. It provides the ability to set the content type of the downloaded file, if not specified, it will attempt to guess based on the extension (if possible). It requires the DownloadServlet#ContentSource of the data to download to be specified by passing in a ServletRequest parameter named CONTENT_SOURCE_ID. The DownloadServlet.ContentSource provides a plugable means of obtaining data from an arbitrary source (i.e. the filesystem, generated on the fly, from some network location, etc.). The available DownloadServlet.ContentSource implemenatations must be specified via a Servlet init parameter named CONTENT_SOURCES.

See Also:
  • Nested Class Summary

    Nested Classes
    Modifier and Type
    Class
    Description
    static interface 
    Implement this interface to provide an Object that is capable of providing data to DownloadServlet.
    static class 
    This class provides information about the request that may be necessary for the DownloadServlet.ContentSource to provide content.
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    static final String
    This is the ServletRequest Parameter that should be provided to identify the DownloadServlet.ContentSource implementation that should be used.
    static final String
    This String ("ContentSources") is the name if the Servlet Init Parameter that should be used to register all available DownloadServlet#ContentSource implementations.
    static final String
    The Content-type ("ContentType").
    static final String
    The Default Content-type ("application/octet-stream").
    static final String
    This String ("downloadContext") is the name if the ServletRequest Attribute used to store the DownloadServlet#Context object for this request.
    static final String
    This is the DownloadServlet#Context attribute name used to specify the filename extension of the content.
    static final String
    This is the DownloadServlet#Context attribute name used to specify optional additional headers.

    Fields inherited from class jakarta.servlet.http.HttpServlet

    LEGACY_DO_HEAD
  • Constructor Summary

    Constructors
    Constructor
    Description
    Default Constructor.
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    doGet(jakarta.servlet.http.HttpServletRequest request, jakarta.servlet.http.HttpServletResponse response)
    This method delegates to the #doPost() method.
    void
    doPost(jakarta.servlet.http.HttpServletRequest request, jakarta.servlet.http.HttpServletResponse response)
    This method is the main method for this class when used in an HttpServlet environment.
    getContentSource(jakarta.servlet.ServletRequest request)
    This method locates the appropriate DownloadServlet#ContentSource for this request.
    This method looks up a DownloadServlet.ContentSource given its id.
    getDownloadContext(jakarta.servlet.http.HttpServletRequest request, jakarta.servlet.http.HttpServletResponse response)
    This method instantiates a DownloadServlet.Context and initializes it with the Servlet, ServletConfig, ServletRequest, and ServletResponse.
    protected long
    getLastModified(jakarta.servlet.http.HttpServletRequest request)
    This method gets called before the doGet/doPost method.
    void
    init(jakarta.servlet.ServletConfig config)
    Servlet initialization method.
    void
    This method registers the given class name as a DownloadServlet#ContentSource.
    void
    This method registers the given class name as a DownloadServlet#ContentSource.
    protected void
    This method is responsible for copying the data from the given InputStream to the ServletResponse's OutputStream.
    protected void
    This method is responsible for setting the response header information.

    Methods inherited from class jakarta.servlet.http.HttpServlet

    doDelete, doHead, doOptions, doPatch, doPut, doTrace, isSensitiveHeader, service, service

    Methods inherited from class jakarta.servlet.GenericServlet

    destroy, getInitParameter, getInitParameterNames, getServletConfig, getServletContext, getServletInfo, getServletName, init, log, log

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • DOWNLOAD_CONTEXT

      public static final String DOWNLOAD_CONTEXT

      This String ("downloadContext") is the name if the ServletRequest Attribute used to store the DownloadServlet#Context object for this request.

      See Also:
    • CONTENT_SOURCES

      public static final String CONTENT_SOURCES

      This String ("ContentSources") is the name if the Servlet Init Parameter that should be used to register all available DownloadServlet#ContentSource implementations.

      See Also:
    • CONTENT_SOURCE_ID

      public static final String CONTENT_SOURCE_ID

      This is the ServletRequest Parameter that should be provided to identify the DownloadServlet.ContentSource implementation that should be used. This value must match the value returned by the DownloadServlet.ContentSource implementation's getId() method.

      See Also:
    • CONTENT_TYPE

      public static final String CONTENT_TYPE

      The Content-type ("ContentType"). This is the DownloadServlet#Context attribute used to specify an explicit "Content-type". It may be set by the DownloadServlet#ContentSource, or may be passed in via a request parameter. If not specified, the EXTENSION will be used. If that fails, the DEFAULT_CONTENT_TYPE will apply.

      See Also:
    • DEFAULT_CONTENT_TYPE

      public static final String DEFAULT_CONTENT_TYPE

      The Default Content-type ("application/octet-stream").

      See Also:
    • EXTENSION

      public static final String EXTENSION

      This is the DownloadServlet#Context attribute name used to specify the filename extension of the content. It is the responsibility of the DownloadServlet#ContentSource to set this value. The value should represent the filename extension of the content if it were saved to a filesystem.

      See Also:
    • HEADERS

      public static final String HEADERS

      This is the DownloadServlet#Context attribute name used to specify optional additional headers. It must be set to Map<String, String> object when needed.

      See Also:
  • Constructor Details

    • DownloadServlet

      public DownloadServlet()

      Default Constructor.

  • Method Details

    • init

      public void init(jakarta.servlet.ServletConfig config) throws jakarta.servlet.ServletException

      Servlet initialization method.

      Specified by:
      init in interface jakarta.servlet.Servlet
      Overrides:
      init in class jakarta.servlet.http.HttpServlet
      Throws:
      jakarta.servlet.ServletException
    • registerContentSource

      public void registerContentSource(String className)

      This method registers the given class name as a DownloadServlet#ContentSource. This method will attempt to resolve and instantiate the class using the current classloader.

    • registerContentSource

      public void registerContentSource(Class cls)

      This method registers the given class name as a DownloadServlet#ContentSource. This method will attempt to instantiate the class via the default constructor.

    • getContentSource

      public DownloadServlet.ContentSource getContentSource(String id)

      This method looks up a DownloadServlet.ContentSource given its id. The DownloadServlet#ContentSource must be previously registered.

    • doGet

      public void doGet(jakarta.servlet.http.HttpServletRequest request, jakarta.servlet.http.HttpServletResponse response) throws jakarta.servlet.ServletException, IOException

      This method delegates to the #doPost() method.

      Overrides:
      doGet in class jakarta.servlet.http.HttpServlet
      Throws:
      jakarta.servlet.ServletException
      IOException
    • doPost

      public void doPost(jakarta.servlet.http.HttpServletRequest request, jakarta.servlet.http.HttpServletResponse response) throws jakarta.servlet.ServletException, IOException

      This method is the main method for this class when used in an HttpServlet environment. It drives the process, which includes creating a DownloadServet#Context, choosing the appropriate DownloadServlet#ContentSource, and copying the output of the DownloadServlet#ContentSource to the ServletResponse's OutputStream.

      Overrides:
      doPost in class jakarta.servlet.http.HttpServlet
      Throws:
      jakarta.servlet.ServletException
      IOException
    • getDownloadContext

      protected DownloadServlet.Context getDownloadContext(jakarta.servlet.http.HttpServletRequest request, jakarta.servlet.http.HttpServletResponse response)

      This method instantiates a DownloadServlet.Context and initializes it with the Servlet, ServletConfig, ServletRequest, and ServletResponse.

    • getContentSource

      protected DownloadServlet.ContentSource getContentSource(jakarta.servlet.ServletRequest request)

      This method locates the appropriate DownloadServlet#ContentSource for this request. It uses the given ServletRequest to look for a ServletRequest Parameter named CONTENT_SOURCE_ID. This value is used as the key when looking up registered DownloadServlet#ContentSource implementations.

    • writeHeader

      protected void writeHeader(DownloadServlet.ContentSource source, DownloadServlet.Context context) throws IOException

      This method is responsible for setting the response header information.

      Throws:
      IOException
    • writeContent

      protected void writeContent(DownloadServlet.ContentSource source, DownloadServlet.Context context)

      This method is responsible for copying the data from the given InputStream to the ServletResponse's OutputStream. The InputStream should be the from the DownloadServlet#ContentSource.

    • getLastModified

      protected long getLastModified(jakarta.servlet.http.HttpServletRequest request)

      This method gets called before the doGet/doPost method. The requires us to create the DownloadServlet#Context here. However, we do not have the HttpServletResponse yet, so it will be null.

      Overrides:
      getLastModified in class jakarta.servlet.http.HttpServlet