- GWT Java-to-JavaScript Compiler
- JRE emulation library
- GWT web UI
- Development tools (Hosted web browser, shell,..)
- RPC
Communicating with the server
- RPC
- XML
- JSON
Packages
Making GWT Remote Procedure Calls
Modul
UI
package cz.kibo.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.rpc.AsyncCallback; import com.google.gwt.user.client.rpc.ServiceDefTarget; import com.google.gwt.user.client.ui.TextBox; public class SayHelloEntryPoint implements EntryPoint { private TextBox name = new TextBox(); private Label response = new Label(); private Button button = new Button("Send"); private HelloServiceAsync service; private AsyncCallback serviceCallback = new AsyncCallback() { public void onSuccess(Object result) { String string = (String) result; response.setText(string); } public void onFailure(Throwable caught) { response.setText("There was an error: " + caught.toString()); } }; /** * Creates a new instance of MainEntryPoint */ public SayHelloEntryPoint() { } /** * The entry point method, called automatically by loading a module * that declares an implementing class as an entry-point */ public void onModuleLoad() { //Obtain Async service for interface service = GWT.create(HelloService.class); //go to URL //or use @RemoteServiceRelativePath("hello") ServiceDefTarget endpoint = (ServiceDefTarget) service; endpoint.setServiceEntryPoint(GWT.getModuleBaseURL() + "hello"); RootPanel root = RootPanel.get("content"); root.add(new Label("Name")); root.add(name); // Listen for mouse events on the Add button. button.addClickHandler(new ClickHandler() { public void onClick(ClickEvent event) { service.sayHello(new Person(name.getText()), serviceCallback); } }); root.add(button); root.add(response); } }
Service
- extends RemoteService
package cz.kibo.client; import com.google.gwt.user.client.rpc.RemoteService; import com.google.gwt.user.client.rpc.RemoteServiceRelativePath; //@RemoteServiceRelativePath("hello") public interface HelloService extends RemoteService { String sayHello(Person p); }
AsyncService
- return void
- have last param AsyncCallback
package cz.kibo.client; import com.google.gwt.user.client.rpc.AsyncCallback; public interface HelloServiceAsync { void sayHello(Person p, AsyncCallback callback); }
Service implementation
- can extends RemoteServiceServlet
- or you have to implements HelloServlet yet
package cz.kibo.server; import com.google.gwt.user.server.rpc.RemoteServiceServlet; import cz.kibo.client.HelloService; import cz.kibo.client.Person; public class HelloServiceImpl extends RemoteServiceServlet implements HelloService{ public String sayHello(Person p) { return "Hello " + p.name; } }
RemoteServiceServlet
- getThreadLocalRequest()
- getThreadLocalResponse()
- onBeforeRequestDeserialized (String)
- onAfterResponseSerialized (String)
- shouldCompressResponse (HttpServletRequest, HttpServletResponse, String)
- processCall(String)
Model
- implements Serializable or IsSerializable
package cz.kibo.client; import java.io.Serializable; public class Person implements Serializable{ public String name; public Person(){ this(null); } public Person(String name) { super(); this.name = name; } }
Netbeans project