7

我正在开发一个 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)

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

如何进行外部请求?

谢谢

4

3 回答 3

4

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

于 2010-05-17T20:31:55.167 回答
2

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

于 2010-05-17T20:23:55.277 回答
1

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

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

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

于 2010-05-17T20:25:35.487 回答