http://netbeans.org/kb/docs/websvc/jax-ws_zh_CN.html
创建 Web 服务
本练习旨在创建一个适用于确定要使用的部署容器的项目。具有项目后,您将在其中创建一个 Web 服务。
选择容器
您可以在 Web 容器或 EJB 容器中部署 Web 服务。这取决于您的具体选择。例如,如果您计划部署到只有一个 Web 容器的 Tomcat Web Server,请创建一个 Web 应用程序,而不是 EJB 模块。
- 选择“文件”>“新建项目”(Ctrl-Shift-N)。从 "Web" 类别中选择“Web 应用程序”,或从“企业”类别中选择“EJB 模块”。
- 将该项目命名为 CalculatorWSApplication 。
- 根据您要使用的部署服务器,执行以下操作:
- 对于 GlassFish,请将“Java EE 版本”设置为 "Java EE 5"。
- 对于 Tomcat Web Server,请取消选中“将源代码级别设置为 1.4”复选框。
- 单击以浏览其余页面,然后单击“完成”。
通过 Java 类创建 Web 服务
- 右键单击 "CalculatorWSApplication" 节点,然后选择“新建”>“Web 服务”。
- 将该 Web 服务命名为 CalculatorWS ,在“包”中键入 org.me.calculator ,然后单击“完成”。
“项目”窗口将显示新 Web 服务的结构,并且编辑器区域将出现可视设计器。对于 Web 应用程序,您现在会看到以下内容:
设计 Web 服务
本练习旨在向 Web 服务中添加一项操作,该操作用于添加从客户端接收到的两个数字。
向 Web 服务中添加操作
- 在可视设计器中单击“添加操作”。将显示一个对话框,您可以在其中定义新操作。
- 在“添加操作”对话框的上半部分中,在“名称”中键入 add ,并在“返回类型”下拉列表中键入 int 。在“添加操作”对话框的下半部分中,单击“添加”以创建 int 类型的参数 i 。然后,再次单击“添加”以创建 int 类型的参数 j 。
现在,您将看到以下内容:
- 在“添加操作”对话框的底部,单击“确定”。
现在,可视设计器将显示以下内容:
- 单击“源”,此时您会注意到前面的步骤生成了如下所示的源代码:
- 在编辑器中,将框架 add 操作扩展为以下代码(所做的更改以粗体显示):
@WebMethod
public int add(@WebParam(name = "i") int i, @WebParam(name = "j") int j) {
int k = i + j;
return k ;
}
正如您在上面的代码中所看到的一样,Web 服务仅接收两个数字,然后返回二者之和。在下一部分中,您将使用 IDE 测试 Web 服务。
部署和测试 Web 服务
将 Web 服务部署到 Web 容器时,您可以使用 IDE 测试 Web 服务,以便查看其功能是否符合预期效果。IDE 中集成了 GlassFish 所提供的测试器应用程序,使用它可以实现此目的。Tomcat Web Server 也有一种类似的工具。在 GlassFish 的测试器页上,您可以输入值并对其进行测试,但是 Tomcat Web Server 却不具备此功能。对于后一种情况,您只能看到已部署 Web 服务,而无法测试值。当前还没有用于测试 EJB 模块是否成功部署的工具。
测试是否成功部署到 Web 容器:
- 右 键单击项目,然后选择“取消部署后再次部署”。IDE 将启动应用服务器,生成应用程序,然后将应用程序部署到服务器。您可以在“输出”视图中的 "CalculatorWSApplication (run-deploy)" 以及 "GlassFish " 或 "Tomcat" 标签中看到这些操作的进度。
- 在 IDE 的“项目”标签中,展开 CalculatorWSApplication 项目的“Web 服务”节点。右键单击 "CalculatorWS" 节点,然后选择“测试 Web 服务”。
IDE 将在浏览器中打开测试器页(如果您已将 Web 应用程序部署到 GlassFish 中)。对于 Tomcat Web Server 和 EJB 模块的部署,情况有所不同:
- 如果已部署到 GlassFish,请在测试器页中键入两个数字,如下所示:
将显示这两个数字之和:
- 如果已部署到 Tomcat Web Server,您将看到以下内容,用于指示您已成功部署 Web 服务:
- 右键单击项目节点,选择“属性”,然后单击“运行”。根据您要使用的部署服务器,执行以下操作:
- 对于 GlassFish,请在“相对 URL”字段中键入 /CalculatorWSService?Tester 。
- 对于 Tomcat Web Server,请在“相对 URL”字段中键入 /CalculatorWS?Tester 。
注意: 由于已部署的 EJB 模块的结果不会显示在浏览器中,因此您无法执行上述步骤(如果您正在使用 EJB 模块)。
- 如果已部署到 GlassFish,请在测试器页中键入两个数字,如下所示:
使用 Web 服务
现在,您已经部署了 Web 服务,接下来需要创建一个客户端,以便使用 Web 服务的 add 方法。在这里,您将创建三个客户端:Java SE 应用程序中的 Java 类、Web 应用程序中的 Servlet 和 Web 应用程序中的 JSP 页。
注意: 开发 JAX-WS Web 服务客户端 是集中讨论客户端的更高级教程。
客户端 1:Java SE 应用程序中的 Java 类
在本部分中,您将创建一个标准的 Java 应用程序。用于创建应用程序的向导也可以创建 Java 类。之后,您将使用 IDE 的工具来创建一个客户端,并使用在本教程开始时创建的 Web 服务。
如果您将 JDK 6 与 NetBeans IDE 6.5 结合使用,则必须具备 JDK 6 Update 7 或更高版本。
- 选择“文件”>“新建项目”(Ctrl-Shift-N)。选择 Java 类别中的“Java 应用程序”选项。将该项目命名为 CalculatorWS_Client_Application 。将“创建主类”保留为选中状态,并接受所有其他缺省设置。单击“完成”。
- 右键单击 "CalculatorWS_Client_Application" 节点,然后选择“新建”>“Web 服务客户端”。
- 在“项目”中,单击“浏览”。浏览至要使用的 Web 服务。选定 Web 服务后,单击“确定”。
- 将其他设置保留为缺省值,然后单击“完成”。
“项目”窗口将显示新的 Web 服务客户端,其中包括已创建的 add 方法的节点:
- 双击 "Main.java" 以在源代码编辑器中将其打开。删除 TODO 注释,然后将以上所述的 add 节点拖至空行中。现在,您将看到以下内容:
public static void main(String[] args) {
try { // Call Web Service Operation
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);
System.out.println("Result = "+result);
} catch (Exception ex) {
// TODO handle custom exceptions here
}
}注意: 或者,您也可以在编辑器中单击鼠标右键,然后选择“Web 服务客户端资源”>“调用 Web 服务操作”,而无需拖动 add 节点。
- 初始化两个 int 参数。只需将上面的两个 int 参数的值从 0 更改为其他整数(如 3 和 4)即可。
- 右键单击项目节点,然后选择“运行”。
“输出”窗口将立即显示二者之和:
compile:
run:
Result = 7
BUILD SUCCESSFUL (total time: 1 second)
客户端 2:Web 应用程序中的 Servlet
在本部分中,您将创建一个新的 Web 应用程序,随后创建一个 Servlet。然后,借助该 Servlet 使用在本教程开始时创建的 Web 服务。
如果您使用的是 JDK 6,则必须具备 JDK 6 Update 7 或更高版本。
- 选择“文件”>“新建项目”(Ctrl-Shift-N)。从 "Java Web" 类别中选择“Web 应用程序”。将该项目命名为 CalculatorWSServletClient 。单击“完成”。
- 右键单击 "CalculatorWSServletClient" 节点,然后选择“新建”>“Web 服务客户端”。
将显示“新建 Web 服务客户端”向导。
- 在“项目”中,单击“浏览”。浏览至要使用的 Web 服务。选定 Web 服务后,单击“确定”。
- 将其他设置保留为缺省值,然后单击“完成”。
“项目”窗口中的“Web 服务参考”节点将显示新建客户端的结构,其中包括在本教程前面部分创建的 add 操作:
- 右键单击 "CalculatorWSServletClient" 项目节点,然后选择“新建”> "Servlet"。将该 Servlet 命名为 ClientServlet ,并将其置于名为 org.me.calculator.client 的包中。单击“完成”。
- 右键单击 "CalculatorWSServletClient" 项目节点,然后选择“属性”。打开“运行”属性,然后取消选中“在保存时部署”。
- 要使 Servlet 成为应用程序的入口点,请右键单击项目节点,选择“属性”,单击“运行”,然后在“相对 URL”中键入 /ClientServlet 。单击“确定”。
- 如果 ClientServlet.java 存在错误图标,请右键单击项目节点,然后选择“清理并生成”。
- 在源代码编辑器中,删除注释掉 processRequest 方法主体的行。该行如下所示:
/* TODO output your page here
接下来,删除被注释掉的代码部分结尾的行:
*/
在以下行后添加一些空行:
out.println("<h1>Servlet ClientServlet at " + request.getContextPath () + "</h1>");
现在,将表示 add 操作的节点拖至创建的空白处。
processRequest 方法现在如下所示(添加的代码在下面以粗体显示):
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet ClientServlet</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Servlet ClientServlet at " + request.getContextPath () + "</h1>");
try { // Call Web Service Operation
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
}
out.println("</body>");
out.println("</html>");
out.close();
}将 i 和 j 的值更改为正整数,如 3 和 4。
- 右键单击项目节点,然后选择“运行”。
将启动服务器(如果它尚未运行);同时,系统将生成并部署应用程序,并且打开浏览器以显示计算结果,如下所示:
客户端 3:Web 应用程序中的 JSP 页
在本部分中,您将创建一个新的 Web 应用程序,然后在“Web 应用程序”向导创建的缺省 JSP 页中使用 Web 服务。
如果您使用的是 JDK 6,则必须具备 JDK 6 Update 7 或更高版本。
- 选择“文件”>“新建项目”(Ctrl-Shift-N)。从 "Web" 类别中选择“Web 应用程序”。将该项目命名为 CalculatorWSJSPClient 。单击“完成”。
- 右键单击 "CalculatorWSJSPClient" 节点,然后选择“新建”>“Web 服务客户端”。
- 在“项目”中,单击“浏览”。浏览至要使用的 Web 服务。选定 Web 服务后,单击“确定”。
- 将其他设置保留为缺省值,然后单击“完成”。
“项目”窗口将显示新的 Web 服务客户端,如下所示:
- 在“Web 服务参考”节点中,展开表示 Web 服务的节点。此时将显示您要从客户端调用的 add 操作。
- 将 add 操作拖至客户端的 index.jsp 页,并将其放在 H1 标记下。将在 index.jsp 页中立即生成用于调用服务操作的代码,如下所示:
<%
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
}
%>将 i 和 j 的值从 0 更改为其他整数,如 3 和 4。
- 右键单击项目节点,然后选择“运行”。
将启动服务器(如果它尚未运行)。同时,系统将生成并部署应用程序,并且打开浏览器以显示计算结果: