Java 如何测试服务器上是否发生错误,以及输出客户端

Java 如何测试服务器上是否发生错误,以及输出客户端,java,servlets,download,Java,Servlets,Download,好吧,我已经为此工作了几天,我碰到了一个问题。基本上,这个想法很简单。用户单击一个链接,这会向服务器发送生成PDF文档的请求。这不是下载本身。它将以附件的形式发送回浏览器 问题很简单。如果生成PDF文档时出错,我不希望浏览器尝试下载该文件。现在我所做的很简单 if(req.getParameterMap().containsKey("report")) { if(req.getParameter("report").equals("true"))

好吧,我已经为此工作了几天,我碰到了一个问题。基本上,这个想法很简单。用户单击一个链接,这会向服务器发送生成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());
                }
            }
        }
目前,它所做的是将用户重新引导回他们已经在的页面。简言之,什么都没有发生。现在这还可以,但我希望有一些好的浏览器反馈。目前我能想到的一种方法是在URL的末尾添加
“?error=pdf
或类似的内容,但用户可能还有其他需要查询字符串的功能


我的问题是,在下载附件时,是否有一种方法(除了查询字符串)可以将出现错误的消息发送回浏览器。我愿意接受任何建议;我想
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页面中有一个函数可以检查
REPORT\u OK
变量的状态

案例1:如果值为
null
,则表示请求不是来自上面代码的回调,因此您不会向用户显示任何内容

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

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

在使用ajax检查该属性之后,不要忘记从会话中删除该属性,以便在刷新页面或重新访问页面时,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 ");
}
%>


不需要javascript。这些类型的消息通常被称为flash消息。基本上,我们的想法是,在控制器内部,在用户会话上设置flash消息。然后,通常在视图层,打印会话中存在的任何flash消息,然后将其从会话中删除。a有关于这方面的教程吗,因为我仍然很困惑!这是一个非常好的解决方案!我仍然有点纠结于如何使用AJAX来请求
REPORT\u OK
属性?抱歉。这对我根本不起作用。这对项目的结构有很大的假设,但我认为它对我不起作用这似乎是一个很好的一般性答案,所以我可以将其标记为正确。