Pergunta

Estou experimentando GWT nesta 'configuração':

1) Escrevi um back -end de servidor no Python, que produzirá a saída JSON (em execução no localhot: 8094)

2) Escrevi um aplicativo GWT muito simples que usará o RequestBuilder para definir o GET BET para o servidor Python (no modo de desenvolvimento do plugin GWT Eclipse, ele é acessível via http://127.0.0.1:8888/test.html)

O código é simplesmente

/**
 * 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());

        }


    }
}

No entanto, o alerta sempre vem de On -Responsereced e não exibe nada (string vazia, suponho)

Eu posso chegar ao meu servidor Python bem e baixar o JSON através do navegador. Mas não consigo ver nenhuma solicitação atingindo o servidor do GWT.

Eu assegurei que "herde o nome = 'com.google.gwt.http.http" está no arquivo gwt.xml

As perguntas são:

1) É a mesma restrição da política do site no trabalho aqui? Eu esperaria exceção (e, portanto, a mensagem de falha), mas isso não aconteceu

2) Se é realmente o mesmo problema de política do site, qual é a maneira mais fácil de implantar os scripts GWT no back -end do Python? O plug -in Eclipse GWT produz algum artefato no subdiretório de guerra. É suficiente copiar esses arquivos para algum diretório estático do meu back -end do Python?

Foi útil?

Solução

1) Sim, embora o host seja o mesmo, você está tentando acessar uma porta diferente - o SOP não permite isso. Você provavelmente está obtendo exceções de JavaScript - verifique o console da Firebug ou algo semelhante.

2) Siga o guia nos documentos oficiais. Você não precisa de um servidor Java - apenas um que pode servir conteúdo HTTP (por exemplo, o Apache está bem). Não tenho experiência com Python como back -end, mas tenho certeza de que há uma solução para servir Python e HTTP.

Ao usar a bandeira -noserver, seu servidor externo é usado pelo navegador de modo hospedado GWT para servir seu conteúdo dinâmico e todo o conteúdo estático (como a página do host do aplicativo GWT, outros arquivos HTML, imagens, CSS e assim por diante .)

O conteúdo dinâmico nesse caso seria seus scripts Python.

Outras dicas

Sim, isso falhará devido ao SOP. Qual código de resposta HTTP você obtém? Normalmente, neste caso, volta como 0 em vez de 200 (OK). Uma soluções pode ser usar uma abordagem JSONP que escrevi um pouco no JSONP com o GWT como parte deste artigo: http://www.bristol-gtug.org/?p=76

Isso pode ser tarde demais. Se você não está acessando recursos locais usando um caminho relativo e tal, você está certo, ele está sujeito à POP (a mesma política de origem). O sinalizador -No -Server não ajudará a resolver esse problema. Para passar por essa edição, leia http://code.google.com/p/google-web-toolkit-doc-1-5/wiki/faq_jsonfeedsfromotherdomain . Uma solução ainda melhor seria usar com.google.gwt.jsonp.client.jsonprequestbuilder (lembre -se de herdar o nome = 'com.google.gwt.jsonp.jsonp' ) que é utilizado pelo gdata api ("melhor "No sentido de que você não precisa escrever você mesmo). Espero que isto ajude. Saúde ~

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top