Проблема GWT Request Builder (та же проблема политики сайта?) - PullRequest
1 голос
/ 06 марта 2010

Я испытываю 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.

Я удостоверился, что в файле gwt.xml в файле gwt.xml указано «значение = = com.google.gwt.http.HTTP»

Вопросы:

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

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

Ответы [ 3 ]

2 голосов
/ 06 марта 2010

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

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

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

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

1 голос
/ 27 июня 2010

Это может быть слишком поздно. Если вы не обращаетесь к локальным ресурсам по относительному пути и т. Д., Вы правы, на него распространяется 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 ("лучше «в том смысле, что вам не нужно писать это самостоятельно). Надеюсь это поможет. Приветствия ~

1 голос
/ 11 марта 2010

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

...