![](/img/trans.png)
[英]GWT : How to call SERVLET FROM GWT_SERVLET and How to return value from target servlet to source servlet?
[英]How to call one servlet to another servlet in GWT Using Java
1)嗨,我是新世界。 我想将一个servlet执行到另一个servlet。 例如,我想从servlet1中执行servlet2。 我可以使用RPC调用执行sevlet1,因此从servlet1中我想执行具有doPost方法的servlet2。
2)我想在GAE上使用任务队列。 因此可以通过阅读https://cloud.google.com/appengine/docs/java/taskqueue/overview-push来了解任务队列。 在本文档中,Enqueue是创建任务的servlet,而worker是执行Task Queue代码的另一个servlet。 因此,如何在不使用html代码的情况下调用入队servlet。
有什么帮助吗?
提前致谢
Servlet仅是客户端和服务器之间的通信。 您的服务器应采取一切必要措施来封送信息,然后将其传递给应用程序的业务层。
因此,实际上,让servlet1调用servlet2是错误的方法。
这两个servlet都会在您的业务层中返回相同方法的结果。 这使您的代码无限容易地测试和维护。
例如,如果要从两个不同的Servlet中加入相同的请求,则可以创建一个QueueManager,例如
公共类QueueManager {
public static void startWorker(String key){
Queue queue = QueueFactory.getDefaultQueue();
queue.add(TaskOptions.Builder.withUrl("/worker").param("key", key));
}
}
然后通过以下方式从您的servlet中调用它
QueueManager.startWorker(aKey);
(从服务器上的servlet)
要在不使用html代码的情况下调用调用队列servlet,请使用RequestDispatcher并转发请求。
String enqueueURL = "/enqueue";
RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(destination);
dispatcher.forward(request, response);
要将List发送到另一个servlet,请使用request.setAttribute
request.setAttribute("myList", list);
要在其他servlet中获取它,请使用request.getAttribute
List value = (List)request.getAttribute("myList")
从设计的角度来看,如果您的servlet充当了Model-View-Controller系统中的Controller,那么它的使用是适当的。
(来自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 []的帮助,请查看此内容或类似内容(例如,将Java Object覆盖为byte []数组..不要忘了包含强制转换以将其返回到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
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.