本文介绍了使用ide开发jax-ws web服务以及在不同客户端中使用该服务……
java api for xml web services (jax-ws) 2.0,jsr 224 是 java ee 5 平台的重要组成部分。作为 java api for xml-based rpc 1.1 (jax-rpc) 的后续发行版本,jax-ws 简化了使用 java 技术开发 web服务的工作。并且通过对多种协议(如 soap 1.1、soap 1.2、xml)的支持,以及提供用于支持其他协议和 http 的工具,它解决了 jax-rpc 1.1 中存在的一些问题。jax-ws 使用 jaxb 2.0 提供数据绑定服务,并支持通过定制来控制生成的服务端点接口。通过对标注的支持,jax-ws 简化了 web 服务开发,并缩小了运行时 jar 文件的大小。
本文档向您介绍了有关使用 ide 开发 jax-ws web服务以及在三个不同的客户端(java se 应用程序中的 java 类、web 应用程序中的 servlet 或 jsp 页)中使用该服务的基础知识。在本文档中创建的三个客户端是独立的应用程序,它们都使用同一个 web服务。
在开始之前,您需要在计算机中安装以下软件:
- netbeans ide 5.5
- java standard development kit (jdk) 版本 5.0 或版本 6.0
- sun java system application server 9.0
安装并配置教程环境
如果尚未注册 sun java system application server 9.0 的实例,则必须先进行注册,然后才可以着手开发 java ee 5 应用程序:
- 从主窗口中,选择“工具”>“服务器管理器”。
- 单击“添加服务器”。选择 "sun java system application server",并为此实例指定一个名称,然后,单击“下一步”。
- 指定服务器信息、应用服务器本地实例的位置以及要将 web服务部署到的域。
- 单击“完成”。
注意:也可以部署到 tomcat web server,但由于它仅具有一个 web 容器,因此应在下一部分创建 web 应用程序,而不是 ejb 模块。与 jsr-109 web服务不同的是,jax-ws web服务可以成功地部署到 tomcat web 容器中。
创建 web服务
本练习的目的是创建一个适用于您决定使用的部署容器的项目。在建立项目后,您将在其中创建 web服务。
选择容器
您可以在 web 容器或 ejb 容器中部署 web 服务。这要取决于具体的选择。例如,如果您计划部署到仅具有 web 容器的 tomcat web server 上,则应该选择创建 web 应用程序,而不是 ejb 模块。
- 选择“文件”>“新建项目”(ctrl-shift-n)。从 "web" 类别中,选择“web 应用程序”,或者从“企业”类别中,选择“ejb 模块”。
- 将项目命名为 calculatorwsapplication。
- 根据要使用的部署服务器,请执行以下操作:
- 对于 sun java system application server,将 j2ee 版本设置为 "java ee 5"。
- 对于 tomcat web server,请取消选中“将源代码级别设置为 1.4”复选框。
- 单击“完成”。
通过 java 类创建 web服务
- 右键单击 calculatorwsapplication 节点,然后选择“新建”>“web服务”。
- 将 web服务命名为 calculatorws,在“包”中键入 org.me.calculator,然后单击“完成”。
将在“项目”窗口中显示新建的 web服务。例如,对于 web 应用程序,现在“项目”窗口将如下所示:

ide 将自动创建服务器所需的部署描述符(如果有)。对于 sun java system application server,则不需要部署描述符。对于部署到 tomcat web server 的 web 服务,将添加 sun-jaxws.xml 以及 web.xml 中的 wsservlet 项。
对 web服务进行编码
本节的目的是对 ide 生成的文件和代码执行一些有意义的操作。您将添加一个操作,该操作将从客户端接收到的两个数字相加起来。
将业务逻辑添加到 web 服务
- 展开“web 服务”节点,然后双击 "calculatorws" 节点。将在源代码编辑器中打开 web 服务。请注意,代码中已存在了一个操作。它被注释掉了。现在,我们将从头开始创建一个新的操作。创建此操作的另一种方法是删除代码注释掉的行。
- 在类主体(位于注释掉的代码之上或之下)中单击鼠标右键,然后选择“web 服务”>“添加操作”。
- 在“添加操作”对话框的上半部分,在“名称”中键入 add,并从“返回类型”下拉列表中选择 int。
- 在“添加操作”对话框的下半部分,单击“添加”,然后创建一个类型为 int、名为 i 的参数。单击“确定”。
- 重新单击“添加”,然后创建一个类型为 int、名为 j 的参数。
- 单击位于“添加操作”对话框底部的“确定”。请注意,add 方法的框架已添加到源代码编辑器中:
| @webmethod public int add(@webparam(name = "i") int i, @webparam(name = "j") int j) { // todo implement operation return 0; } |
按如下所示更改 add 方法(更改内容以粗体显示):
| @webmethod public int add(@webparam(name = "i") int i, @webparam(name = "j") int j) { int k = i + j; return k; } |
部署并测试 web服务
在将 web服务部署到 web 容器时,ide 允许您测试 web服务以查看它是否能够按预期的那样工作。鉴于此目的,我们在 ide 中集成了 sun java system application server 提供的 tester 应用程序。对于 tomcat web server,也存在类似的工具。但是,sun java system application server 的 tester 页允许您输入值并对其进行测试,而 tomcat web server 则不允许这样做。在后一种情况下,您只能看到已部署了 web 服务,但是不能对值进行测试。目前还没有用于测试 ejb 模块是否已成功部署的工具。
测试是否已成功部署到 web 容器:
- 右键单击项目节点,选择“属性”,然后单击“运行”。根据要使用的部署服务器,请执行以下操作:
- 对于 sun java system application server,在“相对 url”字段中键入 /calculatorwsservice?tester。
- 对于 tomcat web server,在“相对 url”字段中键入 /calculatorws?tester。
注意:由于部署的 ejb 模块的结果不会显示在浏览器中,因此,如果您使用的是 ejb 模块,则不能执行上述步骤。 - 右键单击项目节点,然后选择“运行项目”。
ide 将启动应用服务器、生成应用程序,并在浏览器中打开 tester 页(如果已将 web 应用程序部署到 sun java system application server)。对于使用 tomcat web server 和部署 ejb 模块来说,情况则有所不同:
- 如果部署到 tomcat web server,将看到以下内容(表明已成功部署了 web 服务):
- 如果部署了 ejb 模块,则“输出”窗口显示下面的消息才表明已成功部署:
| deployment of application calculatorwsapplication completed successfully enable of calculatorwsapplication in target server completed successfully enable of application in all targets completed successfully all operations completed successfully run-deploy: run: build successful |
如果部署到 sun java system application server,在 tester 页上键入两个数字,如下所示:
将显示这两个数字的和:

使用 web服务
部署 web服务后,我们需要创建一个客户端来使用 web服务的 add 方法。在本练习中,我们将创建三个客户端,即 java se 应用程序中的 java 类、web 应用程序中的 servlet 和 jsp 页。
客户端 1:java se 应用程序中的 java 类
- 选择“文件”>“新建项目”(ctrl-shift-n)。从“常规”类别中,选择“java 应用程序”。将项目命名为 calculatorws_client_application。
注意:在编写本文档时,问题 10 还仍未得到解决,您必须在其路径不包含空格的项目文件夹中创建 web服务客户端。例如,路径不能为 "c:\documents and settings\..."。
单击“完成”。 - 右键单击 "calculatorws_client_application" 节点,然后选择“新建”>“web服务客户端”。
- 在“项目”中,单击“浏览”。找到要使用的 web 服务。选择 web 服务后,单击“确定”。
- 在“包”中键入 org.me.calculator.client,然后单击“完成”。
将在“项目”窗口中显示新建的 web服务客户端:

- 双击 "main.java" 以在源代码编辑器中将其打开。删除 todo 注释,并在该行中单击鼠标右键。选择“web服务客户端资源”>“调用 web服务操作”。
- 找到“添加”操作,然后单击“确定”。
- 将带红色下划线的行更改为以下内容:
| system.out.println("sum: " + port.add(3,4)); |
- 右键单击项目节点,然后选择“运行项目”。
现在“输出”窗口会显示以下内容:
| compile: run: sum: 7 build successful (total time: 1 second) |
客户端 2:web 应用程序中的 servlet
- 选择“文件”>“新建项目”(ctrl-shift-n)。从 "web" 类别中,选择“web 应用程序”。将项目命名为 calculatorwsservletclient。
注意:在编写本文档时,问题 10 还仍未得到解决,您必须在其路径不包含空格的项目文件夹中创建 web服务客户端。例如,路径不能为 "c:\documents and settings\..."。
单击“完成”。 - 右键单击 "calculatorwsservletclient" 节点,然后选择“新建”>“web服务客户端”。
- 在“项目”中,单击“浏览”。找到要使用的 web 服务。选择 web服务后,单击“确定”。
- 在“包”中键入 org.me.calculator.client,然后单击“完成”。
将在“项目”窗口中显示新建的 web服务客户端:

- 右键单击项目节点,然后选择“新建”> "servlet"。将 servlet 命名为 clientservlet,并将它放置在名为 org.me.calculator.client 的包中。单击“完成”。要使 servlet 成为应用程序的入口点,请右键单击该项目节点,选择“属性”,单击“运行”,然后在“相对 url”中键入 /clientservlet。单击“确定”。
- 在源代码编辑器中,删除注释掉 processrequest 方法主体的行。该行是注释掉代码部分的起始行:
| /* todo output your page here |
然后,删除注释掉代码部分的结束行:
| */ |
在以下行之后添加一些空行:
| out.println("<h1>servlet clientservlet at " + request.getcontextpath () + "</h1>"); |
现在,在您添加的一个空行中单击鼠标右键,选择“web 服务客户端资源”>“调用 web 服务操作”。将出现“选择要调用的操作”对话框。
- 找到 add 操作,然后单击“确定”。
现在 processrequest 方法应该如下所示(下面以粗体显示添加的代码):
|
protected void processrequest(httpservletrequest request, httpservletresponse response) try { // call web service operation out.println("</body>"); |
将 arg0 和 arg1 的值更改为其他数值,如 3 和 4。
将 system.out.println 语句更改为 out.println。
添加输出异常的行(如果抛出异常)。
现在 try/catch 块应该如下所示(会突出显示新行和更改行):
| try { // call web service operation org.me.calculator.client.calculatorwsservice service = new org.me.calculator.client.calculatorwsservice(); org.me.calculator.client.calculatorwsapplication port = service.getcalculatorwsapplicationport(); // todo initialize ws operation arguments here int arg0 = 3; int arg1 = 4; // todo process result here int result = port.add(arg0, arg1); out.println("<p>result: " + result); } catch (exception ex) { out.println("<p>exception: " + ex); } |
- 右键单击项目节点,然后选择“运行项目”。
将启动服务器(如果它尚未运行),生成并部署应用程序,并且打开浏览器以显示计算结果。
客户端 3:web 应用程序中的 jsp 页
- 选择“文件”>“新建项目”(ctrl-shift-n)。从 "web" 类别中,选择“web 应用程序”。将项目命名为 calculatorwsjspclient。
注意:在编写本文档时,问题 10 还仍未得到解决,您必须在其路径不包含空格的项目文件夹中创建 web 服务客户端。例如,路径不能为 "c:\documents and settings\..."。
单击“完成”。 - 右键单击 "calculatorwsjspclient" 节点,然后选择“新建”>“web服务客户端”。
- 在“项目”中,单击“浏览”。找到要使用的 web服务。选择 web服务后,单击“确定”。
- 在“包”中键入 org.me.calculator.client,然后单击“完成”。
将在“项目”窗口中显示新建的 web服务客户端。 - 在“web 页”文件夹中,双击 "index.jsp" 以在源代码编辑器中将其打开。
- 在“web 服务引用”节点中,展开表示 web服务的节点。现在将公开要从客户端调用的 add 操作。
- 将 add 操作拖动到客户端的 index.jsp 页上,并将其放在 h1 标记之下。现在,将在 index.jsp 页中生成用于调用服务操作的代码。
将 arg0 和 arg1 的值更改为其他数值,如 3 和 4。 - 右键单击项目节点,然后选择“运行项目”。
将启动服务器(如果它尚未运行),生成并部署应用程序,并且打开浏览器以显示计算结果:



闽公网安备 35060202000074号