Interface GetableResource

    • Method Detail

      • sendContent

        void sendContent​(OutputStream out,
                         Range range,
                         Map<String,​String> params,
                         String contentType)
                  throws IOException,
                         io.milton.http.exceptions.NotAuthorizedException,
                         io.milton.http.exceptions.BadRequestException,
                         io.milton.http.exceptions.NotFoundException
        Send the resource's content using the given output stream. Implementations should assume that bytes are being physically transmitted and that headers have already been committed, although this might not be the case with all web containers.

        This method will be used to serve GET requests, and also to generate content following POST requests (if they have not redirected)

        The Range argument is not-null for partial content requests. In this case implementations should (but are not required) to only send the data range requested.

        The contentType argument is that which was resolved by negotiation in the getContentType method. HTTP allows a given resource to have multiple representations on the same URL. For example, a data series could be retrieved as a chart as SVG, PNG, JPEG, or as text as CSV or XML. When the user agent requests the resource is specified what content types it can accept. These are matched against those that can be provided by the server and a preferred representation is selected. That contentType is set in the response header and is provided here so that the resource implementation can render itself appropriately.

        Parameters:
        out - - the output stream to send the content to
        range - - null for normal GET's, not null for partial GET's. May be ignored
        params - - request parameters
        contentType - - the contentType selected by negotiation
        Throws:
        IOException - - if there is an exception writing content to the output stream. This indicates that the client has disconnected (as frequently occurs with http transfers). DO NOT throw an IOException if there was an internal error generating the response (eg if reading from a database)
        com.bradmcevoy.http.exceptions.NotAuthorizedException
        io.milton.http.exceptions.NotAuthorizedException
        io.milton.http.exceptions.BadRequestException
        io.milton.http.exceptions.NotFoundException
      • getMaxAgeSeconds

        Long getMaxAgeSeconds​(Auth auth)
        How many seconds to allow the content to be cached for, or null if caching is not allowed The provided auth object allows this method to determine an appropriate caching time depending on authenticated context. For example, in a CMS in might be appropriate to have a short expiry time for logged in users who might be editing content, as opposed to non-logged in users who are just viewing the site.
      • getContentType

        String getContentType​(String accepts)
        Given a comma separated listed of preferred content types acceptable for a client, return one content type which is the best.

        Returns the most preferred MIME type. E.g. text/html, image/jpeg, etc

        Must be IANA registered

        accepts is the accepts header. Eg: Accept: text/*, text/html, text/html;level=1

        See - http://www.iana.org/assignments/media-types/ for a list of content types See - http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html for details about the accept header

        See here for a fun discussion of using content type and accepts for XHTML - http://stackoverflow.com/questions/348736/is-writing-self-closing-tags-for-elements-not-traditionally-empty-bad-practice

        If you can't handle accepts interpretation, just return a single content type - E.g. text/html

        But typically you should do something like this:

           String mime = ContentTypeUtils.findContentTypes( this.file );
           return ContentTypeUtils.findAcceptableContentType( mime, preferredList );
         
        See Also:
        com.bradmcevoy.common.ContentTypeUtils
      • getContentLength

        Long getContentLength()
        The length of the content in this resource. If unknown return NULL