GWT默认请求方式采用RPC (remote procedure call).在GWT当中有三种请求方式RPC、Form、RequestBuilder.
Form表单形式 [可参考google代码]:
客户端调用:
//设置请求地址(url action)
formPanel.setAction(GWT.getModuleBaseURL() + "myFormHandler");
//form模式(文件上传、普通模式)
formPanel.setEncoding(FormPanel.ENCODING_URLENCODED);
//请求方式(POST、GET)
formPanel.setMethod(FormPanel.METHOD_GET);
//验证:请求之前判断参数是否为空等操作
formPanel.addSubmitHandler(new FormPanel.SubmitHandler() {
@Override
public void onSubmit(SubmitEvent event) {
if (box.getText().trim().equals("")) {
Window.alert("请输入");
//撤销form.submit()
event.cancel();
}
}
});
//完成:与服务器交互完成后的提示
formPanel.addSubmitCompleteHandler(new FormPanel.SubmitCompleteHandler() {
public void onSubmitComplete(SubmitCompleteEvent event) {
Window.alert(event.getResults());
}
});
提交:
final Button button = new Button("form test");
button.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
//form提交
formPanel.submit();
}
});
简单servlet后台处理:
package org.server; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class MyServlet extends HttpServlet { private static final long serialVersionUID = 1L; @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doPost(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setContentType("text/plain;charset=UTF-8"); resp.getWriter().write(req.getParameter("textbox")); } }
GWT配置:
<?xml version="1.0" encoding="UTF-8"?> <module rename-to='formpanel'> <inherits name='com.google.gwt.user.User' /> <inherits name='com.google.gwt.user.theme.standard.Standard' /> <entry-point class='org.client.Formpanel' /> <source path='client' /> <source path='shared' /> <servlet class="org.server.MyServlet" path="/myFormHandler" /> </module>
web.xml配置
<servlet> <servlet-name>myServlet</servlet-name> <servlet-class>org.server.MyServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>myServlet</servlet-name> <url-pattern>/formpanel/myFormHandler</url-pattern> </servlet-mapping>
RPC方式 [参考google例子]:需要两个接口一个实现类。
@RemoteServiceRelativePath("greet")//访问路径 public interface GreetingService extends RemoteService { String greetServer(String name) throws IllegalArgumentException; }
public interface GreetingServiceAsync { void greetServer(String input, AsyncCallback<String> callback) throws IllegalArgumentException; }
@SuppressWarnings("serial") public class GreetingServiceImpl extends RemoteServiceServlet implements GreetingService { public String greetServer(String input) throws IllegalArgumentException { return input; } }
//创建形式: EmployeeServiceAsync employeeService = GWT.create(EmployeeService.class); //调用形式 employeeService.saveOrUpdateEmployee(employeeId, employeeName, employeeSurname, employeeJobTitle, new AsyncCallback<Void>() {}
RequestBuilder方式后面再介绍.