2013-07-19 61 views
0

看过SO并找不到类似于我之后的问题。我将解释什么,我试图做的开始,然后用一个更具体的问题,完成了..停止返回响应的Servlet

我的目标

我有一个通过查询字符串参数来我的servlet的链接。该参数是report。如果在servlet中使用report = true,那么我将生成一个PDF文档。 PDF文档然后通过将响应的mime type设置为application/pdf来返回此值。此代码如下所示:然后

 String mimeType = "application/pdf"; 
     res.setContentType(mimeType); 
     res.setHeader("Content-Disposition", "attachment; filename=\"" +  
     getEventID(doc) + ".pdf\""); 
     // Set the response content type and pdf attachment. 

     out = new ByteArrayOutputStream(); 
     // All PDF Data is pushed onto the output stream. 
     com.lowagie.text.Document pdfDoc = buildPDF(getEventID(doc)); 

此代码被写入response对象的输出流。

 if(pdfDoc == null) 
     { 
      // Something went wrong in generating the report. 
      return false; 
     } 
     // Create the PDF document. 
     out.writeTo(res.getOutputStream()); 

如果一切顺利,班级将返回true。如果不是,则返回false。现在,我遇到的问题是如果它返回false。本质上,我想指出空白停止从任何地方去的数据。我添加了检查,以确保事情进展顺利,之前我写任何东西到输出流,所以目前我有一个响应设置为PDF类型,但不包含数据,如果出现问题是。

接下来,我有一个函数将测试类的输出。如果这是真的,那么一切都很好,但如果是假的,那么它设置了一个error参数:

if(!PdfReportGenerator.generateReport(res, repositoryURI)) { 
      req.getSession().setAttribute(SDRestServlet.PDF_ERROR, "error"); 
      // This will then re-direct back to the current URL, meaning the page 
      // looks like it doesn't do anything. 
      res.sendRedirect(req.getRequestURI()); 
} 

的问题是,这种重新定向真的没有帮助的。它正在搞乱存储在request中的其他值,并且虽然它使页面看起来像没有任何操作,但它不允许我向用户输出错误消息。

问题

虽然我知道如何使它看起来像网络响应没有返回,就意味着我不能输出任何有意义的信息给用户,这显然是不理想结果。

我的问题

有没有办法迫使servlet来停止或使浏览器将忽略这些数据返回的东西?

我的第二个问题是,如果有什么东西我可以发回浏览器,有什么我可以做在客户端导致消息弹出(可以像alert()一样简单)?

我已经明确的,因为我可能就可以了,所以,如果有什么事,你需要知道的,只问:)

+0

为什么你会知道你是否返回PDF或错误之前,甚至将MIME类型设置为PDF? – Kayaman

+0

当我开始写这篇文章的时候,我并不知道自己在做什么,所以我只是从我在这个项目中看到的其他代码开始。我知道这不是最佳做法,但我们可以先关注问题,然后我会根据您的改进建议采取行动吗? – christopher

+0

这不是一个改进建议。在知道我是否返回PDF或错误消息后,我会设置mime类型。或者说,如果我重定向到错误页面,我根本不会设置MIME类型。 – Kayaman

回答

0

有没有办法迫使servlet来停止或返回的东西等等浏览器忽略数据的 ?

请尝试使用方法“ServletResponse设置零响应。setContentLength(INT)”

我的第二个问题是,如果有什么我可以发送回 浏览器,是有什么我可以在客户端做会导致 消息弹出(可就这么简单警报())?

当然可以,但你需要更新回头说“text/html的”,并设置所有的变量,你会在服务器请求的正常情形做

第二种方法:

如果我必须从头开始构建它,将以下以下方法:

  1. 第一品牌和AJAX调用找到PDF是否需要生成或不
  2. 如果响应是假的显示错误消息。
  3. 如果响应是真实的发送请求到服务器生成PDF

希望我能帮助你一点在这里。

+0

@ madth3 - 谢谢! –