创建 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”复选框。
- 单击以浏览其余页面,然后单击“完成”。
NetBeans 6.1 提供了一些用于创建项目的新选项,对于这些选项,可以保留其缺省设置。例如,可以将“使用专用文件夹存储库”复选框保留为取消选中状态。
通过 Java 类创建 Web 服务
- 右键单击 "CalculatorWSApplication" 节点,然后选择“新建”>“Web 服务”。
- 将该 Web 服务命名为 CalculatorWS,在“包”中键入 org.me.calculator,然后单击“完成”。
设计 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 V2" 或 "Tomcat" 标签中看到这些操作的进度。
- 在 IDE 的“项目”标签中,展开 CalculatorWSApplication 项目的“Web 服务”节点。右键单击 "CalculatorWS" 节点,然后选择“测试 Web 服务”。
IDE 将在浏览器中打开测试器页(如果您已将 Web 应用程序部署到 GlassFish 中)。对于 Tomcat Web Server 和 EJB 模块的部署,情况有所不同
使用 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 方法的节点:
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 节点。
“输出”窗口将立即显示二者之和:
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 服务的节点。此时将显示您要从客户端调用的 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。
- 右键单击项目节点,然后选择“运行”。
注:此文转自:http://hi.baidu.com/mywish1987/blog/item/28eb36d35f0191d9562c8460.html
?
另:在使用netbeans开发WEBSERVICE的时候,所布置的服务器如:TOMCAT,有时会因为JAR包的不同版本或缺失而产生异常,具体情况,请查看服务器的log.