【IT168技术文档】
设置环境
开始编写代码之前,必须确保您有所有必要的软件,并且保证正确设置服务器。
安装软件
开始之前,需要在计算机上安装如下软件:
注册服务器
在可以与 web 服务协作之前,必须注册一款 Sun Java System Application Server。如果安装了 NetBeans IDE 5.0/SJS Application Server 资源包,则自动注册本地 Sun Java Application Server。
- 如果想部署不同的服务器(如,Jboss Application Server 或 Tomcat Web 服务器),则选择 Help > Help Contents 并阅读相关的帮助主题。
- 从主窗口选择 Tools > Server Manager。
- 单击 Add Server。选择服务器并为该服务器实例命名。然后单击 Next。
- 指定应用服务器的安装目录(如 C:\Sun\Appserver),选择 Register local default domain 单选按钮,并单击 Next。
- 从 Location 组合框选择应用服务器本地实例的位置。
- 另外,单击 Next 并输入管理员用户名和密码。如果不想在 IDE 用户目录存储用户名和密码,则可以不填这些字段。IDE 将在每次需要信息时提示您。
注意:Sun Java System Application Server 的默认管理员密码是 adminadmin。 - 单击 Finish。
- 单击 Runtime 窗口并展开 Servers 节点。新的服务器实例即被列出。
- 右键单击应用服务器的节点并选择 Start Server。
开发 Web 服务
为 web 服务编码很方便。IDE 为您管理所有实现详细信息,所以您可以集中精力编码 web 服务的业务逻辑。
创建项目
- 决定是从 web 应用程序还是从会话 bean 公开 web 服务。
- 选择 File > New Project (Ctrl-Shift-N),并且根据上一步做出的决定进行以下操作之一:
- 在 Categories 下选择 Web。在 Projects 下选择 Web Application。单击 Next。
- 在 Categories 下选择 Enterprise。在 Projects 下选择 EJB Module。单击 Next。
- 命名项目 HiWS,将 Project Folder 更改到计算机上的任一文件夹,并确保在 Server 下拉式列表中选择您选择的服务器。
- 单击 Finish。
创建 Web 服务
- 右键单击项目节点并选择 New > Web Service。命名 web 服务 HiWS,在 Package 字段键入 org.me.hi,并单击 Finish。
创建和编译 web 服务时,请等候几秒钟。在 Source Editor 中开启称作 HiWSImpl.java(在 web 应用程序中)的实现类或称作 HiWSBean.java(在 EJB 模块中)的会话 bean。
- 在 Projects 窗口中,展开 Web Services 节点,右键单击 HiWS web service 节点,并选择 Add Operation。在 Name 字段键入 sayHi,在 Type 下拉式列表中键入 String。单击 Add 并定义类型 java.lang.String 的命名为 s 的参数。单击 OK。单击 OK。
- 在 Add Operation 对话框中单击 OK,以创建操作框架。
展开 Source Packages 节点和 org.me.hi 节点。双击 HiWSSEI.java 节点,注意观察在接口类中声明的操作,并且注意是否抛出了 java.rmi.RemoteException 异常。
- 在 Source Editor 中,在实现类或会话 bean 中填写操作框架。此类可以是 HiWSImpl.java(在 web 应用程序中),也可以是 HiWSBean.java(在 EJB 模块)。在 sayHi 操作的主体部分,通过用以下代码替换 "return null;" 完成此操作:
新的 sayHi 方法现在应该与以下方式一样:return "Hi " + s + "!";public java.lang.String sayHi(java.lang.String s) throws java.rmi.RemoteException { return "Hi " + s + "!"; }
生成和配置用于日志记录的 SOAP 消息处理程序
另外,您可以用 SOAP 消息处理程序提供的功能丰富 web 服务。在此可选部分中创建一个 logger。
- 右键单击项目节点并选择 New > File/Folder。在 Categories 下选择 Web Services。在 File Types 下,选择 Message Handler。单击 Next。
- 命名消息处理程序 HiWSLogger,在 Package 下拉式列表中选择 org.me.hi,并单击 Finish。
在 Source Editor 中创建并打开称作 HiWSLogger.java 的实现类。无需添加或更改代码,现在就有了一个 logger,因为 IDE 的消息处理程序模板提供的默认代码提供了完整的 logger 功能。
- 在 Projects 窗口中,展开 Web Services 节点,右键单击 HiWS 节点并选择 Configure Handlers。在 Configure SOAP Message Handlers 对话框中,单击 Add 并浏览 HiWSLogger 类。单击 OK。
即可在对话框中列出消息处理程序类。
- 单击 OK,以完成配置 SOAP 消息处理程序。
展开 Configuration Files 节点。双击 webservices.xml 节点并注意观察声明处理程序的情况。
公开 Web 服务
公开 Web 服务时,使它可供客户端使用。可以将 IDE 用作客户端,以便在部署之后进行测试。
部署 Web 服务
根据您实现 web 服务的方法,完成以下操作之一:
- 对于作为 web 应用程序实现的 web 服务,执行以下操作:
- 选择 Tools > Options 并从 Web Browser 下拉式列表中选择您的浏览器。单击 OK。
- 在 Projects 窗口中右键单击 HiWS 项目节点,并选择 Properties。在 Project Properties 对话框中,选择 Run 窗格。在 Relative URL 文本框中键入 /HiWS?WSDL。该 Relative URL 文本框即指定与上下文路径相关的 URL,以充当应用程序的入口点运行。单击 OK。
- 在 Projects 窗口中右键单击 HiWS 项目节点,并选择 Run Project。
启动服务器并部署 web 服务。应该看到在您的浏览器中显示的 web 服务的 WSDL 文件。该 WSDL 文件发布了 web 服务的端点,所以负责创建 Web 服务客户端的开发人员可以知道 Web 服务可以提供哪种功能。
- 对于作为会话 bean 实现的 web 服务,在 Projects 窗口中右键单击 HiWS 项目,并选择 Deploy Project。启动服务器并部署 web 服务。注意,会话 bean 不在浏览器中显示。
Web 服务必须保持部署状态,以便能够在 "Consuming the Web Service" 部分创建 web 服务客户端。
注册和测试 Web 服务
- 在 Projects 窗口中,展开 Web Service 节点,右键单击 HiWS web 服务节点,并选择 Add to Registry。
您可能收到与以下形式类似的错误消息:
Unable to add web service to registry. Make sure it has been deployed, the server is running, and the correct WSDL URL was entered.如果收到此错误消息,则要确保部署了 web 服务,然后再次选择 Add to Registry。
即出现一个带有建议的用于注册 web 服务的 URL 的对话框。
- 记下该 URL,因为您需要在稍后创建 web 服务客户端时使用。单击 OK。
- 在 Runtime 窗口 (Ctrl-5) 中,展开 Web Services 节点并且持续展开节点,直到到达 sayHi 节点。右键单击 sayHi 节点并选择 Test Operation。在 Test Web Service Operation 对话框中,在 Value 文本框中键入 "John" 并单击 Submit。结果 "Hi John!" 即显示在对话框的底部。单击 Close。
- 查看服务器日志,可以看到由消息处理程序生成的日志消息。例如,如果使用的是 Sun Java System Application Server,则要展开 Runtime 窗口下的 Servers 节点,右键单击该服务器的节点,并选择 View Server Log。该 server.log 文件即显示,并在结尾处出现类似于以下形式的消息:
|Log message:Wed Sep 07 10:47:45 CEST 2005--sayHi String_1:John |#]这是您在前一部分创建的 SOAP 消息处理程序生成的日志消息。
既然测试了操作,并且对 web 服务的工作及可能对其他操作有用的情况感到满意,您可以部署它,以便让需要它的客户端使用。
使用 Web 服务
使用 web 服务是客户端使用 web 服务时进行的操作。使用 IDE 设置客户端很方便,所以它可以使用 web 服务。使用向导导入描述 web 服务接口的 WSDL 文件。然后将其集成到客户端,以便 web 服务执行对您有用的操作。
注意:Web 服务可用于 web 应用程序或 Java 应用程序。在下面的例子中,您只能将 web 服务用于 web 应用程序。
创建 Web 应用程序项目
- 选择 File > New Project (Ctrl-Shift-N)。在 Categories 下选择 Web。在 Projects 下选择 Web Application。单击 Next。将项目命名为 HiWSClient,将 Project Folder 更改到计算机上的任一文件夹,并确保在 Server 下拉式列表中选择您选择的服务器。单击 Finish。
发现关于 Web 服务的信息
- 右键单击 HiWSClient 项目节点,选择 New > Web Service Client。在 WSDL URL 文本框中复制和粘贴正在运行的 web 服务的 URL。例如,URL 可以是以下形式:
http://localhost:8080/HiWS/HiWS?WSDL
- 单击 Retrieve WSDL。当在 Local Filename 文本框中填写 WSDL 文件名时,WSDL 文件即可被正确检索到。在 Package 字段中键入 org.me.hi。
- 根据服务器执行以下操作:
- 对于 Sun Java System Application Server,选择 J2EE Container 生成的静态 stub。
- 对于其他服务器(如 JBoss 应用服务或 Tomcat Web 服务器),必须选择 IDE 生成的静态 stub。
- 单击 Finish。
- 展开 Web Service Reference 节点并且保持展开节点,直到到达 sayHi 节点。右键单击 sayHi 节点并选择 Test Operation。在 Test Web Service Operation 对话框中,在 Value 文本框中键入 "John" 并单击 Submit。结果 "Hi John!" 即显示在对话框的底部。既然测试了操作,并且对公开的 web 服务对您有用的情况感到满意,您就要准备开发与其交互的客户端应用程序。
开发 Web 服务客户端
- 右键单击 HiWSClient 项目节点并选择 New > Servlet。命名 web 服务 HiServlet,在 Package 下拉式列表中键入 org.me.hi,单击 Next,然后单击 Finish。在 Source Editor 中打开 servlet HiServlet.java。
- 在 Source Editor 中,在 HiServlet 类中的 processRequest 操作内右键单击。选择 Web Service Client Resources > Call Web Service Operation,选择 sayHi 操作并单击 OK。
3. 现在填写生成的框架代码,以便与以下形式一样:
try { out.println(getHiWSSEIPort().sayHi("John")); } catch(java.rmi.RemoteException ex) { out.println("<p>Caught an exception <p>" + ex); }
4. 重新安排代码片段,以便将它放在 processRequest 方法的 <body> 标记之间:
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 HiServlet</title>"); out.println("</head>"); out.println("<body>"); try { out.println(getHiWSSEIPort().sayHi("John")); } catch(java.rmi.RemoteException ex) { out.println("<p>Caught an exception <p>" + ex); } out.println("</body>"); out.println("</html>"); out.close(); }
5. 其次,要使用户能够与 web 服务交互,请向 servlet 添加一个表格并将用户输入传递到 web 服务(只有下面的 红色代码与上面的不一
样):
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 HiServlet</title>"); out.println("</head>"); out.println("<body>"); out.println("<p>Enter your name:</p>"); out.println("<form method=\"get\">"); out.println("<input type=\"text\" name=\"name\" size=\"25\">"); out.println("<br>"); out.println("<p>"); out.println("<input type=\"submit\" value=\"Submit\">"); out.println("</form>"); String name = request.getParameter("name"); if ( name != null ) { try { out.println(getHiWSSEIPort().sayHi(name)); } catch(java.rmi.RemoteException ex) { out.println("<p>Caught an exception <p>" + ex); } } out.println("</body>"); out.println("</html>"); out.close(); }
别忘了将字符串 "John" 改为变量 name,如上面的代码所示!
部署 Web 服务客户端
- 在 Projects 窗口中右键单击 HiWSClient 项目节点,并选择 Properties。在 Project Properties 对话框中,选择 Run 窗格。执行以下操作:
- 在 Server 下拉式列表中选择服务器。
- 在 Relative URL 文本框中键入 /HiServlet。
- 单击 OK。
-
部署 web 服务客户端。应该看到类似于以下在 IDE 默认浏览器中显示的链接:

-
键入 "John" 并单击 Submit。现在应该看到下图:

故障排除
由于 IDE 提供与 Web 服务通信所需的大多数代码,所以只有您遇到的问题才是自己的代码中的错误。此外,虽如此,如果您在防火墙后面,则可能会遇到几个问题。随后的故障排除提示将试图解决这一问题。
- 部署 Sun Java System Application Server。如果部署了应用程序而没有正确设置代理主机和端口,则会看到类似于与浏览器中此情形相似的内容:
- 部署 Sun Java System Application Server。如果部署了应用程序而没有正确设置代理主机和端口,则会看到类似于与浏览器中此情形相似的内容:

要解决此问题,则执行以下操作:
- 在 Runtime 窗口中,确保 Sun Java System Application Server正在运行。如果正在运行,则在服务器名称的左边显示一个绿色箭头。
- 展开 Sun Java System Application Server 节点,右键单击 JVM 节点并选择 Properties。
- 单击 JVMOptions 属性右边的省略号。
- 将以下两个属性添加到列表中:
- -Dhttp.proxyHost=my.host
- -Dhttp.proxyPort=my.port.number
确保为这些属性设置的值适用于您的环境。
- -Dhttp.proxyHost=my.host

要解决此问题,则执行以下操作:
- 选择 Tools > Options。
- 在 Options 窗口中,设置代理主机和端口号。