环境为:GWT 2.2 + eclipse 3.6
工程名称:PersonRPC
包名:com.chuyue.rpc
1. 客服端代码:
import com.google.gwt.user.client.rpc.RemoteService;
import com.google.gwt.user.client.rpc.RemoteServiceRelativePath;
@RemoteServiceRelativePath("person") //这个不能少的
public interface MyService extends RemoteService {
public Person getPerson(String name,int age) throws Exception;
}
import com.google.gwt.user.client.rpc.AsyncCallback;
public interface MyServiceAsync {
void getPerson(String name, int age, AsyncCallback<Person> callback);
}
import com.google.gwt.user.client.rpc.IsSerializable;
public class Person implements IsSerializable {
private String name;
private int age;
public Person() {
}
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.TextBox;
public class PersonRPC implements EntryPoint {
private static final MyServiceAsync myService = GWT.create(MyService.class);
public void onModuleLoad() {
RootPanel rootPanel = RootPanel.get();
final TextBox nameField = new TextBox();
final TextBox ageFiled = new TextBox();
final Button sendBtn = new Button("send");
nameField.setText("zhangsan");
ageFiled.setText("12");
final String nameValue = nameField.getText();
String ageValue = ageFiled.getText();
Integer iAge = new Integer(ageValue);
final int ageVal = iAge.intValue();
class myHander implements ClickHandler{
@Override
public void onClick(ClickEvent event) {
sendServer();
}
private void sendServer(){
myService.getPerson(nameValue,ageVal, new AsyncCallback<Person>() {
@Override
public void onSuccess(Person result) {
// TODO Auto-generated method stub
Window.alert(result.getName()+" "+result.getAge());
}
@Override
public void onFailure(Throwable caught) {
// TODO Auto-generated method stub
Window.alert("error result");
}
});
}
}
myHander myHander = new myHander();
sendBtn.addClickHandler(myHander);
rootPanel.add(nameField);
rootPanel.add(ageFiled);
rootPanel.add(sendBtn);
}
}
2.server端代码:
import com.chuyue.rpc.client.MyService;
import com.chuyue.rpc.client.Person;
import com.google.gwt.user.server.rpc.RemoteServiceServlet;
@SuppressWarnings("serial")
public class MyServiceImpl extends RemoteServiceServlet implements MyService {
@Override
public Person getPerson(String name, int age) throws Exception {
Person person = new Person();
person.setName(name+"aaaaaaaaaaa");
person.setAge(age+100);
return person;
}
}
3.配置文件:PersonRPC.gwt.xml
<?xml version="1.0" encoding="UTF-8"?>
<module rename-to='personrpc'>
<inherits name='com.google.gwt.user.User'/>
<inherits name='com.google.gwt.user.theme.standard.Standard'/>
<entry-point class='com.chuyue.rpc.client.PersonRPC'/>
<source path='client'/>
<source path='shared'/>
</module>
4.web.xml的配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<!-- Servlets -->
<servlet>
<servlet-name>MyServiceImpl</servlet-name>
<servlet-class>com.chuyue.rpc.server.MyServiceImpl</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyServiceImpl</servlet-name>
<url-pattern>/personrpc/person</url-pattern>
</servlet-mapping>
<!-- Default page to serve -->
<welcome-file-list>
<welcome-file>PersonRPC.html</welcome-file>
</welcome-file-list>
</web-app>
很简单的一个demo,实现了客服端和服务器端的交互,希望有点帮助。