从servlet调用外部Web服务

6

我正在开发一个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/...视为本地资源进行搜索,因此无法实现外部请求。

您该如何实现外部请求呢?

谢谢。

3个回答

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

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

1

你没有提及要调用哪种服务,但无论如何,你的servlet都将作为服务客户端运行,因此你应该看一下服务客户端技术。

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

对于调用SOAP服务,你可以使用Apache AxisJava WSIT


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接