We are having a problem streaming a PDF to Internet Explorer over HTTPS.  I have 
located a number of postings (namely 
http://support.microsoft.com/default.aspx?scid=kb;en-us;316431) that denote this as a 
known feature/bug in IE; however, we can't seem to get the solution correct.

As we would like all of the application to be non-cacheable, we have set the following 
in the struts-config.xml
  <controller>
    <!--  Set pages as no-cache -->
    <set-property property="nocache" value="true"/>
  </controller>
Which works as expected.

In the Action class we attempt to override the nocache via:
          response.setHeader("Cache-control", "");

This does not appear to have the effect of overriding the controller setting.

Any thoughts?


                                  Cheers,
                                  James
Below is a larger snippet from the Action.execute(...) method.


  public ActionForward execute(ActionMapping mapping,
                               ActionForm form,
                               HttpServletRequest request,
                               HttpServletResponse response)
    throws IOException, ServletException {
    HttpSession sess = request.getSession();

    String report = "XYZ.pdf";
    // stream the PDF data to the browser
    if (report != null) {
      javax.servlet.ServletOutputStream sos = response.getOutputStream();
      try {
        response.setContentType(PDF_MIME_TYPE);
        // as per http://support.microsoft.com/default.aspx?scid=kb;en-us;316431
        // Internet Explorer will not be able to display the PDF in SSL unless
        // the page is set to be cacheable
        response.setHeader("Cache-control", "");
        File reportFile = new File(report);
        FileInputStream fis = new FileInputStream(reportFile);
        byte[] fisBytes = new byte[(int) reportFile.length()];

        fis.read(fisBytes);
        response.setContentLength(fisBytes.length);
        sos.write(fisBytes);
        sos.flush();
        sos.close();
      } catch (Exception e) {
        ActionErrors errors = new ActionErrors();
        errors.add(ActionErrors.GLOBAL_ERROR,
                   new ActionError(Constants.ERROR_KEY_HDR + Constants.LC_ERROR_HDR + 
"5001"));
        saveErrors(request, errors);
      } finally {
        sos.close();
        response.reset();
      }
    }
 . . .
THIS COMMUNICATION MAY CONTAIN CONFIDENTIAL AND/OR OTHERWISE PROPRIETARY MATERIAL and 
is thus for use only by the intended recipient. If you received this in error, please 
contact the sender and delete the e-mail and its attachments from all computers. 

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to