GWT - Основные шаги для этого кода - PullRequest
0 голосов
/ 28 сентября 2010

Сегодня я делаю первые шаги в рамках GWT.Мне нужно понять (используя официальный * NetBeans учебник , как это приложение работает :) Я помещаю код:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.yournamehere.client;

import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.rpc.AsyncCallback;

/**
 * Main entry point.
 *
 * @author djfonplaz
 */
public class MainEntryPoint implements EntryPoint {
    /** 
     * Creates a new instance of MainEntryPoint
     */
    public MainEntryPoint() {
    }

    public static GWTServiceAsync getService() {
        // Create the client proxy. Note that although you are creating the
        // service interface proper, you cast the result to the asynchronous
        // version of the interface. The cast is always safe because the
        // generated proxy implements the asynchronous interface automatically.

        return GWT.create(GWTService.class);
    }

    public void onModuleLoad() {
        final Label quoteText = new Label();

        Timer timer = new Timer() {
            public void run() {
                //create an async callback to handle the result:
                AsyncCallback callback = new AsyncCallback() {
                    public void onFailure(Throwable arg0) {
                        //display error text if we can't get the quote:
                        quoteText.setText("Failed to get a quote");
                    }

                    public void onSuccess(Object result) {
                        //display the retrieved quote in the label:
                        quoteText.setText((String) result);
                    }
                };
                getService().myMethod(callback);
            }
        };

        timer.scheduleRepeating(1000);
        RootPanel.get().add(quoteText);
    }
}

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package org.yournamehere.client;

import com.google.gwt.user.client.rpc.RemoteService;
import com.google.gwt.user.client.rpc.RemoteServiceRelativePath;

/**
 *
 * @author djfonplaz
 */
@RemoteServiceRelativePath("gwtservice")
public interface GWTService extends RemoteService {
    public String myMethod();
}

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package org.yournamehere.client;

import com.google.gwt.user.client.rpc.AsyncCallback;

/**
 *
 * @author djfonplaz
 */
public interface GWTServiceAsync {
    public void myMethod(AsyncCallback callback);
}

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package org.yournamehere.server;

import com.google.gwt.user.server.rpc.RemoteServiceServlet;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

import org.yournamehere.client.GWTService;

/**
 *
 * @author djfonplaz
 */
public class GWTServiceImpl extends RemoteServiceServlet implements GWTService {
    private Random randomizer = new Random();
    private static final long serialVersionUID = -15020842597334403L;
    private static List quotes = new ArrayList();

    static {
        quotes.add("No great thing is created suddenly - Epictetus");
        quotes.add("Well done is better than well said - Ben Franklin");
        quotes.add("No wind favors he who has no destined port - Montaigne");
        quotes.add("Sometimes even to live is an act of courage - Seneca");
        quotes.add("Know thyself - Socrates");
    }

    public String myMethod() {
        return (String) quotes.get(randomizer.nextInt(5));
    }
}

Итак (более или менее):

  1. стандартный файл welcomeGWT.html подается на сервер, вызов которого напрямую связан с созданием JS сервлета MainEntryProject.java
  2. MainEntryProject.java (при загрузке с ошибкой onModuleLoad ()), который должен сгенерировать строку и отправитьклиенту.

Прямо в этот момент?

Чего я не понимаю:

  1. Кто вызывает метод myMethod () в GWTServiceImpl?Никто не спрашивает этот метод, я просто вижу getService (). MyMethod (callback), который должен вызывать один из класса GWTServiceAsync.
  2. Кто передает строку, сгенерированную GWTServiceImpls, в public void onSuccess (Object result)?
  3. Почему getService () возвращает GWTService, а не GWTServiceImpl?Он должен возвращать класс, а не интерфейс;

Если кто-то может мне помочь, был бы очень рад!ура

Ответы [ 2 ]

2 голосов
/ 28 сентября 2010

Чтобы понять, что происходит, важно, чтобы GWT использовал Генераторы , чтобы создать фактическую реализацию этой службы для клиента.С помощью этой техники можно генерировать код, который вы обычно должны писать самостоятельно.Целые вызовы RPC генерируются для вас автоматически.интерфейс GWTService: это просто ваше определение того, как сервис выглядитinterface GWTServiceAsync: это интерфейс, который реализован в автоматически сгенерированной клиентской части вашего сервиса.Класс GWTServiceImpl: это код, который выполняется на стороне сервера.Поэтому, когда вы вызываете GWT.create(GWTService.class);, вы получаете автоматически сгенерированный экземпляр класса.Если вы действительно заинтересованы в том, что происходит, вы должны взглянуть на реализацию Generator.Это более или менее то, что вы бы сделали вручную:- Сериализация (Google использует нестандартный метод для этого и может меняться в разных версиях GWT)- настроить запрос с сериализованными данными- отправить запрос и дождаться ответа- Десериализовать респон и позвонить вернуть результат через обратный вызов

1 голос
/ 28 сентября 2010

Файл MainEntryProject.java находится в клиентском пакете, поэтому это не сервлет - это java-файл, который будет скомпилирован GWT для JavaScript. Полученный JavaScript встроен в ваш HTML-файл (welcomeGWT.html). Итак,

  • первая загрузка welcomeGWT.html
  • затем браузер начинает выполнять JavaScript, сгенерированный GWT, который после 1000 мс вызывает метод сервера myMethod
  • наконец, сервер вернет обратный вызов, клиент выполнит следующий код:

public void onFailure(Throwable arg0) {<br> quoteText.setText("Failed to get a quote");<br> }<br> public void onSuccess(Object result) {<br> quoteText.setText((String) result);<br> }

Ответы:
1) Клиент вызывает этот метод.
2) Клиент
3) Я мог только догадываться, кажется, это просто, как RPC бросить

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...