如何在.jsp页面中创建Web服务客户端?

时间:2010-04-10 00:33:18

标签: java web-services jsp weblogic

我为我的网络服务创建了一个WSDL。我想知道如何从我的另一个Web应用程序的jsp页面调用它。

我想从jsp调用web服务..例如,考虑到我有非常简单的web服务,它会在点击提交后显示我在index.jsp页面中输入的文本,我将如何使用wsdl url来单击提交时调用Web服务获取文本值。

/维克拉姆

3 个答案:

答案 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)

数据如何到达java servlet页面?

JSON,XML?

如果 JSON ,我建议您使用 jQuery .get()方法太棒了!这就是我在ASP页面中使用的方式......