base/struts-tools/src/main/com/thesett/common/webapp/servlets/DataStreamServlet.java
public void service(HttpServletRequest request, HttpServletResponse response) throws IOException
    {
        log.fine("void service(HttpServletRequest, HttpServletResponse): called");

        // Read the parameters and attributes from the request
        String contentType = (String) request.getAttribute("contentType");
        String contentDisposition = (String) request.getAttribute("contentDisposition");
        InputStream inputStream = (InputStream) request.getAttribute("inputStream");

        // Build the response header
        // response.addHeader("Content-disposition", "attachment; filename=" + fileName);
        if (contentType != null)
        {
            response.setContentType(contentType);
        }

        if (contentDisposition != null)
        {
            response.addHeader("Content-disposition", contentDisposition);
        }

        // response.setContentLength((int)f.length());

        // Create a stream to write the data out to
        BufferedOutputStream outputStream = new BufferedOutputStream(response.getOutputStream());

        // Read the entire input stream until no more bytes can be read and write the results into the response
        // This is done in chunks of 8k at a time.
        int length = -1;
        byte[] chunk = new byte[8192];

        while ((length = inputStream.read(chunk)) != -1)
        {
            outputStream.write(chunk, 0, length);
        }

        // Clear up any open stream and ensure that they are flushed
        outputStream.flush();
        inputStream.close();
    }
public void service(HttpServletRequest request, HttpServletResponse response) throws IOException
    {
        log.fine("void service(HttpServletRequest, HttpServletResponse): called");

        // Read the parameters and attributes from the request
        String contentType = (String) request.getAttribute("contentType");
        String contentDisposition = (String) request.getAttribute("contentDisposition");
        InputStream inputStream = (InputStream) request.getAttribute("inputStream");

        // Build the response header
        // response.addHeader("Content-disposition", "attachment; filename=" + fileName);
        if (contentType != null)
        {
            response.setContentType(contentType);
        }

        if (contentDisposition != null)
        {
            response.addHeader("Content-disposition", contentDisposition);
        }

        // response.setContentLength((int)f.length());

        // Create a stream to write the data out to
        BufferedOutputStream outputStream = new BufferedOutputStream(response.getOutputStream());

        // Read the entire input stream until no more bytes can be read and write the results into the response
        // This is done in chunks of 8k at a time.
        int length = -1;
        byte[] chunk = new byte[8192];

        while ((length = inputStream.read(chunk)) != -1)
        {
            outputStream.write(chunk, 0, length);
        }

        // Clear up any open stream and ensure that they are flushed
        outputStream.flush();
        inputStream.close();
    }
Processes the http request that is directed to this servlet.

@param  request  The HTTP request.
@param  response The HTTP response.

@throws IOException If the is an I/O error whilst writing data to the HTTP client through the remote output
stream.