我正在开发一个获取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/...
作为本地资源。
如何进行外部请求?
由于
答案 0 :(得分:4)
forward
方法用于在服务器资源之间进行通信(例如:您发现的servlet到servlet)如果要重定向到另一个位置,可以使用{{1} } 方法。
更好的选择是
执行您自己的HTTP请求并将结果流回到
浏览器。这听起来比现在更难。基本上你创造了一个
HttpServletResponse's sendRedirect
包含您想要的网站的网址
“重定向”到。这实际上可以包含查询参数(只要
它们不会太大)因为它永远不会被发送到用户的浏览器
要么不会出现在浏览器URL栏中。打开连接,搞定
内容并将其写入Servlet的OutputStream。
答案 1 :(得分:2)
要向外部服务发出任何请求,您必须明确地发出新的HTTP请求并处理其响应。看一下HttpUrlConnection课程。
答案 2 :(得分:1)
您没有提到要调用的服务类型,但无论哪种方式,您的servlet都充当服务客户端,因此您应该关注服务客户端技术。
对于调用REST样式的服务,java.net.URL
或Apache Commons HttpClient可用于发送URL请求并获取响应。
要调用SOAP服务,您可以使用Apache Axis或Java WSIT。