Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何显示javascript/dojo中servlet类在json对象中返回的错误消息?_Json_Exception_Servlets_Dojo - Fatal编程技术网

如何显示javascript/dojo中servlet类在json对象中返回的错误消息?

如何显示javascript/dojo中servlet类在json对象中返回的错误消息?,json,exception,servlets,dojo,Json,Exception,Servlets,Dojo,我有一个客户端通过dojo.io.iframe发出文件上传请求,将二进制数据传递给运行在websphere app server上的web应用程序,web应用程序中的servlet类向外部系统发出rest web服务调用,以传递二进制数据。因此涉及到三个层面 我遇到的问题是,试图显示返回的json数据,其中包含在对客户机进行RESTWeb服务回调后在最后一层发生的异常 客户端html页面如下所示 <form id="myForm" method="post" enctype="multip

我有一个客户端通过dojo.io.iframe发出文件上传请求,将二进制数据传递给运行在websphere app server上的web应用程序,web应用程序中的servlet类向外部系统发出rest web服务调用,以传递二进制数据。因此涉及到三个层面

我遇到的问题是,试图显示返回的json数据,其中包含在对客户机进行RESTWeb服务回调后在最后一层发生的异常

客户端html页面如下所示

<form id="myForm" method="post" enctype="multipart/form-data">
    <div id="output"></div>

    <input id="filename" type="file" name="filename" />
    <input id="submitButton" type="submit" value="Submit"></input>
</form>
servlet类对外部系统进行RESTWeb服务调用,如果上传的文件数据传输失败,它会将json中的异常返回给servlet类,我正试图将错误数据返回给客户端。这个servlet类可以很好地用于文件上载,如果上载了损坏的文件,则会生成异常。我在这里没有包括日志机制,但它的实现是为了在应用服务器中有一个日志文件,用于注册包含返回异常的传输数据


我是Dojo新手,在使用iframeAPI显示servlet类传递的json数据时遇到困难。我很感激你对这件事的建议。谢谢大家!

首先,我要感谢对我的问题有贡献的人。我正在解决的问题。我必须执行以下步骤

在servlet类中,通过html/body/textarea标记包装json数据

在客户端javascript中,设置handleAs:“json”

函数(数据)将被调用,数据将是json对象,所以通过调用任何属性名。然后将打印出映射值


通过多次尝试/错误找到正确的解决方案。我犯的一个错误是,我在servlet类中错误地使用了错误的斜杠来关闭textarea标记。

您的代码是到达then还是error回调?我注意到一些事情:您不必
flush()
和/或
close()
sos流吗?如果希望它出现在错误处理程序中,它应该将HTTP状态代码更改为500,如果异常的原因是服务器本身,而不是用户。如果请求是跨域请求,
dojo/io/iframe
库无法检索响应,因此请确保它们位于同一域。@tik27:很抱歉我回复得太晚。调用错误回调,并在div id=“output”,domcont.place()处打印以下消息:“TypeError:无法获取未定义或空引用的属性“value”。听起来错误变量没有指向servlet类返回的响应对象…@Dimitri M:sos流被关闭。我没有包括完整的说明行。这三个层都在同一个域中。@tik27:奇数部分是若我将josn数据封装在。。标记并设置handleAs:“html”然后调用函数(数据){..},但会显示类似“objectundefined”的消息。
require(["dojo/io/iframe","dojo/dom","dojo/on","dojo/dom-construct","dojo/domReaddy!"],function(iframe,dom,on,domConst) {
    on(dom.byId("submitButton"),"click",function() {
        iframe.send({
            form: "myForm",
            handleAs: "json",
            url: "/rootContext/myServlet"
            }).then(function(data) {
                    domConst.place("<p>" + data + "</p>","output");
            }, function(err) {
                domConst.place("<p>" + err + "</p>","output"); // hope to print out exception caught in third layer
            });
    });
});
protected void doPost(HttpServletRequest request, HttpServletResponse response) {
    ....
    ServletOutputStream sos = null;
    ....
    try {
       domSomething(payLoad);
    } catch (RuntimeException e) [
        sos = response.getOutputStream();
        sos.print(e.getMessage());
    }
}

private void doSomething(String payLoad) {
    URL url = null;
    HttpURLConnection conn = null;
    OutputStream os = null;
    resource = new URL("someWhere");
    conn = (HttpURLConnection) resource.openConnection();
    conn.setDoOutput(true);
    conn.setRequestMethod("POST");

    os = conn.getOutputStream();
    os.write(payLoad.getBytes());
    os.close();

    if (conn.getResponseCode() != HttpURLConnection.HTTP_CREATED) {
        String retMsg = null;
        StringBuilder sb = new StringBuilder();
        BufferedReader br = new BufferedReader(new InputStreamReader(conn.getErrorStream()));
        while ((retMsg = br.readLine()) != null) {
           sb.append(retMsg);
        }
        br.close();
        throw new RuntimeException(sb.toString()); // throws JSON format data
}