網(wǎng)路冷眼@BlogJava

          熙熙攘攘一閑人 以冷靜的眼光觀察技術(shù)
          posts - 88, comments - 193, trackbacks - 0, articles - 28
            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理
           原文地址:http://testwww.netbeans.org/kb/55/websvc-jax-ws_zh_CN.html

           

          Java EE 5 中的 Web 服務(wù) (JAX-WS)

          Java API for XML Web Services (JAX-WS) 2.0,JSR 224 是 Java EE 5 平臺(tái)的重要組成部分。作為 Java API for XML-based RPC 1.1 (JAX-RPC) 的后續(xù)發(fā)行版本,JAX-WS 簡(jiǎn)化了使用 Java 技術(shù)開(kāi)發(fā) Web 服務(wù)的工作。并且通過(guò)對(duì)多種協(xié)議(如 SOAP 1.1、SOAP 1.2、XML)的支持,以及提供用于支持其他協(xié)議和 HTTP 的工具,它解決了 JAX-RPC 1.1 中存在的一些問(wèn)題。JAX-WS 使用 JAXB 2.0 提供數(shù)據(jù)綁定服務(wù),并支持通過(guò)定制來(lái)控制生成的服務(wù)端點(diǎn)接口。通過(guò)對(duì)標(biāo)注的支持,JAX-WS 簡(jiǎn)化了 Web 服務(wù)開(kāi)發(fā),并縮小了運(yùn)行時(shí) JAR 文件的大小。

          本文檔向您介紹了有關(guān)使用 IDE 開(kāi)發(fā) JAX-WS Web 服務(wù)以及在三個(gè)不同的客戶端(Java SE 應(yīng)用程序中的 Java 類、Web 應(yīng)用程序中的 Servlet 或 JSP 頁(yè))中使用該服務(wù)的基礎(chǔ)知識(shí)。在本文檔中創(chuàng)建的三個(gè)客戶端是獨(dú)立的應(yīng)用程序,它們都使用同一個(gè) Web 服務(wù)。

          預(yù)計(jì)持續(xù)時(shí)間:25 分鐘

          本教程所需的軟件

          在開(kāi)始之前,您需要在計(jì)算機(jī)中安裝以下軟件:

          • NetBeans IDE 5.5下載
          • Java Standard Development Kit (JDK) 版本 5.0 或版本 6.0(下載
          • Sun Java System Application Server 9.0(如果未與安裝的 NetBeans IDE 捆綁在一起,請(qǐng)下載并單獨(dú)安裝它)。

          教程練習(xí)

          安裝并配置教程環(huán)境

          如果尚未注冊(cè) Sun Java System Application Server 9.0 的實(shí)例,則必須先進(jìn)行注冊(cè),然后才可以著手開(kāi)發(fā) Java EE 5 應(yīng)用程序:

          1. 從主窗口中,選擇“工具”>“服務(wù)器管理器”。
          2. 單擊“添加服務(wù)器”。選擇 "Sun Java System Application Server",并為此實(shí)例指定一個(gè)名稱,然后,單擊“下一步”。
          3. 指定服務(wù)器信息、應(yīng)用服務(wù)器本地實(shí)例的位置以及要將 Web 服務(wù)部署到的域。
          4. 單擊“完成”。

          注意:也可以部署到 Tomcat Web Server,但由于它僅具有一個(gè) Web 容器,因此應(yīng)在下一部分創(chuàng)建 Web 應(yīng)用程序,而不是 EJB 模塊。與 JSR-109 Web 服務(wù)不同的是,JAX-WS Web 服務(wù)可以成功地部署到 Tomcat Web 容器中。

          創(chuàng)建 Web 服務(wù)

          本練習(xí)的目的是創(chuàng)建一個(gè)適用于您決定使用的部署容器的項(xiàng)目。在建立項(xiàng)目后,您將在其中創(chuàng)建 Web 服務(wù)。

          選擇容器

          您可以在 Web 容器或 EJB 容器中部署 Web 服務(wù)。這要取決于具體的選擇。例如,如果您計(jì)劃部署到僅具有 Web 容器的 Tomcat Web Server 上,則應(yīng)該選擇創(chuàng)建 Web 應(yīng)用程序,而不是 EJB 模塊。

          1. 選擇“文件”>“新建項(xiàng)目”(Ctrl-Shift-N)。從 "Web" 類別中,選擇“Web 應(yīng)用程序”,或者從“企業(yè)”類別中,選擇“EJB 模塊”。
          2. 將項(xiàng)目命名為 CalculatorWSApplication
          3. 根據(jù)要使用的部署服務(wù)器,請(qǐng)執(zhí)行以下操作:
            • 對(duì)于 Sun Java System Application Server,將 J2EE 版本設(shè)置為 "Java EE 5"。
            • 對(duì)于 Tomcat Web Server,請(qǐng)取消選中“將源代碼級(jí)別設(shè)置為 1.4”復(fù)選框。
          4. 單擊“完成”。

          通過(guò) Java 類創(chuàng)建 Web 服務(wù)

          1. 右鍵單擊 CalculatorWSApplication 節(jié)點(diǎn),然后選擇“新建”>“Web 服務(wù)”。
          2. 將 Web 服務(wù)命名為 CalculatorWS,在“包”中鍵入 org.me.calculator,然后單擊“完成”。

            將在“項(xiàng)目”窗口中顯示新建的 Web 服務(wù)。例如,對(duì)于 Web 應(yīng)用程序,現(xiàn)在“項(xiàng)目”窗口將如下所示:

            IDE 將自動(dòng)創(chuàng)建服務(wù)器所需的部署描述符(如果有)。對(duì)于 Sun Java System Application Server,則不需要部署描述符。對(duì)于部署到 Tomcat Web Server 的 Web 服務(wù),將添加 sun-jaxws.xml 以及 web.xml 中的 WSServlet 項(xiàng)。

          小結(jié)

          在本練習(xí)中,您創(chuàng)建了一個(gè) NetBeans 項(xiàng)目并建立了 Web 服務(wù)。

          對(duì) Web 服務(wù)進(jìn)行編碼

          本練習(xí)的目的是對(duì) IDE 生成的文件和代碼執(zhí)行一些有意義的操作。您將添加一個(gè)操作,該操作將從客戶端接收到的兩個(gè)數(shù)字相加起來(lái)。

          將業(yè)務(wù)邏輯添加到 Web 服務(wù)

          1. 展開(kāi)“Web 服務(wù)”節(jié)點(diǎn),然后雙擊 "CalculatorWS" 節(jié)點(diǎn)。將在源代碼編輯器中打開(kāi) Web 服務(wù)。請(qǐng)注意,代碼中已存在了一個(gè)操作。它被注釋掉了。現(xiàn)在,我們將從頭開(kāi)始創(chuàng)建一個(gè)新的操作。創(chuàng)建此操作的另一種方法是刪除代碼注釋掉的行。
          2. 在類主體(位于注釋掉的代碼之上或之下)中單擊鼠標(biāo)右鍵,然后選擇“Web 服務(wù)”>“添加操作”。
          3. 在“添加操作”對(duì)話框的上半部分,在“名稱”中鍵入 add,并從“返回類型”下拉列表中選擇 int
          4. 在“添加操作”對(duì)話框的下半部分,單擊“添加”,然后創(chuàng)建一個(gè)類型為 int、名為 i 的參數(shù)。單擊“確定”。
          5. 重新單擊“添加”,然后創(chuàng)建一個(gè)類型為 int、名為 j 的參數(shù)。
          6. 單擊位于“添加操作”對(duì)話框底部的“確定”。請(qǐng)注意,add 方法的框架已添加到源代碼編輯器中:

             

                @WebMethod
                public int add(@WebParam(name = "i") int i, @WebParam(name = "j") int j) {
                // TODO implement operation
                return 0;
                }

             

          7. 按如下所示更改 add 方法(更改內(nèi)容以粗體顯示):

             

                @WebMethod
                public int add(@WebParam(name = "i") int i, @WebParam(name = "j") int j) {
                int k = i + j;
                return k;
                }

             

          小結(jié)

          在本練習(xí)中,您已為 Web 服務(wù)添加了代碼。

          部署并測(cè)試 Web 服務(wù)

          在將 Web 服務(wù)部署到 Web 容器時(shí),IDE 允許您測(cè)試 Web 服務(wù)以查看它是否能夠按預(yù)期的那樣工作。鑒于此目的,我們?cè)?IDE 中集成了 Sun Java System Application Server 提供的 Tester 應(yīng)用程序。對(duì)于 Tomcat Web Server,也存在類似的工具。但是,Sun Java System Application Server 的 Tester 頁(yè)允許您輸入值并對(duì)其進(jìn)行測(cè)試,而 Tomcat Web Server 則不允許這樣做。在后一種情況下,您只能看到已部署了 Web 服務(wù),但是不能對(duì)值進(jìn)行測(cè)試。目前還沒(méi)有用于測(cè)試 EJB 模塊是否已成功部署的工具。

          測(cè)試是否已成功部署到 Web 容器:

          1. 右鍵單擊項(xiàng)目節(jié)點(diǎn),選擇“屬性”,然后單擊“運(yùn)行”。根據(jù)要使用的部署服務(wù)器,請(qǐng)執(zhí)行以下操作:
            • 對(duì)于 Sun Java System Application Server,在“相對(duì) URL”字段中鍵入 /CalculatorWSService?Tester
            • 對(duì)于 Tomcat Web Server,在“相對(duì) URL”字段中鍵入 /CalculatorWS?Tester

            注意:由于部署的 EJB 模塊的結(jié)果不會(huì)顯示在瀏覽器中,因此,如果您使用的是 EJB 模塊,則不能執(zhí)行上述步驟。

          2. 右鍵單擊項(xiàng)目節(jié)點(diǎn),然后選擇“運(yùn)行項(xiàng)目”。

            IDE 將啟動(dòng)應(yīng)用服務(wù)器、生成應(yīng)用程序,并在瀏覽器中打開(kāi) tester 頁(yè)(如果已將 Web 應(yīng)用程序部署到 Sun Java System Application Server)。對(duì)于使用 Tomcat Web Server 和部署 EJB 模塊來(lái)說(shuō),情況則有所不同:

            • 如果部署到 Tomcat Web Server,將看到以下內(nèi)容(表明已成功部署了 Web 服務(wù)):

            • 如果部署了 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

               

          3. 如果部署到 Sun Java System Application Server,在 tester 頁(yè)上鍵入兩個(gè)數(shù)字,如下所示:

          4. 將顯示這兩個(gè)數(shù)字的和:

          小結(jié)

          在本練習(xí)中,您已部署了 Web 服務(wù)并對(duì)其進(jìn)行了測(cè)試。

            使用 Web 服務(wù)

            部署 Web 服務(wù)后,我們需要?jiǎng)?chuàng)建一個(gè)客戶端來(lái)使用 Web 服務(wù)的 add 方法。在本練習(xí)中,我們將創(chuàng)建三個(gè)客戶端,即 Java SE 應(yīng)用程序中的 Java 類、Web 應(yīng)用程序中的 Servlet 和 JSP 頁(yè)。

            客戶端 1:Java SE 應(yīng)用程序中的 Java 類

            1. 選擇“文件”>“新建項(xiàng)目”(Ctrl-Shift-N)。從“常規(guī)”類別中,選擇“Java 應(yīng)用程序”。將項(xiàng)目命名為 CalculatorWS_Client_Application

              注意:在編寫本文檔時(shí),問(wèn)題 10 還仍未得到解決,您必須在其路徑包含空格的項(xiàng)目文件夾中創(chuàng)建 Web 服務(wù)客戶端。例如,路徑不能為 "C:\Documents and Settings\..."。

              單擊“完成”。

            2. 右鍵單擊 "CalculatorWS_Client_Application" 節(jié)點(diǎn),然后選擇“新建”>“Web 服務(wù)客戶端”。
            3. 在“項(xiàng)目”中,單擊“瀏覽”。找到要使用的 Web 服務(wù)。選擇 Web 服務(wù)后,單擊“確定”。
            4. 在“包”中鍵入 org.me.calculator.client,然后單擊“完成”。

              將在“項(xiàng)目”窗口中顯示新建的 Web 服務(wù)客戶端:

            5. 雙擊 "Main.java" 以在源代碼編輯器中將其打開(kāi)。刪除 TODO 注釋,并在該行中單擊鼠標(biāo)右鍵。選擇“Web 服務(wù)客戶端資源”>“調(diào)用 Web 服務(wù)操作”。
            6. 找到“添加”操作,然后單擊“確定”。
            7. 將帶紅色下劃線的行更改為以下內(nèi)容:

               

                  System.out.println("Sum: " + port.add(3,4));
            8. 右鍵單擊項(xiàng)目節(jié)點(diǎn),然后選擇“運(yùn)行項(xiàng)目”。

              現(xiàn)在“輸出”窗口會(huì)顯示以下內(nèi)容:

               

                  compile:
                      run:
                      Sum: 7
                      BUILD SUCCESSFUL (total time: 1 second)

               

            客戶端 2:Web 應(yīng)用程序中的 Servlet

            1. 選擇“文件”>“新建項(xiàng)目”(Ctrl-Shift-N)。從 "Web" 類別中,選擇“Web 應(yīng)用程序”。將項(xiàng)目命名為 CalculatorWSServletClient

              注意:在編寫本文檔時(shí),問(wèn)題 10 還仍未得到解決,您必須在其路徑包含空格的項(xiàng)目文件夾中創(chuàng)建 Web 服務(wù)客戶端。例如,路徑不能為 "C:\Documents and Settings\..."。

              單擊“完成”。

            2. 右鍵單擊 "CalculatorWSServletClient" 節(jié)點(diǎn),然后選擇“新建”>“Web 服務(wù)客戶端”。
            3. 在“項(xiàng)目”中,單擊“瀏覽”。找到要使用的 Web 服務(wù)。選擇 Web 服務(wù)后,單擊“確定”。
            4. 在“包”中鍵入 org.me.calculator.client,然后單擊“完成”。

              將在“項(xiàng)目”窗口中顯示新建的 Web 服務(wù)客戶端:

            5. 右鍵單擊項(xiàng)目節(jié)點(diǎn),然后選擇“新建”> "Servlet"。將 Servlet 命名為 ClientServlet,并將它放置在名為 org.me.calculator.client 的包中。單擊“完成”。要使 Servlet 成為應(yīng)用程序的入口點(diǎn),請(qǐng)右鍵單擊該項(xiàng)目節(jié)點(diǎn),選擇“屬性”,單擊“運(yùn)行”,然后在“相對(duì) URL”中鍵入 /ClientServlet。單擊“確定”。
            6. 在源代碼編輯器中,刪除注釋掉 processRequest 方法主體的行。該行是注釋掉代碼部分的起始行:

               

                  /* TODO output your page here

              然后,刪除注釋掉代碼部分的結(jié)束行:

               

                  */

              在以下行之后添加一些空行:

               

                  out.println("<h1>Servlet ClientServlet at " + request.getContextPath () + "</h1>");

              現(xiàn)在,在您添加的一個(gè)空行中單擊鼠標(biāo)右鍵,選擇“Web 服務(wù)客戶端資源”>“調(diào)用 Web 服務(wù)操作”。將出現(xiàn)“選擇要調(diào)用的操作”對(duì)話框。

            7. 找到 add 操作,然后單擊“確定”。

              現(xiàn)在 processRequest 方法應(yīng)該如下所示(下面以粗體顯示添加的代碼):

               

                  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.client.CalculatorWSService service = new org.me.calculator.client.CalculatorWSService();
                      org.me.calculator.client.CalculatorWS port = service.getCalculatorWSPort();
                      // TODO initialize WS operation arguments here
                      int arg0 = 0;
                      int arg1 = 0;
                      // TODO process result here
                      int result = port.add(arg0, arg1);
                      System.out.println("Result = "+result);
                      } catch (Exception ex) {
                      // TODO handle custom exceptions here
                      }
                      out.println("</body>");
                      out.println("</html>");
                      out.close();
                      }

               

              arg0arg1 的值更改為其他數(shù)值,如 3 和 4。

              System.out.println 語(yǔ)句更改為 out.println

              添加輸出異常的行(如果拋出異常)。

              現(xiàn)在 try/catch 塊應(yīng)該如下所示(會(huì)突出顯示新行和更改行):

               

                  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);
                      }

               

            8. 右鍵單擊項(xiàng)目節(jié)點(diǎn),然后選擇“運(yùn)行項(xiàng)目”。

              將啟動(dòng)服務(wù)器(如果它尚未運(yùn)行),生成并部署應(yīng)用程序,并且打開(kāi)瀏覽器以顯示計(jì)算結(jié)果。

            客戶端 3:Web 應(yīng)用程序中的 JSP 頁(yè)

            1. 選擇“文件”>“新建項(xiàng)目”(Ctrl-Shift-N)。從 "Web" 類別中,選擇“Web 應(yīng)用程序”。將項(xiàng)目命名為 CalculatorWSJSPClient

              注意:在編寫本文檔時(shí),問(wèn)題 10 還仍未得到解決,您必須在其路徑包含空格的項(xiàng)目文件夾中創(chuàng)建 Web 服務(wù)客戶端。例如,路徑不能為 "C:\Documents and Settings\..."。

              單擊“完成”。

            2. 右鍵單擊 "CalculatorWSJSPClient" 節(jié)點(diǎn),然后選擇“新建”>“Web 服務(wù)客戶端”。
            3. 在“項(xiàng)目”中,單擊“瀏覽”。找到要使用的 Web 服務(wù)。選擇 Web 服務(wù)后,單擊“確定”。
            4. 在“包”中鍵入 org.me.calculator.client,然后單擊“完成”。

              將在“項(xiàng)目”窗口中顯示新建的 Web 服務(wù)客戶端。

            5. 在“Web 頁(yè)”文件夾中,雙擊 "index.jsp" 以在源代碼編輯器中將其打開(kāi)。
            6. 在“Web 服務(wù)引用”節(jié)點(diǎn)中,展開(kāi)表示 Web 服務(wù)的節(jié)點(diǎn)。現(xiàn)在將公開(kāi)要從客戶端調(diào)用的 add 操作。
            7. add 操作拖動(dòng)到客戶端的 index.jsp 頁(yè)上,并將其放在 H1 標(biāo)記之下。現(xiàn)在,將在 index.jsp 頁(yè)中生成用于調(diào)用服務(wù)操作的代碼。

              arg0arg1 的值更改為其他數(shù)值,如 3 和 4。

            8. 右鍵單擊項(xiàng)目節(jié)點(diǎn),然后選擇“運(yùn)行項(xiàng)目”。

              將啟動(dòng)服務(wù)器(如果它尚未運(yùn)行),生成并部署應(yīng)用程序,并且打開(kāi)瀏覽器以顯示計(jì)算結(jié)果:



            后續(xù)步驟

            有關(guān)使用 NetBeans IDE 5.5 開(kāi)發(fā) Java EE 應(yīng)用程序的更多信息,請(qǐng)參見(jiàn)以下資源:

            要發(fā)送意見(jiàn)和建議、獲得支持以及隨時(shí)了解 NetBeans IDE Java EE 開(kāi)發(fā)功能的最新開(kāi)發(fā)情況,請(qǐng)加入 nbj2ee@netbeans.org 郵件列表

            主站蜘蛛池模板: 旬阳县| 高邮市| 湛江市| 监利县| 博白县| 宁武县| 济源市| 水富县| 灌南县| 枣阳市| 彰化市| 麻阳| 新营市| 克山县| 怀宁县| 乌拉特前旗| 宁乡县| 汕尾市| 桑植县| 福安市| 淮南市| 西贡区| 会东县| 桃江县| 齐齐哈尔市| 介休市| 宁强县| 吉安市| 平利县| 广饶县| 华坪县| 长岭县| 登封市| 沙湾县| 寿光市| 万盛区| 天全县| 都兰县| 多伦县| 高邑县| 交口县|