2010-03-05 3 views
1

Je suis d'essayer GWT dans cette « configuration »:GWT problème demande Builder (même question de politique de site?)

1) J'ai écrit un back-end du serveur en Python qui produira JSON (en cours d'exécution à localhot: 8094)

2) J'ai écrit une application GWT très simple qui utilisera RequestBuilder pour définir GET au serveur python (en mode développement du plugin Eclipse GWT, il est accessible par http://127.0.0.1:8888/test.html)

le code est tout simplement

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

     } 


    } 
} 

Cependant, l'alerte est toujours de onResponseReceived et rien d'affichage (chaîne vide, je suppose)

je peux atteindre mon serveur python bien et télécharger le JSON via le navigateur. Mais je ne vois aucune requête sur le serveur de GWT.

Je me suis assuré que "nom = inherits 'com.google.gwt.http.HTTP" est dans le fichier gwt.xml

Les questions sont:

1) Est-ce même site de restriction de la politique à travaille ici? Je voudrais attendre Exception (et donc le message d'échec), mais cela ne s'est pas produit

2) Si c'est vraiment le même problème de politique de site, quelle est la manière la plus facile de déployer les scripts GWT du backend python? Le plugin eclipse gwt génère des artefacts dans le sous-répertoire war. Est-il suffisant de copier ces fichiers dans un répertoire statique de mon backend python?

Répondre

2

1) Oui, alors que l'hôte est le même, vous essayez d'accéder à un port différent - SOP ne le permet pas. Vous obtenez probablement des exceptions JavaScript - vérifiez la console de Firebug ou quelque chose de similaire.

2) Suivez le guide dans les documents officiels. Vous n'avez pas besoin d'un serveur Java - un seul qui peut servir le contenu HTTP (par exemple, Apache va bien). Je n'ai aucune expérience avec Python en tant que backend, mais je suis sûr qu'il existe une solution pour servir Python et HTTP.

Lorsque vous utilisez le drapeau -noserver, votre serveur externe est utilisé par le navigateur en mode hébergé GWT pour servir à la fois votre contenu dynamique, et tout le contenu statique (comme la page d'accueil de l'application GWT, d'autres fichiers HTML, images, CSS , et ainsi de suite.)

Le contenu dynamique dans ce cas seraient vos scripts Python.

1

Oui, cela échouera en raison de SOP. Quel code de réponse HTTP obtenez-vous? Normalement dans ce cas, revient à 0 au lieu de 200 (OK). Une solution peut être d'utiliser une approche JSONP J'ai écrit un peu sur JSONP avec GWT dans le cadre de cet article: http://www.bristol-gtug.org/?p=76

+0

Comment faire ceci sans ressort? –

1

Ceci pourrait être trop tard. Si vous n'accédez pas à des ressources locales en utilisant un chemin relatif et tel, vous avez raison, il est soumis à SOP (même politique d'origine). L'indicateur -no-server ne sera pas d'une grande aide pour résoudre ce problème. Pour contourner ce problème, lisez http://code.google.com/p/google-web-toolkit-doc-1-5/wiki/FAQ_JSONFeedsFromOtherDomain. Une solution encore meilleure serait d'utiliser com.google.gwt.jsonp.client.JsonpRequestBuilder, (n'oubliez pas d'hériter hérite name = 'com.google.gwt.jsonp.Jsonp '\) qui est utilisé par le gdata api ("mieux" dans le sens où vous n'avez pas à l'écrire vous-même). J'espère que cela t'aides. Salutations ~