java - 如何测试服务器端是否出现错误,并输出客户端

标签 java servlets download

好的,我已经为此工作了几天,但遇到了一些问题。基本上,这个想法很简单。用户单击链接,这会向服务器发送生成 PDF 文档的请求。这本身并不是下载的。它以附件的形式发送回浏览器。

问题很简单。如果生成 PDF 文档时出现问题,我不希望浏览器尝试下载该文件。现在我所做的事情很简单。

  if(req.getParameterMap().containsKey("report")) {
            if(req.getParameter("report").equals("true"))
            {
                // If the query string parameter is set, generate the PDF.
                if(!PdfReportGenerator.generateReport(res, repositoryURI)) {
                    // Something went wrong, so redirect the browser.
                    res.sendRedirect(req.getRequestURI());
                }
            }
        }

目前,它的作用是将用户重定向回他们已经所在的页面。简而言之,什么也没有发生。现在这还可以,但我宁愿有一些好的浏览器反馈。我目前能想到的一种方法是将 "?error=pdf 或类似的内容附加到 URL 的末尾,但用户可能还有其他需要查询的功能字符串。

我的问题是,除了查询字符串之外,是否有其他方法可以在下载附件时向浏览器发送一条发生错误的消息。我愿意接受任何建议;我想 Javascript 将成为这里的首选语言。

最佳答案

我为您提供了这个简单的解决方案...

if(req.getParameter("report").equals("true"))
{
  req.getSession().setAttrinute("REPORT_OK",false);
  //If the query string parameter is set, generate the PDF.
  if(!PdfReportGenerator.generateReport(res, repositoryURI)) {
    // Something went wrong, so redirect the browser.
    res.sendRedirect(req.getRequestURI());
  }else{
    req.getSession().setAttrinute("REPORT_OK",true);
  }
}

现在在您的 RequestURI 页面中有一个 document.ready()检查 ajax 的函数关于REPORT_OK变量的状态。

情况 1:如果值为 null,则意味着该请求不是来自上述代码的回调,因此您不会向用户显示任何内容。

情况 2:如果值为 false,则表示发生了错误,您可以通知用户。

情况3:如果值为true,则pdf生成成功,您应该相应地通知用户。

在使用ajax检查该属性后,不要忘记从 session 中删除该属性,这样当您刷新页面或重新访问它时,ajax将转到情况1。

更新

如何进行ajax调用:

$(document).ready(function() {
  var divToChange = $('#message');//div id of the message you show to user
  $.ajax({
    type: 'POST',
    url: 'checkReport.jsp',
    data: {},
    beforeSend:function(){
        divToChange.html('Loading...');
    },
    success:function(data){
        divToChange.html(data);
    },
    error:function(){
        divToChange.html('Checking file failed!');
    }
  });
)};

现在在您的 checkReport.jsp 上:

<%
Boolean status = (Boolean) session.getAttribute("REPORT_OK");
if(status==null){
    //dont return anything
}else if(status){
    out.print("Report is ok");
}else {
    out.print("Report generation failed ");
}
%>

关于java - 如何测试服务器端是否出现错误,并输出客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17723291/

相关文章:

javascript - 使用 Javascript 和 onSubmit 自动下载文件

java - 如何将 new Date(0L) 正确转换为 LocalDate (1970-01-01)?

java - native ios 应用程序中的 session 操作

java - Spring Security + Vaadin Session 无 VaadinSession

java - 如何使用java在Rest Web服务中下载不同类型的文件

youtube - 流式传输和下载视频之间有什么区别,它对我的​​ISP施加的限制有何影响?

Java unicode 正则表达式不匹配德语字符

java - 什么是对多个字段使用 findBy 并对所有字段使用 Containing 子句的 Spring Data JPA 方法

java - 使用java创建动态rich :panelMenu

java - 用Java创建一个web服务器/servlet容器——站在巨人的肩膀上