如果下载失败,请在30秒后关闭BufferedOutputStream输出

时间:2016-11-17 02:54:42

标签: java jsp servlets streamwriter

单击“下载”后,我的代码开始在新打开的选项卡窗口中从SAN位置写入内容,完成后,将PDF下载到本地系统。如果文件在30秒内没有写入/下载,我想关闭新的选项卡窗口。然后在父窗口JSP上显示文本消息。我的servlet代码如下:

    try
    {   
        GetPDAO getPDAO= new GetPDAO();

          for(int i=0;i<5;i++)
          {
              content=getPDAO.getPFromE( strPN);
               DateFormat df = new SimpleDateFormat("dd/MM/yy HH:mm:ss");
               Date dateobj = new Date();
               if(content==null) 
              {  
               Thread.sleep(5000);
               }
             else {

                 content=getPDAO.getPFromE( strPN);
                 break;
             }
          }
        response.setContentType("application/pdf");
        String strFileName=strPN+".pdf";
        response.setHeader("Content-Disposition","attachment; filename=\"" + strFileName + "\"");
        response.setHeader("Cache-Control","no-cache"); 
        response.setHeader("Cache-Control","no-store"); 
        response.setHeader("Pragma","no-cache");
        response.setDateHeader("Expires", 0);
        output =new BufferedOutputStream(response.getOutputStream());
        output.write(content); 
        output.flush();          
        } 
    finally 
     {
        output.close(); 
      }

和我的JSP代码如下:

function onSubmit()
{    
var url="<%=strCCPURL%>"+"/getpfromeservlet?PN="+document.getElementById("pn").value; 
       document.getElementById('alrt').innerHTML='<b>Please wait</b>'; 
           setTimeout(function() {document.getElementById('alrt').innerHTML='';},8000);
            window.open(url,"_blank");
           document.getElementById('viewPD').href=url;
           document.getElementById('viewPD').target='_blank';            
}

1 个答案:

答案 0 :(得分:2)

您可以将servlet中的sendRedirect用于JSP的副本,然后自动关闭JSP。 sendRedirect将关闭servlet,然后通过window.close方法关闭副本JSP。重点是回到主JSP。