(来自服务器上的 servlet)
要在不使用 html 代码的情况下调用 call enqueue servlet,请使用 RequestDispatcher 并 转发 请求。
String enqueueURL = "/enqueue";
RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(destination);
dispatcher.forward(request, response);
要将列表发送到另一个 servlet,请使用 request.setAttribute
request.setAttribute("myList", list);
要在不同的 servlet 中获取它,请使用 request.getAttribute
List value = (List)request.getAttribute("myList")
从设计的角度来看,如果您的 servlet 用作控制器,例如在模型-视图-控制器系统中,那么它的使用是合适的。
(来自 GWT 客户端代码)
只需进行一次 RPC 调用,然后在处理它的方法中放入您的队列代码:
public class MyServiceImpl extends RemoteServiceServlet implements
MyService {
public void myMethod(String key) {
Queue queue = QueueFactory.getDefaultQueue();
byte[] buf;
TaskOptions taskOptions= TaskOptions.Builder.withUrl("/tasks/worker").method(Method.POST);
taskOptions.payload(buf);
queue.add(taskOptions);
}
}
如果您在将 List 转换为 byte[] 时需要帮助,请参阅 this or something like it (i.e. coverting a Java Object to an byte[] array ..don't forget to include a cast to get it back into a List)
要从 GWT 中的客户端代码调用 servlet,只需使用 RequestBuilder
import com.google.gwt.http.client.*;
...
String url = "http://www.myurl.com/enqueue";
RequestBuilder builder = new RequestBuilder(RequestBuilder.POST, URL.encode(url));
try {
Request request = builder.sendRequest(null, new RequestCallback() {
public void onError(Request request, Throwable exception) {
// Couldn't connect to server (could be timeout, SOP violation, etc.)
}
public void onResponseReceived(Request request, Response response) {
if (200 == response.getStatusCode()) {
// Process the response in response.getText()
} else {
// Handle the error. Can get the status text from response.getStatusText()
}
}
});
} catch (RequestException e) {
// Couldn't connect to server
}
见GWT Docs on RequestBuilder