org.glassfish.admingui.common.servlet
Class DownloadServlet

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

public class DownloadServlet
extends javax.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:
Serialized Form

Nested Class Summary
static interface DownloadServlet.ContentSource
           Implement this interface to provide an Object that is capable of providing data to DownloadServlet.
static class DownloadServlet.Context
           This class provides information about the request that may be necessary for the DownloadServlet.ContentSource to provide content.
 
Field Summary
static java.lang.String CONTENT_SOURCE_ID
           This is the ServletRequest Parameter that should be provided to identify the DownloadServlet.ContentSource implementation that should be used.
static java.lang.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.
static java.lang.String CONTENT_TYPE
           The Content-type ("ContentType").
static java.lang.String DEFAULT_CONTENT_TYPE
           The Default Content-type ("application/octet-stream").
static java.lang.String DOWNLOAD_CONTEXT
           This String ("downloadContext") is the name if the ServletRequest Attribute used to store the DownloadServlet#Context object for this request.
static java.lang.String EXTENSION
           This is the DownloadServlet#Context attribute name used to specify the filename extension of the content.
 
Constructor Summary
DownloadServlet()
           Default Constructor.
 
Method Summary
 void doGet(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
           This method delegates to the #doPost() method.
 void doPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
           This method is the main method for this class when used in an HttpServlet environment.
protected  DownloadServlet.ContentSource getContentSource(javax.servlet.ServletRequest request)
           This method locates the appropriate DownloadServlet#ContentSource for this request.
 DownloadServlet.ContentSource getContentSource(java.lang.String id)
           This method looks up a DownloadServlet.ContentSource given its id.
protected  DownloadServlet.Context getDownloadContext(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
           This method instantiates a DownloadServlet.Context and initializes it with the Servlet, ServletConfig, ServletRequest, and ServletResponse.
protected  long getLastModified(javax.servlet.http.HttpServletRequest request)
           This method gets called before the doGet/doPost method.
 void init(javax.servlet.ServletConfig config)
           Servlet initialization method.
 void registerContentSource(java.lang.Class cls)
           This method registers the given class name as a DownloadServlet#ContentSource.
 void registerContentSource(java.lang.String className)
           This method registers the given class name as a DownloadServlet#ContentSource.
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.
protected  void writeHeader(DownloadServlet.ContentSource source, DownloadServlet.Context context)
           This method is responsible for setting the response header information.
 
Methods inherited from class javax.servlet.http.HttpServlet
doDelete, doHead, doOptions, doPut, doTrace, service, service
 
Methods inherited from class javax.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 Detail

DOWNLOAD_CONTEXT

public static final java.lang.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:
Constant Field Values

CONTENT_SOURCES

public static final java.lang.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:
Constant Field Values

CONTENT_SOURCE_ID

public static final java.lang.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:
Constant Field Values

CONTENT_TYPE

public static final java.lang.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:
Constant Field Values

DEFAULT_CONTENT_TYPE

public static final java.lang.String DEFAULT_CONTENT_TYPE

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

See Also:
Constant Field Values

EXTENSION

public static final java.lang.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:
Constant Field Values
Constructor Detail

DownloadServlet

public DownloadServlet()

Default Constructor.

Method Detail

init

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

Servlet initialization method.

Specified by:
init in interface javax.servlet.Servlet
Overrides:
init in class javax.servlet.GenericServlet
Throws:
javax.servlet.ServletException

registerContentSource

public void registerContentSource(java.lang.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(java.lang.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(java.lang.String id)

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


doGet

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

This method delegates to the #doPost() method.

Overrides:
doGet in class javax.servlet.http.HttpServlet
Throws:
javax.servlet.ServletException
java.io.IOException

doPost

public void doPost(javax.servlet.http.HttpServletRequest request,
                   javax.servlet.http.HttpServletResponse response)
            throws javax.servlet.ServletException,
                   java.io.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 javax.servlet.http.HttpServlet
Throws:
javax.servlet.ServletException
java.io.IOException

getDownloadContext

protected DownloadServlet.Context getDownloadContext(javax.servlet.http.HttpServletRequest request,
                                                     javax.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(javax.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)

This method is responsible for setting the response header information.


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(javax.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 javax.servlet.http.HttpServlet


Copyright © 2012 GlassFish Community. All Rights Reserved.