blob: 38d4b5e9ba28c88688b60e61f07d46b893d8f3f0 [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head><link rel="stylesheet" href="../../../print.css" type="text/css" media="print">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JAX-WS Web 服务入门指南 - NetBeans IDE 教程</title>
<meta name="KEYWORDS" content="NETBEANS, TUTORIAL, GUIDE, USER, DOCUMENTATION, WEB SERVICE, WEB SERVICES, SOAP, CLIENT, JAX-WS">
<meta name="description"
content="This tutorial shows how to use NetBeans IDE 7.0 or later to develop a JAX-WS web service
and consume it in a Java class in a Java SE application, or in
a servlet or JSP page">
<link rel="stylesheet" href="../../../netbeans.css"></head>
<body>
<h1>JAX-WS Web 服务入门指南</h1>
<p><a href="http://www.jcp.org/en/jsr/detail?id=224" target="_blank">Java API for XML Web Services (JAX-WS), JSR 224</a> 是 Java EE 平台的一个重要组成部分。作为 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 文件的大小。</p>
<p>本文档介绍了使用 IDE 开发 JAX-WS Web 服务的基础知识。创建 Web 服务后,您将编写三个不同的 Web 服务客户端,这些客户端通过网络使用 Web 服务(称为“使用”Web 服务)。这三个客户端分别是 Java SE 应用程序中的 Java 类、Web 应用程序中的 Servlet 和 Web 应用程序中的 JSP 页。<a href="./client.html">开发 JAX-WS Web 服务客户端</a>是集中讨论客户端的更高级教程。</p>
<p><b>目录</b></p>
<img alt="此页上的内容适用于 NetBeans IDE 7.2、7.3、7.4 和 8.0" class="stamp" src="../../../images_www/articles/73/netbeans-stamp-80-74-73.png" title="此页上的内容适用于 NetBeans IDE 7.2、7.3、7.4 和 8.0">
<ul><li><a href="#Exercise_1">创建 Web 服务</a></li>
<li><a href="#Exercise_2">设计 Web 服务</a></li>
<li><a href="#Exercise_2_1">部署和测试 Web 服务</a></li>
<li><a href="#samples">样例</a></li>
<li>
在以下客户端中使用 Web 服务
<ul><li><a href="#Exercise_3_1">Java SE 应用程序中的 Java 类</a></li>
<li><a href="#Exercise_3_2">Web 应用程序中的 Servlet</a></li>
<li><a href="#Exercise_3_3">Web 应用程序中的 JSP 页</a></li>
</ul>
</ul>
<p><b>要学习本教程,您需要具备以下软件和资源。</b></p>
<table>
<tbody>
<tr>
<th class="tblheader" scope="col">软件或资源</th>
<th class="tblheader" scope="col">要求的版本</th>
</tr>
<tr>
<td class="tbltd1"><a href="https://netbeans.org/downloads/index.html" target="_blank">NetBeans IDE</a></td>
<td class="tbltd1">Java EE 下载包</td>
</tr>
<tr>
<td class="tbltd1"><a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html" target="_blank">Java 开发工具包 (JDK)</a></td>
<td class="tbltd1">JDK 7 或 JDK 8<br></td>
</tr>
<tr>
<td class="tbltd1">符合 Java EE 规范的 Web 服务器或应用服务器</td>
<td class="tbltd1">
GlassFish Server Open Source Edition <br> Oracle WebLogic Server</td>
</tr>
</tbody>
</table>
<p class="notes"><strong>注:</strong>GlassFish Server 可以随同 NetBeans IDE 的 Java EE 发行版本一起安装。此外,也可以访问 <a href="https://glassfish.java.net/download.html">GlassFish Server 下载页</a><a href="http://tomcat.apache.org/download-60.cgi" target="_blank">Apache Tomcat 下载页</a></p>
<p class="alert"><strong>重要说明:</strong>Java EE 项目需要使用 GlassFish Server 或 Oracle WebLogic Server 12c。
</p>
<p class="alert">捆绑的 Tomcat Web 服务器不是 Java EE 完全兼容的 Web 服务器。但是,Tomcat 7.x Web 服务器可以配置为支持一些 Java EE 功能。有关如何将对 Java EE 的支持添加到 Tomcat 中的信息,请参见 <a href="http://openejb.apache.org/" target="_blank">Apache TomEE 项目</a></p>
<!-- ===================================================================================== -->
<h2><a name="Exercise_1"></a>
<!--Exercise 1: -->
创建 Web 服务</h2>
<p>本练习旨在创建一个适用于确定要使用的部署容器的项目。具有项目后,您将在其中创建一个 Web 服务。</p>
<div class="indent">
<h3 class="tutorial">选择容器</h3>
<p>您可以在 Web 容器或 EJB 容器中部署 Web 服务。这取决于您的具体选择。如果要创建 Java EE 应用程序,则在任何情况下都使用 Web 容器,因为您可以将 EJB 直接放入 Web 应用程序中。例如,如果您计划部署到只有一个 Web 容器的 Tomcat Web Server,请创建一个 Web 应用程序,而不是 EJB 模块。</p>
<ol>
<li> 选择 "File"(文件)> "New Project"(新建项目)(在 Linux 和 Windows 上为 Ctrl-Shift-N 组合键,在 MacOS 上为 ⌘-Shift-N 组合键)。从 "Java Web" 类别中选择 "Web Application"(Web 应用程序),或从 "Java EE" 类别中选择 "EJB Module"(EJB 模块)。
<p class="notes">您可以在 Maven 项目中创建 JAX-WS Web 服务。选择 "File"(文件)> "New Project"(新建项目)(在 Linux 和 Windows 上为 Ctrl-Shift-N 组合键,在 MacOS 上为 ⌘-Shift-N 组合键),然后从 "Maven" 类别中选择 "Maven Web Application"(Maven Web 应用程序)或 "Maven EJB module"(Maven EJB 模块)。如果您以前没有同时使用过 Maven 和 NetBeans,请参见 <a href="http://wiki.netbeans.org/MavenBestPractices" target="_blank">Maven 最佳做法</a>
</li>
<li>将该项目命名为 <tt>CalculatorWSApplication</tt>。为该项目选择一个位置。单击 "Next"(下一步)。
<li>选择服务器和 Java EE 版本,然后单击 "Finish"(完成)。
<p class="notes">要使用 Oracle WebLogic Server,请<a href="../web/jsf-jpa-weblogic.html#01">在 IDE 中注册服务器</a>。另外,如果使用的是 WebLogic Server,请观看<a href="../javaee/weblogic-javaee-m1-screencast.html">将 Web 应用程序部署到 Oracle WebLogic</a> 截屏视频。</p> </li>
</ol>
<h3 class="tutorial">通过 Java 类创建 Web 服务</h3>
<ol>
<li>右键单击 <tt>CalculatorWSApplication</tt> 节点,然后选择 "New"(新建)> "Web Service"(Web 服务)。</li>
<li>将 Web 服务命名为 <tt>CalculatorWS</tt>,并在 "Package"(包)中键入 <tt>org.me.calculator</tt>。将 "Create Web Service from Scratch"(从头开始创建 Web 服务)保持选中状态。</li>
<li>如果要在 GlassFish 或 WebLogic 上创建 Java EE 项目,请选择 "Implement Web Service as a Stateless Session Bean"(将 Web 服务作为无状态会话 Bean 实现)。<br> <img alt="EE 的新建 Web 服务向导,带有 Bean 选项" class="margin-around b-all" height="365" src="../../../images_www/articles/72/websvc/jax-ws/generate-ws-ee6.png" width="528"></li>
<li>单击 "Finish"(完成)。"Projects"(项目)窗口将显示新 Web 服务的结构,并在编辑器区域中显示源代码。<br>
</li>
</ol>
</div>
<!-- ===================================================================================== -->
<h2><a name="Exercise_2"></a>
<!--Exercise 2: -->
向 Web 服务中添加操作</h2>
<p>本练习旨在向 Web 服务中添加一项操作,该操作用于添加从客户端接收到的两个数字。NetBeans IDE 提供了一个对话框,用于将操作添加到 Web 服务中。您可以在 Web 服务可视设计器或 Web 服务上下文菜单中打开该对话框。 </p>
<p class="alert"><b>警告:</b>无法在 Maven 项目中使用该可视设计器。</p>
<p><strong>将操作添加到 Web 服务中:</strong></p>
<ol>
<li>可以:<ul>
<li>切换到编辑器的 "Design"(设计)视图。 <br> <img alt="Web 服务编辑器的设计视图" class="margin-around b-all" height="454" src="../../../images_www/articles/72/websvc/jax-ws/design-view.png" width="436"> </li></ul>
<p>或:</p>
<ul>
<li>在 "Projects"(项目)窗口中查找 Web 服务的节点。右键单击该节点。此时将打开一个上下文菜单。<br> <img alt="Web 服务节点的上下文菜单,突出显示了 &amp;quot;Add Operation&amp;quot;(添加操作)项" class="margin-around b-right b-bottom" height="274" src="../../../images_www/articles/72/websvc/jax-ws/add-op-cx-menu-item.png" width="259"></li></ul></li>
<li>在可视设计器或上下文菜单中,单击 "Add Operation"(添加操作)。"Add Operation"(添加操作)对话框打开。</li>
<li>在 "Add Operation"(添加操作)对话框的上半部分中,在 "Name"(名称)中键入 <tt>add</tt>,并在 "Return Type"(返回类型)下拉列表中键入 <tt>int</tt></li>
<li>在 "Add Operation"(添加操作)对话框的下半部分中,单击 "Add"(添加)以创建 <tt>int</tt> 类型的参数 <tt>i</tt></li>
<li>然后,再次单击 "Add"(添加)以创建 <tt>int</tt> 类型的参数 <tt>j</tt>
<p>现在,您将看到以下内容:</p>
<br><img alt="&amp;quot;Add Operation&amp;quot;(添加操作)对话框" class="margin-around b-all" src="../../../images_www/articles/72/websvc/jax-ws/jaxws-60-add-operation.png"></li>
<li>在 "Add Operation"(添加操作)对话框的底部,单击 "OK"(确定)。您将返回到编辑器中。</li>
<li>删除默认的 <tt>hello</tt> 操作,方法是在源代码中删除 <tt>hello()</tt> 方法或在可视设计器中选择 <tt>hello</tt> 操作并单击 "Remove Operation"(删除操作)。
<p>现在,可视设计器将显示以下内容:</p>
<br><img alt="显示已添加操作的 Web 服务可视设计器" class="margin-around b-all" height="478" src="../../../images_www/articles/72/websvc/jax-ws/design-view-with-op.png" title="显示已添加操作的 Web 服务可视设计器" width="449"></li>
<li>单击 "Source"(源),然后查看在以上步骤中生成的代码。该代码会因您是否将服务创建为 Java EE 无状态 Bean 而有所不同。您能看到以下屏幕快照中的差别吗?(未作为无状态 Bean 实现的 Java EE 6 或 Java EE 7 服务类似于 Java EE 5 服务。)<br> <img alt="结果:EE5" class="margin-around b-top b-left" height="441" src="../../../images_www/articles/72/websvc/jax-ws/jaxws-60-source.png" width="412"> <img alt="结果:EE 6 无状态 Bean" class="margin-around b-all" height="469" src="../../../images_www/articles/72/websvc/jax-ws/stateless-ejb-code1.png" width="389">
<p class="notes"><strong>注:</strong>在 NetBeans IDE 7.3 和 7.4 中,您可以注意到生成的 <tt>@WebService</tt> 表示服务名显式指定:<br> <tt>@WebService(serviceName = "CalculatorWS")</tt></p>
</li>
<li>在编辑器中,将框架 <tt>add</tt> 操作扩展为以下代码(所做的更改以粗体显示):
<pre class="examplecode"> @WebMethod
public int add(@WebParam(name = "i") int i, @WebParam(name = "j") int j) {
<b>int k = i + j;</b>
return <b>k</b>;
}</pre></li>
</ol>
<p>正如您在上面的代码中所看到的一样,Web 服务仅接收两个数字,然后返回二者之和。在下一部分中,您将使用 IDE 测试 Web 服务。
<!-- ======================================================================================== -->
<h2 class="tutorial"><a name="Exercise_2_1"></a>部署和测试 Web 服务</h2>
<p>在将 Web 服务部署到服务器后,如果服务器具有测试客户端,则可以使用 IDE 打开服务器的测试客户端。GlassFish 和 WebLogic Server 提供了测试客户端。 </p>
<p>如果您使用的是 Tomcat Web 服务器,则没有测试客户端。您只能运行项目并查看 Tomcat Web 服务页是否打开。此时,在运行项目之前,您需要将 Web 服务作为您的应用程序的入口点。要使 Web 服务成为应用程序的入口点,请右键单击 "CalculatorWSApplication" 项目节点,然后选择 "Properties"(属性)。打开 "Run"(运行)属性,然后在 "Relative URL"(相对 URL)字段中键入 <tt>/CalculatorWS</tt>。单击 "OK"(确定)。要运行项目,请再次右键单击项目节点,然后选择 "Run"(运行)。</p>
<p><b>测试是否成功部署到 GlassFish 或 WebLogic Server:</b></p>
<ol>
<li>右键单击该项目,然后选择 "Deploy"(部署)。IDE 将启动应用服务器,构建应用程序,然后将应用程序部署到服务器。可以在 "Output"(输出)视图中的 "CalculatorWSApplication (run-deploy)" 以及 "GlassFish" 服务器或 "Tomcat" 标签中看到这些操作的进度。</li>
<li>在 IDE 的 "Projects"(项目)标签中,展开 CalculatorWSApplication 项目的 "Web Services"(Web 服务)节点。右键单击 "CalculatorWS" 节点,然后选择 "Test Web Service"(测试 Web 服务)。 <br> <img alt="显示测试 Web 服务上下文菜单选项的 &amp;quot;Projects&amp;quot;(项目)标签" class="margin-around b-all" src="../../../images_www/articles/72/websvc/jax-ws/jax-ws-testws.png">
<p>IDE 在浏览器中打开测试器页(如果您已将 Web 应用程序部署到 GlassFish Server 中)。对于 Tomcat Web Server 和 EJB 模块的部署,情况有所不同:</p>
<ul>
<li>如果已部署到 GlassFish Server,请在测试器页中键入两个数字,如下所示: <br><img alt="服务成功部署到 GlassFish Server 时的 Web 服务测试器页" class="margin-around b-all" height="283" src="../../../images_www/articles/72/websvc/jax-ws/jax-ws-tester.png" width="497">
<p>将显示这两个数字之和:</p>
<br><img alt="显示 Web 服务测试结果的 Web 页" class="margin-around b-all" height="345" src="../../../images_www/articles/72/websvc/jax-ws/jax-ws-tester2.png" width="248"></li>
</ul>
</li>
</ol>
<!-- ======================================================================================== -->
<h2><a name="samples">样例</a></h2>
<p>您可以选择 "File"(文件)> "New Project"(新建项目)(在 Linux 和 Windows 上为 Ctrl-Shift-N 组合键,在 MacOS 上为 ⌘-Shift-N 组合键),然后导航至 "Samples"(样例)> "Web Services"(Web 服务)> "Calculator (EE6)"(计算器 (EE6)),以打开计算器服务的完整 Java EE 无状态 Bean 版本。</p>
<p>将在 "Samples"(样例)> "Maven" 中提供 Maven 计算器服务和 Maven 计算器客户端。</p>
<h2 class="tutorial"><a name="Exercise_3"></a>使用 Web 服务</h2>
<p class="tutorial">现在,您已经部署了 Web 服务,接下来需要创建一个客户端,以便使用 Web 服务的 <tt>add</tt> 方法。在这里,您将创建三个客户端:Java SE 应用程序中的 Java 类、Web 应用程序中的 Servlet 和 Web 应用程序中的 JSP 页。</p>
<p class="notes"><b>注:</b><a href="../../../kb/docs/websvc/client.html">开发 JAX-WS Web 服务客户端</a>是集中讨论客户端的更高级教程。</p>
<div class="indent">
<h3 class="tutorial"><a name="Exercise_3_1"></a>客户端 1:Java SE 应用程序中的 Java 类</h3>
<p>在此部分,您将创建一个标准的 Java 应用程序。用于创建应用程序的向导也可以创建 Java 类。之后,您将使用 IDE 的工具来创建一个客户端,并使用在本教程开始时创建的 Web 服务。</p>
<ol>
<li>选择 "File"(文件)> "New Project"(新建项目)(在 Linux 和 Windows 上为 Ctrl-Shift-N 组合键,在 MacOS 上为 ⌘-Shift-N 组合键)。选择 "Java" 类别中的 "Java Application"(Java 应用程序)选项。将该项目命名为 <tt>CalculatorWS_Client_Application</tt>。将 "Create Main Class"(创建主类)保留为选中状态,并接受所有其他默认设置。单击 "Finish"(完成)。</li>
<li>右键单击 <tt>CalculatorWS_Client_Application</tt> 节点,然后选择 "New"(新建)> "Web Service Client"(Web 服务客户端)。此时将打开新建 Web 服务客户端向导。 </li>
<li>选择 "Project"(项目)作为 WSDL 源。单击 "Browse"(浏览)。浏览至 CalculatorWSApplication 项目中的 CalculatorWS Web 服务。选定 Web 服务后,单击 "OK"(确定)。<br> <img alt="显示 CalculatorWS 服务的 &amp;quot;Browse Web Services&amp;quot;(浏览 Web 服务)对话框" class="margin-around b-all" src="../../../images_www/articles/80/websvc/jax-ws/browse-ws.png"></li>
<li>请勿选择包名。将此字段保留为空。<br> <img alt="显示包名的新建 Web 服务客户端向导" class="margin-around b-all" src="../../../images_www/articles/80/websvc/jax-ws/javaclient-pkg.png"></li>
<li>将其他设置保留为默认值,然后单击 "Finish"(完成)。
<p>"Projects"(项目)窗口将显示新的 Web 服务客户端,其中包括已创建的 <tt>add</tt> 方法的节点:</p>
<br><img alt="显示在 &amp;quot;Projects&amp;quot;(项目)窗口中的 Java SE 应用程序中的新 Web 服务客户端" class="margin-around b-right b-top" height="294" src="../../../images_www/articles/72/websvc/jax-ws/ws-ref-in-client-project.png" width="311"> </li>
<li>双击以在源代码编辑器中打开主类。将 <tt>add</tt> 节点拖至 <tt>main()</tt> 方法下面。<br><img alt="将添加操作拖放到主类主体中" class="margin-around b-all" height="186" src="../../../images_www/articles/72/websvc/jax-ws/dnd-add.png" width="527">
<p> 现在,您将看到以下内容:</p>
<pre class="examplecode">public static void main(String[] args) {
// TODO code application logic here
}
private static int add(int i, int j) {
org.me.calculator.CalculatorWS_Service service = new org.me.calculator.CalculatorWS_Service();
org.me.calculator.CalculatorWS port = service.getCalculatorWSPort();
return port.add(i, j);
}</pre>
<p><b>注:</b>或者,您也可以在编辑器中单击鼠标右键,然后选择 "Insert Code"(插入代码)> "Call Web Service Operation"(调用 Web 服务操作),而无需拖动 <tt>add</tt> 节点。 </li>
<li><tt>main()</tt> 方法主体中,将 TODO 注释替换为执行以下操作的代码:初始化 <tt>i</tt><tt>j</tt> 的值,调用 <tt>add()</tt>,然后输出结果。
<pre class="examplecode">public static void main(String[] args) {<br> int i = 3;<br> int j = 4;<br> int result = add(i, j);<br> System.out.println(&quot;Result = &quot; + result);
}</pre></li>
<li><tt>main()</tt> 方法代码包含在输出异常错误的 try/catch 块中。
<pre class="examplecode">public static void main(String[] args) {<br> try {<br> int i = 3;<br> int j = 4;<br> int result = add(i, j);<br> System.out.println(&quot;Result = &quot; + result);<br> } catch (Exception ex) {<br> System.out.println(&quot;Exception: &quot; + ex);<br> }
}</pre>
</li>
<li>右键单击项目节点,然后选择 "Run"(运行)。
<p>"Output"(输出)窗口将立即显示二者之和:</p>
<pre class="examplecode"> compile:
run:
Result = 7
BUILD SUCCESSFUL (total time: 1 second)</pre>
</li>
</ol>
<h3><a name="Exercise_3_2"></a>客户端 2:Web 应用程序中的 Servlet</h3>
<p>在此部分,您将创建一个新的 Web 应用程序,随后创建一个 Servlet。然后,借助该 Servlet 使用在本教程开始时创建的 Web 服务。
<ol>
<li> 选择 "File"(文件)> "New Project"(新建项目)(在 Linux 和 Windows 上为 Ctrl-Shift-N 组合键,在 MacOS 上为 ⌘-Shift-N 组合键)。从 "Java Web" 类别中选择 "Web Application"(Web 应用程序)。将该项目命名为 <tt>CalculatorWSServletClient</tt>。单击 "Next"(下一步),然后单击 "Finish"(完成)。</li>
<li>右键单击 <tt>CalculatorWSServletClient</tt> 节点,然后选择 "New"(新建)> "Web Service Client"(Web 服务客户端)。
<p>此时将打开新建 Web 服务客户端向导。</p>
</li>
<li>选择 "Project"(项目)作为 WSDL 源,然后单击 "Browse"(浏览)以打开 "Browse Web Services"(浏览 Web 服务)对话框。</li>
<li>在 "CalculatorWSApplication" 项目中选择 "CalculatorWS" Web 服务。单击 "OK"(确定)关闭 "Browse Web Services"(浏览 Web 服务)对话框。<br> <img alt="显示 CalculatorWS 服务的 &amp;quot;Browse Web Services&amp;quot;(浏览 Web 服务)对话框" class="margin-around b-all" src="../../../images_www/articles/80/websvc/jax-ws/browse-ws.png"></li>
<li>在新建 Web 服务客户端向导中确认包名为空,并保留其他设置的默认值。单击 "Finish"(完成)。
<p>"Projects"(项目)窗口中的 "Web Service References"(Web 服务引用)节点将显示新建客户端的结构,其中包括在本教程前面部分创建的 <tt>add</tt> 操作。</p>
</li>
<li>右键单击 <tt>CalculatorWSServletClient</tt> 项目节点,然后选择 "New"(新建)> "Servlet"。将该 Servlet 命名为 <tt>ClientServlet</tt>,并将其置于名为 <tt>org.me.calculator.client</tt> 的包中。单击 "Finish"(完成)。
<li>要使 servlet 成为应用程序的入口点,请右键单击 "CalculatorWSServletClient" 项目节点,然后选择 "Properties"(属性)。打开 "Run"(运行)属性,然后在 "Relative URL"(相对 URL)字段中键入 <tt>/ClientServlet</tt>。单击 "OK"(确定)。
<li>如果 <tt>ClientServlet.java</tt> 存在错误图标,请右键单击项目节点,然后选择 "Clean and Build"(清理并构建)。
<li><tt>processRequest()</tt> 方法中,在此行后添加一些空行:
<pre class="examplecode"> out.println("&lt;h1&gt;Servlet ClientServlet at " + request.getContextPath () + "&lt;/h1&gt;");</pre>
</li>
<li>在源代码编辑器中,将 <tt>add</tt> 操作拖至 <tt>ClientServlet</tt> 类主体中的任意位置。将在类代码的末尾显示 <tt>add()</tt> 方法。
<p class="notes"><b>注:</b>或者,您也可以在编辑器中单击鼠标右键,然后选择 "Insert Code"(插入代码)> "Call Web Service Operation"(调用 Web 服务操作),而无需拖动 <tt>add</tt> 节点。</p>
<pre class="examplecode">private int add(int i, int j) {<br> org.me.calculator.CalculatorWS port = service.getCalculatorWSPort();<br> return port.add(i, j);
}</pre>
</li>
<li>添加执行以下操作的代码:初始化 <tt>i</tt><tt>j</tt> 值,调用 <tt>add()</tt>,然后输出结果。添加的代码以<b>粗体显示</b>
<pre class="examplecode">protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
try {
out.println("&lt;html&gt;");
out.println("&lt;head&gt;");
out.println("&lt;title&gt;Servlet ClientServlet&lt;/title&gt;");
out.println("&lt;/head&gt;");
out.println("&lt;body&gt;");
out.println("&lt;h1&gt;Servlet ClientServlet at " + request.getContextPath () + "&lt;/h1&gt;");
<strong> int i = 3;<br> int j = 4;<br> int result = add(i, j);<br> out.println(&quot;Result = &quot; + result);</strong>
out.println("&lt;/body&gt;");
out.println("&lt;/html&gt;");
} finally { <br> out.close();<br> }<br>}</pre>
</li>
<li>将添加的代码包含在输出异常错误的 try/catch 块中。
<pre class="examplecode">protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
try {
out.println("&lt;html&gt;");
out.println("&lt;head&gt;");
out.println("&lt;title&gt;Servlet ClientServlet&lt;/title&gt;");
out.println("&lt;/head&gt;");
out.println("&lt;body&gt;");
out.println("&lt;h1&gt;Servlet ClientServlet at " + request.getContextPath () + "&lt;/h1&gt;");
<strong>try {</strong>
int i = 3;<br> int j = 4;<br> int result = add(i, j);<br> out.println(&quot;Result = &quot; + result);
<strong>} catch (Exception ex) {
out.println(&quot;Exception: &quot; + ex);
}</strong>
out.println("&lt;/body&gt;");
out.println("&lt;/html&gt;");
} finally { <br> out.close();<br> }<br>}</pre>
</li>
<li>右键单击项目节点,然后选择 "Run"(运行)。
<p>将启动服务器;同时,系统将构建并部署应用程序,并且打开浏览器以显示计算结果,如下所示: <br><img alt="显示在 &amp;quot;Projects&amp;quot;(项目)窗口中的 servlet 中的新 Web 服务客户端" class="margin-around b-all" src="../../../images_www/articles/72/websvc/jax-ws/jaxws-60-webclient.png"> </li>
</ol>
<h3><a name="Exercise_3_3"></a>客户端 3:Web 应用程序中的 JSP 页</h3>
<p>在此部分中,您将创建一个新的 Web 应用程序,然后在 Web 应用程序向导创建的默认 JSP 页中使用 Web 服务。</p>
<p class="notes"><b>注:</b>如果要在 Oracle WebLogic 上运行 JSP Web 应用程序客户端,请参见<a href="../web/jsf-jpa-weblogic.html">在 WebLogic 上运行 Java Server Faces 2.0 应用程序</a></p>
<ol>
<li> 选择 "File"(文件)> "New Project"(新建项目)(在 Linux 和 Windows 上为 Ctrl-Shift-N 组合键,在 MacOS 上为 ⌘-Shift-N 组合键)。从 "Java Web" 类别中选择 "Web Application"(Web 应用程序)。将该项目命名为 <tt>CalculatorWSJSPClient</tt>。单击 "Next"(下一步),然后单击 "Finish"(完成)。</li>
<li>在项目节点下展开 "Web Pages"(Web 页)节点并删除 <tt>index.html</tt></li>
<li>右键单击 <tt>Web Pages</tt>(Web 页)节点,然后在弹出式菜单中选择 "New"(新建)> "JSP"。
<p>如果 JSP 在弹出式菜单中不可用,请选择 "New"(新建)> "Other"(其他),然后在新建文件向导的 "Web" 类别中选择 "JSP"。</p></li>
<li>在新建文件向导中,键入 <strong>index</strong> 作为 JSP 文件的名称。单击 "Finish"(完成)。</li>
<li>右键单击 <tt>CalculatorWSJSPClient</tt> 节点,然后选择 "New"(新建)> "Web Service Client"(Web 服务客户端)。</li>
<li>选择 "Project"(项目)作为 WSDL 源。单击 "Browse"(浏览)。浏览至 CalculatorWSApplication 项目中的 CalculatorWS Web 服务。选定 Web 服务后,单击 "OK"(确定)。<br> <img alt="显示 CalculatorWS 服务的 &amp;quot;Browse Web Services&amp;quot;(浏览 Web 服务)对话框" class="margin-around b-all" src="../../../images_www/articles/80/websvc/jax-ws/browse-ws.png"></li>
<li>请勿选择包名。将此字段保留为空。</li>
<li>将其他设置保留为默认值,然后单击 "Finish"(完成)。
<p>"Projects"(项目)窗口将显示新的 Web 服务客户端,如下所示:</p>
<img alt="显示在 &amp;quot;Projects&amp;quot;(项目)窗口中的 servlet 中的新 Web 服务客户端" class="margin-around b-all" src="../../../images_www/articles/72/websvc/jax-ws/ws-ref-in-jsp-client.png"></li>
<li>在 "Web Service References"(Web 服务引用)节点中,展开表示 Web 服务的节点。此时将显示您要从客户端调用的 <tt>add</tt> 操作。</li>
<li><tt>add</tt> 操作拖至客户端的 <tt>index.jsp</tt> 页,并将其放在 H1 标记下。在 <tt>index.jsp</tt> 页中立即生成用于调用服务操作的代码,如下所示:
<pre class="examplecode">&lt;%
try {
org.me.calculator.CalculatorWSService service = new org.me.calculator.CalculatorWSService();
org.me.calculator.CalculatorWS port = service.getCalculatorWSPort();
// TODO initialize WS operation arguments here
int i = 0;
int j = 0;
// TODO process result here
int result = port.add(i, j);
out.println("Result = "+result);
} catch (Exception ex) {
// TODO handle custom exceptions here
}
%&gt;</pre>
<p><tt>i</tt><tt>j</tt> 的值从 0 更改为其他整数,如 3 和 4。将 catch 块中注释掉的 TODO 行替换为 <tt>out.println("exception" + ex);</tt></p>
</li>
<li>右键单击项目节点,然后选择 "Run"(运行)。
<p>将启动服务器(如果它尚未运行)。同时,系统将构建并部署应用程序,并且打开浏览器以显示计算结果:</p>
<img alt="显示结果的 JSP 页" class="margin-around b-all" src="../../../images_www/articles/80/websvc/jax-ws/jax-ws-project-jsp-result.png"></li>
</ol>
</div>
<br>
<div class="feedback-box" ><a href="/about/contact_form.html?to=3&amp;subject=Feedback:%20JAX-WS%20Services%20in%20NetBeans%20IDE">发送有关此教程的反馈意见</a></div>
<br style="clear:both;">
<!-- ======================================================================================= -->
<h2><a name="seealso"></a>另请参见</h2>
<p>有关使用 NetBeans IDE 开发 Java EE 应用程序的更多信息,请参见以下资源:
</p>
<ul>
<li><a href="./client.html">开发 JAX-WS Web 服务客户端</a></li>
<li><a href="./rest.html">REST 风格的 Web 服务入门指南</a></li>
<li><a href="./wsit.html">Advanced Web Service Interoperability</a>(高级 Web 服务互操作性)</li>
<li><a href="../../../kb/trails/web.html">Web 服务学习资源</a></li>
</ul>
<p>要发送意见和建议、获得支持以及随时了解 NetBeans IDE Java EE 开发功能的最新开发情况,请<a href="../../../community/lists/top.html">加入 nbj2ee@netbeans.org 邮件列表</a></p>
</body>