Я делаю проект GWT, который использует PHP для подключения к базе данных DB2. Когда я компилирую проект и развертываю его на сервере (копируйте содержимое каталога WAR), он отлично работает, очевидно, в режиме размещения. Я запускаю проблему SOP, поскольку GWT находится на порту 8888, в то время как php-скрипт работает на порту 80.
Я пытаюсь запустить параметр -noserver, но мне что-то не хватает. Я вернулся и создал базовое примерное приложение из командной строки (webApplicationCreator -out / home / mike / gwt / sample1). Я редактировал сборку .xml для включения аргументов -noserver и -port 80 для devmode. Я хочу, чтобы мое приложение размещалось в localhost / sample1, поэтому я редактировал -startupUrl для всего URL-адреса, который я хочу использовать: http: //localhost/sample1/sample1.html
Я скомпилировал (ant), скопировал над sample1.html, sample1.css из war в каталог webserver sample1 и файлы (md5) .gwt.rpc, clear.cache.gif, sample1.nocache.js и hosts.html из каталога war / sample1 в sample1 / sample1, как описано в документации GWT (файл history.html не был создан). Затем я запускаю ant devmode из каталога проекта (/ home / mike / gwt / sample1). Я могу перейти на страницу sample1.html, но когда я нажимаю кнопку, чтобы отправить имя на сервер, он возвращается с
Удаленный вызов процедур – отказ
Ответы сервера: Произошла ошибка при попытке связаться с сервером. Проверьте подключение к сети и повторите попытку.
Я включил firebug, и он возвращает 404 для http: // localhost / sample1 / sample1 / greet . Вот где я застрял .. этот файл, очевидно, не существует на моем веб-сервере .. но почему? Разве это не то, что должно собирать GWT?
Может ли кто-нибудь дать мне руку? Благодаря!
Таким образом, в основном вы скопировали клиентскую часть клиент-серверного приложения. Когда ваше клиентское приложение GWT пытается сделать удаленный вызов процедур (RPC) на сервер для службы приветствия, которая является частью исходного образца, он не может найти эту службу.
Если вы хотите скопировать эту службу, вам нужно иметь сервер приложений Java, скопировать поверх GreetingService, web.xml, который ссылается на него, и, возможно, на несколько других вещей (мне нужно будет проверить более подробно). Это не похоже на то, что вы на самом деле хотите, поэтому либо вы захотите создать службу GWT-RPC в PHP, которая отвечает на этот URL, либо удалить ссылку в коде GWT на вызов RPC в службу приветствия.
С исходным кодом PHP вы, вероятно, не собираетесь использовать GWT-RPC, я предполагаю, что вы, скорее всего, используете JSON или XML, и если это так, то я бы пошел с удалением RPC звоните вообще сейчас.
Все это имеет смысл? Не стесняйтесь спрашивать о дальнейших разъяснениях.
Чтобы решить проблему SOP, я использовал HttpProxyServlet для проксирования HTTP-запросов на мой веб-сервер через сервер разработки.
Загрузите httpProxyPackage.jar
, скопируйте его в WEB-INF/lib/
и настройте его так же в WEB-INF/web.xml
(это для учебника StockWatcher, предполагая, что ваш веб-корень – это папка, содержащая каталог StockWatcher):
<servlet> <servlet-name>jsonStockData</servlet-name> <servlet-class>com.jsos.httpproxy.HttpProxyServlet</servlet-class> <init-param> <param-name>host</param-name> <param-value>http://localhost/StockWatcher/war/stockPrices.php</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>jsonStockData</servlet-name> <!-- http://127.0.0.1:8888/stockPrices.php in dev mode http://gwt/StockWatcher/war/stockPrices.php in prod mode --> <url-pattern>/stockPrices.php</url-pattern> </servlet-mapping>
Затем переопределите URL-адрес JSON следующим образом:
GWT.getHostPageBaseURL() + "stockPrices.php?q=";
вместо:
GWT.getModuleBaseURL() + "stockPrices.php?q=";
Возможно, это не самый лучший способ, но если он может заставить кого-то начать … Был другой способ использования php-cgi
, но у меня его не было.