从servlet调用外部Web服务

时间:2010-05-17 20:17:21

标签: java servlets forward

我正在开发一个获取Web服务名称的servlet,可以将请求转发给外部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/...作为本地资源。

如何进行外部请求?

由于

3 个答案:

答案 0 :(得分:4)

您正在使用的

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

答案 1 :(得分:2)

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

答案 2 :(得分:1)

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

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

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