2010-05-17 61 views
6

我正在开发一个servlet,它得到了Web服务的名称,可以将请求转发到外部网络服务,例如:http://www.webservice.com/...呼叫从一个servlet外部Web服务

我有建立一个响应包装拦截响应输出,但我不能将请求转发到外部Web服务,它只适用于将请求重定向到位于同一服务器上的servlet的情况。

例子:

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

不会因为Tomcat中的服务器作为本地资源上搜索http://www.webservice.com/...

我该如何处理外部请求?

感谢

回答

2

要对外部服务的任何要求,你必须明确地做一个新的HTTP请求并处理其响应。看看HttpUrlConnection课程。

1

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

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

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

4

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