используя механизм RPC GWT с моим настроенным сервлетом
-
07-07-2019 - |
Вопрос
В настоящее время у меня есть приложение GWT, которое использует RequestBuilde
для
отправлять сообщения сервлету (используя POST
и GET
) и моему сервлету
(в doPost
и doGet
) " паузы " запрос (это делается с помощью
Servlets 3.0 spec) и добавляет его в очередь.
Дополнительно у меня есть
Поток демона, который работает в фоновом режиме и "воспроизводит" запрос
когда есть новые данные.
Это прекрасно работает для меня, за исключением того, что я просто отправляю
строки на данный момент, и я хотел бы использовать механизм RPC для отправки
Объекты.
У меня такой вопрос:
Если я создаю свой класс myServiceImpl
, который расширяется
RemoteServiceServlet
как мне обрабатывать doPost
и doGet
, если вообще?
Мне нужно приостановить мой запрос, чтобы использовать асинхронную поддержку, где это должно быть достигнуто? Хотя я, возможно, могу вызвать метод this.getThreadLocalRequest ()
в моем методе RPC в классе myServiceImpl
, но я не уверен, насколько это будет разумно.
Я не
уверен, что я даже понимаю, как GWT обрабатывает вызов со стороны клиента
этого асинхронного интерфейса.
Случайно ли это вызывает doGet
для примера сервлета и
гарантирует, что он вызывает требуемый метод RPC?
Извините, если я напутал, просто я не могу найти больше
подробная техническая информация о том, как именно этот бизнес RPC работает.
Цени любую кредитную руку
Еффая
Решение 2
Я думаю, что основное недоразумение, которое у меня было в то время, было связано с тем, что GWT RPC основывается на механизме сервлета (внутренне), и поэтому попытка использовать этот механизм с асинхронными сервлетами была в то время невозможна, так как GWT RPC был построен на сервлетах 2.5 (опять же, в самый раз).
Другие советы
Чтобы понять RPC, забудьте о POST и GET, он работает по-разному (то есть с точки зрения программирования. Внутренне он использует его, но вы не видите или не должны его понимать, если не хотите делать что-то экзотическое). Хорошей отправной точкой для RPC является документация GWT: http://code.google .com / webtoolkit / учебники / 1,6 / RPC.html
Чтобы дать вам резюме. При использовании RPC ваш сервлет myServiceImpl
должен реализовывать методы интерфейса с именем myService
, помимо расширения RemoveServiceServlet
. Методы получают в качестве аргументов данные, которые вы хотите отправить на сервер.
Рядом с интерфейсом myService
необходимо создать интерфейс myServiceAsync
(оба интерфейса должны быть в клиентском подпакете). Этот интерфейс myServiceAsync
должен содержать те же методы, что и интерфейс myService
, за исключением того, что каждый метод возвращает void
и имеет дополнительный последний аргумент обратного вызова AsyncCallback
/ код>.
В вашем клиенте вам нужно использовать GWT для генерации RPC через GWT.create (подробности см. в документации.
Чтобы использовать RPC, вызовите методы в интерфейсе myServiceAsync
в своем клиентском коде, и GWT позаботится об отправке его сервлету. Затем сервлет вызовет соответствующий метод с аргументами, которые вы передали клиенту. Это делается асинхронно. Таким образом, клиент возвращается прямо из звонка.
Когда сервер отправляет результат обратно, обратный вызов, который вы передали, myServiceAsync
или используется OnError
или OnSuccess
. OnError
, если метод на стороне сервера выдал ошибку, иначе OnSuccess
. OnSuccess
будет иметь в качестве аргумента возвращаемое значение из того, что вы вернули в методе, реализованном вашим сервлетом.