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

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

【问题讨论】:

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

标签: java html servlets post


【解决方案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 stackoverflow.com/questions/4374548/…的问题
    【解决方案3】:

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

    【讨论】:

    • 我希望在我的应用程序中调用另一个 servlet,但它必须通过 POST 方法。我通常会做的是 response.redirect(...) 但这会调用 GET 方法...我怎样才能调用 POST?
    • 我所说的:转发或包含,取决于您要执行的操作。有关详细信息,请参阅"Invoking Other Web Resources" in the JEE tutorial
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-10
    相关资源
    最近更新 更多