/ / как да покажа съобщение за грешка, върнато в json обект от клас на сървлет в javascript / dojo? - json, изключение, сървлети, доджо

как да се покаже съобщение за грешка, върнато в обект json от клас сервлет в javascript / dojo? - json, изключение, сервлети, доджо

Имам клиент, който прави заявка за качване на файлове чрезdojo.io. Има три слоя.

Проблемът, който имам, се опитва да покаже върнати json данни, които съдържат точно изключение, случило се в последния слой след извършване на обратно извикване на уеб услуга към клиента.

Клиентската 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>

Клиентският javascript изглежда така, имам проблеми с разпечатването на RuntimeException, уловен в сървлет на клиент.

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
}

Класът на сървлета отправя повикване към уеб услугата restвъншна система и ако предаването на данни от качени файлове не успее, връща изключение в json към класа на сървлета и аз се опитвах да върна тези данни за грешка обратно на клиент. Този клас на сървлети работи добре за качване на файлове и ако се качи повреден файл, се генерира изключение. Тук не включих механизъм за регистриране, но той е реализиран, така че в сървъра на приложенията има регистрационен файл, който регистрира предадените данни, включени върнати изключения.

Аз съм нов в Dojo и имам проблеми с използването на iframe api за показване на json данни, предадени от клас на сървлет. Ще се радвам на вашия съвет по този въпрос. Благодаря ви!

Отговори:

1 за отговор № 1

на първо място, бих оценил други, които са допринесли идеи за въпроса ми. Проблемът, който реших. Трябваше да направя следните стъпки.

В класа на сървлета увийте json данни чрез маркери html / body / textarea

От клиентската страна на javascript, задайте handleAs: "json"

функция (данни) ще бъде извикана и данните ще бъдат json обект, така че извикайте каквото и да е име на свойство чрез. тогава стойността на картографирането ще бъде разпечатана

Стигна до правилното решение чрез много опити / грешки. Една от грешките, които направих, беше, че използвах грешна наклонена черта за затваряне на текстово поле по грешка в класа на сървлета.