?????? 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方式后面再介绍.
?
?