我为我的网络服务创建了一个WSDL。我想知道如何从我的另一个Web应用程序的jsp页面调用它。
我想从jsp调用web服务..例如,考虑到我有非常简单的web服务,它会在点击提交后显示我在index.jsp页面中输入的文本,我将如何使用wsdl url来单击提交时调用Web服务获取文本值。
/维克拉姆
答案 0 :(得分:5)
我真的不建议在JSP中编写任何类型的逻辑,包括调用Web服务,这不是一个好习惯。 JSP是一种视图技术,应该用于演示,而不是用于业务逻辑。相反,您应该将表单提交给Servlet,检索提交的参数,调用Web服务,然后在JSP视图中打印结果。但是让我们关闭括号。
由于您在评论中提到了WebLogic和Workshop,我假设您正在使用它们:) WebLogic支持JAX-WS,因此我建议您将它用于您的客户端。
基本上,您需要首先生成“客户端工件”(即用于调用Web服务的类)。一种方法是使用clientgen
Ant任务。有关详细信息,请参阅Invoking a Web Service from a Stand-alone Client: Main Steps(应该可以从Workshop生成类,但我不能告诉您如何使用它)。
一旦生成客户端工件,调用Web服务就是小菜一碟。代码类似于以下内容:
ComplexService test = new ComplexService(),
ComplexPortType port = test.getComplexPortTypePort();
BasicStruct in = new BasicStruct();
in.setIntValue(999);
in.setStringValue("Hello Struct");
BasicStruct result = port.echoComplexType(in);
System.out.println("echoComplexType called. Result: " + result.getIntValue() + ", " + result.getStringValue());
答案 1 :(得分:2)
您是在谈论从浏览器调用它,还是从JSP调用它来呈现发送到浏览器的HTML中的内容?那些是完全不同的问题。
如果您正在谈论从浏览器中调用它,那么热门技巧就是将SOAP有效负载视为一大堆XML版本。然后填写区分SOAP请求所需的几条信息,然后使用XMLHttpRequest将XML发送到服务器。最后,然后从SOAP返回有效负载中提取结果。
如果您只想从JSP调用Web服务,最好的办法是创建一个实用程序包装器类,它包装所有管道以进行Web服务调用,然后使用标准从JSP调用该包装器Java技术。
编辑 - 回答问题
所以,基本上你有一个带有文本框的index.jsp页面。您点击提交,您希望将该提交的文本发送到Web服务,并将结果显示回浏览器。
简单地说,除非使用XHLHttpRequest,否则您需要创建Web服务客户端(使用JAX-WS,或Axis,或任何其他Java Web服务工具包)。
然后你将有一个Servlet或JSP从表单中获取POST请求,从请求中提取文本,然后它将调用Web服务。最后,它会将结果呈现给客户端(使用JSP或其他)。
您无法将HTML直接发布到Web服务,协议也不同。
所以
text text
| --> | | ----> |
| | Servlet |result | Web Service
| | | <---- |
Browser | | |
| | | forward |
| | | ------> | JSP
| |
| rendered result |
| <---------------------- |
答案 2 :(得分:0)