【问题标题】:Call an external web service from a servlet从 servlet 调用外部 Web 服务
【发布时间】:2010-05-17 20:17:20
【问题描述】:

我正在开发一个 servlet,它可以获取 Web 服务的名称,并且可以将请求转发到外部 Web 服务,例如:http://www.webservice.com/...

我已经构建了一个响应包装器来拦截响应输出,但我无法将请求转发到外部 Web 服务,它只有在我将请求重定向到同一服务器上的 servlet 时才有效。

例子:

request.getRequestDispatcher("aMyServlet").forward(request, response) // WORKS
 request.getRequestDispatcher("http://www.webservice.com/...").forward(request, response)

不是因为 Tomcat 在服务器上搜索 http://www.webservice.com/... 作为本地资源。

如何进行外部请求?

谢谢

【问题讨论】:

    标签: java servlets forward


    【解决方案1】:

    您使用的forward 方法用于服务器资源之间的通信,(例如:您发现的servlet 到servlet)如果您想重定向到另一个位置,您可以使用HttpServletResponse's sendRedirect 方法。 更好的选择是 执行您自己的 HTTP 请求并将结果流式传输回 浏览器。这听起来比它更难。基本上你创建一个 java.net.HttpURLConnection 与您要访问的网站的 URL “重定向”到。这实际上可以包含查询参数(只要 它们不是太大),因为它永远不会发送到用户的浏览器 并且不会出现在浏览器的 URL 栏中。打开连接,得到 并将其写入 Servlet 的 OutputStream。

    【讨论】:

      【解决方案2】:

      要向外部服务发出任何请求,您必须明确发出新的 HTTP 请求并处理其响应。看看HttpUrlConnection 类。

      【讨论】:

        【解决方案3】:

        您没有提及要调用哪种服务,但无论哪种方式,您的 servlet 都作为服务客户端运行,因此您应该研究服务客户端技术。

        对于调用 REST 样式的服务,java.net.URLApache Commons HttpClient 可用于发送 URL 请求并获取响应。

        要调用 SOAP 服务,您可以使用 Apache AxisJava WSIT

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-01-31
          • 1970-01-01
          • 1970-01-01
          • 2017-08-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多