Как использовать XMLHttpRequest в GWT?
XMLHttpRequest является альтернативой HTTP-вызовам со стороны клиента GWT и позволяет контролировать все аспекты запросов/ответов. Но как им пользоваться?
адрес javadoc: http://www.gwtproject.org/javadoc/latest/com/google/gwt/xhr/client/class-use/XMLHttpRequest.html
1 ответ:
Вы не упомянули, какую версию GWT вы используете, поэтому я предполагаю, что последнюю. Это означает 2.8.2 или новее.
Elemental2-это путь
Как сказано в комментариях выше,
Elemental2- это правильный путь. Я объясню это немного позже.Если вы думаете о реализации в будущем (осознавая
GWT3/J2CLновый подход), пожалуйста, не используйте устаревшие материалы GWT. Это означает, что, пожалуйста, используйтеelemental2.dom.XMLHttpRequestвместоcom.google.gwt.xhr.client.XMLHttpRequest(упомянутого вами). Пожалуйста, не используйтеgwt-userзависимость по возможности, так как она будет устаревшей (если ее еще нет).
Elemental2- это проект с открытым исходным кодом, доступный здесь: https://github.com/google/elemental2 это своего рода базовая библиотека для "нового GWT". Для более легкой миграции существующего GWT2.x проецирует на GWT3.x, часть "старого"gwt-userв настоящее время переносится на новый подход с использованием методаJsInteropи упоминаетсяElemental2. Так что определенноElemental2- это путь.Elemental2 и JsInterop в общее
Спецификация еще не настолько богата, если говорить о новом подходе JsInterop, но на данный момент Вы найдете по крайней мере некоторое введение: http://www.gwtproject.org/doc/latest/DevGuideCodingBasicsJsInterop.html
Примеры
Пожалуйста, найдите пример для
XMLHttpRequestв этой статье: http://www.g-widgets.com/2016/09/09/gwt-http-requests-alternatives/Если вы ищете примеры, также хорошим способом является поиск этого на сайте Github таким образом: https://github.com/search?q=elemental2.dom.XMLHttpRequest&type=Code .
(для использования поиска на Github вам нужно войти в систему, в противном случае вы увидите "Вау! Вы спровоцировали злоупотребление бла-бла-бла...")
Один из результатов приведет вас к очень интересному проекту (у вас есть предварительный просмотр будущего
GWTсейчас): https://github.com/gwtproject/gwt-http . на будущее порт наследиеcom.google.gwt.http.HTTPмодуля. Оно будет помогите мигрировать GWT2.x проецирует на GWT3.x.Когда вы посмотрите на тестовый пакет, вы найдете несколько примеров: https://github.com/gwtproject/gwt-http/tree/master/src/test/java/org/gwtproject/http/client . Итак, это, наконец, ответ на ваш вопрос : "как его использовать?":- )
Дополнительные примеры Источник
XMLHttpRequest(используяElemental2) Пример: https://gist.github.com/search?utf8=%E2%9C%93&q=elemental2.dom.XMLHttpRequest. Это наверное, даже лучше для начала, так как они короткие и четкие.Что такое Элементал2?
Elemental2предоставляет вам тип проверенного доступа к API собственного браузера. Так что если вы знакомы с API браузера, вы должны быть в состоянии реализовать свой материал, даже на основе некоторых собственных примеров JavaScript. Пожалуйста, подумайте о новом GWT, как о типобезопасном JavaScript (кроме того, очень производительном и хорошо оптимизированном). С помощьюJsInteropвы создаете привязки, так что это нечто похожее на привязки для машинописный текст. Таким образом, на самом деле у вас есть возможность иметь дело непосредственно с API браузера, без каких-либо GWT конкретных.Библиотеки? Еще много примеров...?
Работа с
XMLHttpRequest- это немного низкий уровень.У вас также есть возможность использовать библиотеку. Один из результатов поиска на Github приведет вас к этому репозиторию: https://github.com/ibaca/autorest-streaming-example который является примером для интересной библиотеки отдыха: https://github.com/intendia-oss/autorest современный и реактивный, работает с наблюдаемыми, RxJava и так далее. Эта библиотека использует
JsInterop, а также мигрирует вElemental2, что делает ееGWT3/J2CLготовы, пожалуйста, смотрите изменения: https://github.com/intendia-oss/autorest/commit/58516802cd42134544e6e3787207b5431fae94b5 .С помощью поискового запроса Github, который я вам предоставил, теперь вы можете найти еще больше примеров кода для
Альтернативным подходом было бы использование фреймворка, например Errai из RedHat: http://erraiframework.org / . это поможет вам справиться со многими проблемами на другом уровне абстракции. Я думаю, что теперь у вас есть несколько ссылок для изучения.XMLHttpRequest. Так что, пожалуйста, просто посмотрите и найдите лучший вариант для ваших нужд.С другой стороны, это 2018 год, так почему бы не использовать API Fetch?
Когда я думаю о современном веб-приложении, я бы предпочел думать о
Fetch APIвместоXMLHttpRequest. Все современные браузеры теперь реализуют функциюfetch()изначально. Разве это не лучший способ решить вашу проблему?fetch()-это механизм, основанный на обещаниях, который позволяет выполнять сетевые запросы, аналогичныеXMLHttpRequest. Обещания и получение обрабатываются Elemental2. Затем вы можете использовать его из вашего кода Java более или менее аналогичным образом, как в примерах Mozilla.Подробнее о
Fetch APIчитайте здесь:Более того, в этом нет ничего нового, как вы видите. Если о старых браузерах a
Https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch
Https://developers.google.com/web/updates/2015/03/introduction-to-fetch
polyfillэмулирует отсутствующую функцию: https://github.com/github/fetch .Если о примерах, то я не вижу так много на Github: https://github.com/search?utf8=%E2%9C%93&q=elemental2.dom.DomGlobal + fetch&type=Code , но хоть что-то.
Fetch APIпредставляется наиболее актуальным решением этой проблемы.Пожалуйста, найдите очень простой пример fetch () с использованием Elemental2.
Раздел импорта:
import static elemental2.dom.DomGlobal.fetch; import static elemental2.dom.DomGlobal.console; import elemental2.dom.Response;Затем используйте в своем код:
fetch("https://randomuser.me/api/?gender=female&results=1") .then(Response::json) .then(data -> { console.log(Global.JSON.stringify(data)); return null; }). catch_(error -> { console.log(error); return null; });В результате вы должны увидеть что-то вроде этого:
{"results":[{"gender":"female","name":{"title":"mrs","first":"caroline","last":"coleman"},"location":{"street":"3703 new road","city":"swansea","state":"leicestershire","postcode":"ZH67 0YS","coordinates":{"latitude":"14.7870","longitude":"-107.8990"},"timezone":{"offset":"-6:00","description":"Central Time (US & Canada), Mexico City"}},"email":"[email protected]","login":{"uuid":"25357d90-cce4-4fe6-a3db-8ab77c0272ba","username":"smallpeacock582","password":"citizen","salt":"VX3s05Ah","md5":"84649cce1db8c6f2cbe33098221aa570","sha1":"005abf7d2ca0ff5b1a0bfd6dcee6d4860ef6e75d","sha256":"caadff0a16e27b0d9893aea483aedc7cf7c4707096c33a58acf44336bb2b54be"},"dob":{"date":"1978-03-14T15:47:16Z","age":40},"registered":{"date":"2013-08-10T19:09:41Z","age":5},"phone":"015396 74385","cell":"0726-723-103","id":{"name":"NINO","value":"JA 32 24 22 P"},"picture":{"large":"https://randomuser.me/api/portraits/women/45.jpg","medium":"https://randomuser.me/api/portraits/med/women/45.jpg","thumbnail":"https://randomuser.me/api/portraits/thumb/women/45.jpg"},"nat":"GB"}],"info":{"seed":"98f4f4a344470fbd","results":1,"page":1,"version":"1.2"}}Можно дополнительно преобразовать результат в объект Java с использованием технологии, называемой JsInterop объекты переноса данных. Если вы заинтересованы, пожалуйста, найдите некоторую информацию здесь: https://stackoverflow.com/a/50565283/5394086 .
Не рекомендуется подход
Если вы, к сожалению, предпочитаете использовать старый GWT, так что https://github.com/reinert/requestor (который, к сожалению, прекращен, и разработка остановилась на GWT 2.7, но для этой версии GWT это, вероятно, лучший выбор). Но опять же, пожалуйста, не идите этим путем и используйте GWT >= 2.8.2 с
Elemental2/JsInteropвместо этого подойдите.
Comments