从另一个 Servlet 调用 Servlet Post

Posted

技术标签:

【中文标题】从另一个 Servlet 调用 Servlet Post【英文标题】:Calling Servlet Post from another Servlet 【发布时间】:2011-12-08 11:15:33 【问题描述】:

我需要从另一个 servlet 调用 servlet POST 方法并在 servlet 参数中传递一个 blob。这可能吗,如果可以,怎么办。 PS:我不能使用 Apache HttpClient

【问题讨论】:

嗯 Apache HttpClient 是开源的...复制和粘贴? 我无法使用,因为我使用的是 Google App Engine,它对某些可以使用的类施加了限制 【参考方案1】:

您需要自己创建和发送 HTTP 请求。您不能使用 forward/redirect/include 因为您想将方法从 GET 更改为 POST 并且您想发送 multipart/form-data 请求。

由于 HttpClient(和其他 3rd 方库?)显然不是一个选项,您最好的选择是使用提供的标准 Java SE API java.net.URLConnection。长话短说:Using java.net.URLConnection to fire and handle HTTP requests 在底部您可以找到 multipart/form-data 示例。

请注意,此问题并非特定于 servlet。换句话说,您必须能够使用main() 方法在普通Java 应用程序中执行此代码。这样可以更轻松地进行测试和微调。一旦你让它工作,只需让 servlet 执行相同的代码。


与问题无关,我的印象是某处存在重大设计失败,当然如果两个 servlet 在相同的 Web 应用程序上下文中运行。您要将 POST 请求发送到的另一个 servlet 显然耦合太紧,应该重构。

【讨论】:

【参考方案2】:

您可以在您的应用程序中获取另一个 servlet 的调度程序,然后按照@Ryan 的建议转发或包含它。您的第一个 servlet 中的代码应该是这样的:

ServletContext context = this.getServletContext();
RequestDispatcher dispatcher = context.getRequestDispatcher("/otherurltoservlet");

// change your request and response accordingly

dispatcher.forward(request, response);

【讨论】:

我需要在我的应用程序的另一个 servlet 上调用 POST 方法。那会调用“otherurltoservlet”的 POST 方法吗? 我相信如果第一个 servlet 是通过 post 调用的,那么第二个 servlet 将通过 dispatcher.forward 链中的 post 调用。 看这里有关 GET to POST ***.com/questions/4374548/…的问题【参考方案3】:

您的意思是从您的应用程序调用另一个 Web 服务吗?如果是这样,那么像HttpClient 这样的东西就是你想要的。如果你的意思是你想在你的应用程序中以编程方式调用另一个 servlet,那么你正在寻找forward to it 或include it。

【讨论】:

我希望在我的应用程序中调用另一个 servlet,但它必须通过 POST 方法。我通常会做的是 response.redirect(...) 但这会调用 GET 方法...我怎样才能调用 POST? 我所说的:转发或包含,取决于您要执行的操作。有关详细信息,请参阅"Invoking Other Web Resources" in the JEE tutorial。

以上是关于从另一个 Servlet 调用 Servlet Post的主要内容,如果未能解决你的问题,请参考以下文章

servlet中为啥doget要调用dopost?默认调用哪个?默认都调用?

在servlet中获取cookie

在servlet中获取cookie

如何通过RMI从另一个应用程序调用已部署应用程序的数据对象的方法?

js调用activeMQ

Servlet Operational Principle