Проблема с GWT Request Builder (та же проблема с политикой сайта?)

Я пробую GWT в этой «конфигурации»:

1) Я написал серверную часть на python, которая будет выводить json (работает на localhot: 8094)

2) Я написал очень простое приложение GWT, которое будет использовать RequestBuilder для установки GET на сервер python (в режиме разработки плагина GWT eclipse он доступен через http://127.0.0.1:8888/test.html)

Код просто

/**
 * Entry point classes define <code>onModuleLoad()</code>.
 */
public class Test implements EntryPoint {
    /**
     * The message displayed to the user when the server cannot be reached or
     * returns an error.
     */

    private static final String SERVER_URL = "http://localhost:8094";
    private static final String SERVER_ERROR = "An error occurred while "
            + "attempting to contact the server. Please check your network "
            + "connection and try again.";

    /**
     * This is the entry point method.
     */
    public void onModuleLoad() {

        RequestBuilder requestBuilder = new RequestBuilder(RequestBuilder.GET, SERVER_URL);
        try {
            requestBuilder.sendRequest(null, new Jazz10RequestCallback());
        } catch (RequestException e) {
            Window.alert("Failed to send the message: " 
                    + e.getMessage());
        }

    }

    class Jazz10RequestCallback implements RequestCallback{

        public void onError(Request request, Throwable exception) {
                // never reach here
        Window.alert("Failed to send the message: "
                    + exception.getMessage());

        }

        public void onResponseReceived(Request request, Response response) {
            // render output
            Window.alert(response.getText());

        }


    }
}

Однако предупреждение всегда приходит от onResponseReceived и ничего не отображает (я полагаю, пустая строка)

Я могу получить доступ к своему серверу Python и загрузить json через браузер. Но я не вижу ни одного запроса, поступающего на сервер от GWT.

Я убедился, что "наследует имя='com.google.gwt.http.HTTP" в файле gwt.xml

Вопросы:

1) Здесь действуют те же ограничения политики сайта? Я ожидал Exception (и, следовательно, сообщение о сбое), но этого не произошло

2) Если это действительно та же проблема с политикой сайта, как проще всего развернуть сценарии GWT из бэкэнда Python? Плагин eclipse gwt создает некоторые артефакты в подкаталоге war. Достаточно ли скопировать эти файлы в какой-то статический каталог моего бэкэнда Python?


person Anthony Kong    schedule 05.03.2010    source источник


Ответы (3)


1) Да, хотя хост тот же, вы пытаетесь получить доступ к другому порту - SOP этого не позволяет. Вы, вероятно, получаете исключения JavaScript - проверьте консоль Firebug или что-то подобное.

2) Следуйте руководству в официальной документации. Вам не нужен Java-сервер — достаточно того, который может обслуживать HTTP-контент (так что, например, Apache подойдет). У меня нет опыта работы с Python в качестве серверной части, но я уверен, что есть решение для обслуживания Python и HTTP.

При использовании флага -noserver ваш внешний сервер используется браузером GWT Hosted Mode для обслуживания как вашего динамического содержимого, так и всего статического содержимого (например, главной страницы приложения GWT, других файлов HTML, изображений, CSS и т. д.). .)

В этом случае динамическим содержимым будут ваши скрипты Python.

person Igor Klimer    schedule 05.03.2010

да, это не удастся из-за SOP. Какой код ответа HTTP вы получаете? Обычно в этом случае возвращается значение 0 вместо 200 (ОК). Решением может быть использование подхода JSONP, который я немного написал о JSONP с GWT в рамках этой статьи: http://www.bristol-gtug.org/?p=76

person Daniel Vaughan    schedule 10.03.2010
comment
Как это сделать без пружины? - person Muhammad Hewedy; 08.02.2011

Это может быть слишком поздно. Если вы не получаете доступ к локальным ресурсам, используя относительный путь и тому подобное, вы правы, он подчиняется SOP (политика того же происхождения). Флаг -no-server не поможет решить эту проблему. Чтобы обойти эту проблему, прочитайте http://code.google.com/p/google-web-toolkit-doc-1-5/wiki/FAQ_JSONFeedsFromOtherDomain . Еще лучшим решением было бы использовать com.google.gwt.jsonp.client.JsonpRequestBuilder (не забудьте наследовать наследует name = 'com.google.gwt.jsonp.Jsonp' \), который используется gdata api ("лучше " в том смысле, что вам не нужно писать это самостоятельно). Надеюсь это поможет. Ура~

person bernardw    schedule 27.06.2010