GWT Super Dev Mode RPC 404

Я пытаюсь начать работу в режиме суперразработчика. У меня работает режим суперразработчика, и у меня есть веб-сервер, обслуживающий мою основную html-страницу, где я могу включить «режим разработки» и перекомпилировать модуль. Теперь я пытаюсь получить эту страницу для доступа к моим сервлетам RequestFactory и RPC. Я запустил обычный режим разработки, и сервлеты доступны по адресу localhost:8888/gwtRequest. Итак, теперь у меня работают три сервера:

http://localhost:9876/ - GWT Code Server
http://localhost:8080/ - Mongoose web server serving /war directory
http://localhost:8888/ - GWT Dev Mode running servlets

Как указать моему приложению правильный контейнер сервлета? И нужны ли все эти серверы? Я получаю 404 прямо сейчас, потому что он смотрит на http://localhost:8080/gwtRequest.

Вот фрагмент файла web.xml:

<servlet>
  <servlet-name>requestFactoryServlet</servlet-name>
  <servlet-class>com.example.server.util.ExampleRequestFactoryServlet</servlet-class>
</servlet>

<servlet-mapping>
  <servlet-name>requestFactoryServlet</servlet-name>
  <url-pattern>/gwtRequest</url-pattern>
</servlet-mapping>

Помимо этого, есть ли способы сделать это менее запутанным? Может быть, какая-то новая функция позаботится о некоторых из этих головных болей? Я надеюсь настроить других разработчиков с помощью среды, как только узнаю, как это сделать! И, надеюсь, это не сильно усложнит запуск в производство (т. е., надеюсь, с минимальными изменениями конфигурации/кода).

Спасибо!


person CyDharttha    schedule 28.05.2014    source источник


Ответы (1)


Вам нужно всего 2 сервера:

  • тот, который обслуживает ваши статические файлы и серверный код (сервлеты). Это включает в себя версию вашего приложения, скомпилированную в JavaScript (хотя вам не нужно часто обновлять ее!). Это может быть сервер, встроенный в DevMode, но также может быть автономный Jetty или Tomcat или что-то еще, или такие вещи, как tomcat7-maven-plugin или jetty-maven-plugin в Maven или плагин jetty в Gradle.
  • CodeServer SuperDevMode

Обратите внимание, что если вы используете GWT-RPC, вы захотите запустить свой сервер с системным свойством gwt.codeserver.port, установленным на порт CodeServer (при условии, что они находятся на одной машине). Таким образом, когда ваш браузер (который запускает более новый код на стороне клиента, чем тот, который вы скомпилировали в JS и развернули на своем сервере) общается с вашим сервлетом, он загрузит политику сериализации GWT-RPC с CodeServer. В противном случае GWT-RPC, скорее всего, выйдет из строя с ошибкой IncompatibleRemoteServiceException.

См. также https://stackoverflow.com/a/18333050/116472.

person Thomas Broyer    schedule 28.05.2014
comment
Спасибо, этот ответ очень полезен. - person CyDharttha; 04.06.2014