繁体   English   中英

如何使用Java在GWT中将一个servlet调用到另一个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客户端代码)

  • 方法A]

只需进行一个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中)

  • 方法B]

要从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
}

在RequestBuilder上查看GWT文档

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM