fykyx521  
          日歷
          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345
          統計
          • 隨筆 - 2
          • 文章 - 2
          • 評論 - 0
          • 引用 - 0

          導航

          常用鏈接

          留言簿(1)

          隨筆檔案

          文章檔案

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

           

          2009年3月17日

           /*title: web service入門學習筆記(七)
          **date: 2007/01/19
          **author:laomai
          **url: http://blog.csdn.net/laomai/
          */

          七、命令行開發過程
             通過以上的學習,我們知道如何在ant腳本和ide環境中開發一個簡單的webservice.
          但是作為搞技術的人特別是搞c的人來看,上面的過程隱藏了太多的東西,
          對我們有鉆研精神的人,自然就想搞清楚腳本背后的過程。
          假設我們的機器上沒有ide環境和ant工具,
          我們如何“手工”編譯出自己的webservice呢?
          這就是本節要講述的內容--只用命令行工具開發webservice.

          再次聲明:

          本部分主要參考了

          http://blog.csdn.net/lin_bei/archive/2006/11/07/1371131.aspx

          的內容,由于這位兄弟翻譯的不是很通順,我就按照自己的理解來改編成了
          hellowrold的例子:-)。
          其他部分為我原創,轉載時請注明出處。

          0、設置環境變量
           把jdk和javaee的路徑如
           D:\Java\jdk1.6.0
           D:\Sun\SDK\bin加到系統的path變量中去

          1、建立項目目錄
           首先建立一個項目的目錄,名為WebTest,項目目錄下又包含三個子目錄
            src\      本目錄用于存放源代碼,
            build\    本目錄用于存放輸出的文件
            deploy\   本目錄用于對服務器打包
            
          2、編寫服務器類實現文件
            在項目的src目錄下建立一個個子目錄endpoint,
            在這個endpoint子目錄下新建一個Hello.java文件,內容如下
           
           /*src\endpoint\Hello.java文件  
            提供webservice的服務器端實現類
           */
           package endpoint;
           
           import javax.jws.WebService;
           import javax.jws.WebMethod;
           
           @WebService
           public class Hello
           {
            @WebMethod
               public String getHello(String name)
               {
                  return "Hello " + name + "!";
               }
            }
          3、編譯服務器類
           ①在build目錄下建立一個子目錄classes
             ②在命令行執行如下命令
              cd WebTest  ;進入項目目錄
              javac -classpath d:/Sun/SDK/lib/javaee.jar -d ./build/classes src/endpoint/Hello.java  ;編譯服務器類
             執行完后會產生一個build\classes\endpoint\Hello.class文件
           
          4、生成wsdl文件
           ①在build目錄下建立一個子目錄generated
           ②生成wsdl文件,執行
            wsgen -cp ./build/classes -keep -d ./build/classes -r ./build/generated -wsdl  endpoint.Hello
           
           執行完成會在./build/generated產生兩個文件
           HelloService.wsdl
           HelloService_schema1.xsd
           并且在\build\class\endpoint下建立一個jaxws目錄,下面有4個文件
           GetHello.java                       
           GetHello.class
           GetHelloResponse.java
           GetHelloResponse.class
           
           這些文件與與前面所說的ant腳本中生成的
           D:\Sun\SDK\domains\domain1\generated\ejb\j2ee-modules\endpoint_Hello\endpoint\jaxws
           下的文件相同
           
          5、將服務器打包,做成war文件
           ①建立打包所需要的目錄
              在項目的deploy目錄下建立一個子目錄/WEB-INF,
             WEB-INF子目錄下再建立兩個子目錄
              classes/  用于存放服務器端類
              wsdl/     用于存放wsdl文件

           ②將各輸出文件或目錄拷貝到相應的目錄下
            (1)把build\classes\endpoint整個目錄拷貝到deploy/WEB-INF/class目錄下
            (2)把build\generated目錄下的兩個文件
             HelloService.wsdl、HelloService_schema1.xsd拷貝到
                deploy/WEB-INF/wsdl目錄下
           ③在deploy/WEB-INF/ 目錄下新建一個web.xml文件,內容為
            <?xml version="1.0" encoding="UTF-8"?>
            <web-app xmlns="    xmlns:j2ee="    xmlns:xsi="    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
                <description>WebTier for the Hello Service</description>
            <display-name>HelloWAR</display-name>
            <servlet>
             <description>Endpoint for Hello Web Service</description>
             <display-name>HelloWebService</display-name>
             <servlet-name>Hello</servlet-name>
             <servlet-class>endpoint.Hello</servlet-class>
             <load-on-startup>0</load-on-startup>
            </servlet>
            <servlet-mapping>
             <servlet-name>Hello</servlet-name>
             <url-pattern>/HelloService</url-pattern>
            </servlet-mapping>
            <session-config>
             <session-timeout>54</session-timeout>
            </session-config>
            </web-app>
           ④將service打包,執行
            (1)cd WebTest\deploy   ;進入打包目錄
            (2)jar cvf hello.war *  ;將當前目錄下的所有內容打包到hello.war文件中
            
            
          6、將service 類發布到網絡服務器上
           ①啟動sun 服務器
             方法為
            開始->程序->Sun Microsystems->Application Server PE 9->Start  Default Server
           ②在項目目錄下建立一個passwd文件,內容是sun服務器admin用戶的密碼,例如
            AS_ADMIN_PASSWORD=testtesttest
           ③將hello.war發布到服務器上,執行
            (1)cd WebTest  ;進入項目目錄
            (2)發布服務器包,注意這個命令是在一行執行的,
            我為了書寫方便而斷行。分號后面是注釋
            asadmin deploy
              --user admin             ;管理員用戶名
              --passwordfile passwd    ;密碼文件名,就是我們剛才寫的passwd文件
              --host localhost        
              --port 4848     ;管理端口號
              --contextroot myhello   ;上下文根名稱
              --upload=true    
              --target server    
              deploy/hello.war
           
           ④在瀏覽器中輸入地址
            
          http://localhost:8080/myhello/HelloService?WSDL
            如果瀏覽器能顯示出正確的內容,就說明成功。

          7、生成客戶端的stub類
           ①在項目的build\classes目錄下建立一個stub子目錄
           ②執行
            (1)cd WebTest   ;進入項目子目錄
            (2)wsimport -keep -d ./build/classes/stub http://localhost:8080/myhello/HelloService?WSDL
           
           執行完成后會在build/classes/stub下建立一個endpoint目錄,下面有這些文件
            GetHello.java
            GetHelloResponse.java
            Hello.java
            HelloService.java
            GetHello.class
            GetHelloResponse.class
            Hello.class
            HelloService.class
            ObjectFactory.class
            ObjectFactory.java
            package-info.java
            package-info.class
           這些文件和ant腳本中import執行的結果一樣
           
          8、編寫客戶端測試程序
           在項目的src目錄下建立一個子目錄client,在這個目錄下面建立一個
           Client.java文件,內容為
           
           // src\client\Client.java文件 調用服務器提供的webservice的測試類
           package client;

           import javax.xml.ws.WebServiceRef;
           import endpoint.HelloService;
           import endpoint.Hello;

           public class Client
           {
               @WebServiceRef(wsdlLocation="http://localhost:8080/myhello/HelloService?WSDL")
               static HelloService service;
            public static void main(String[] args)
               { 
                   Client client = new Client();
                   client.doHello();
               }
                  public void doHello()
               {
                   try
                   {
                       Hello port = service.getHelloPort();
                       String ret = port.getHello(System.getProperty("user.name"));
                       System.out.println("Hello result = " + ret);
                   }
                   catch(Exception e)
                   {
                       e.printStackTrace();
                   }
               }
           }
           
          9、編譯客戶端程序
           執行
           (1)cd WebTest  ;進入項目目錄
           (2)javac -classpath ./build/classes/stub;d:/Sun/SDK/lib/javaee.jar;d:/Sun/SDK/lib/appserv-ws.jar -d ./build/classes/stub src/client/Client.java 
           執行成功后會在F:\exercise\java\WebTest\build\classes目錄下建立一個
           client目錄,下面有一個Client.class文件
           
          10、運行客戶端程序
           (1)cd WebTest\build\classes\stub  ;進入client的上級目錄
           (2)set  APPCPATH=.     ;設置環境變量APPCPATH,不然運行appclient程序時會出一堆莫名奇妙的錯誤
           (3)>appclient client.Client運行測試程序,結果為
            Hello result = Hello Administrator!
           執行成功


          /*title: web service入門學習筆記(八)
          **date: 2007/01/19
          **author:laomai
          **url: http://blog.csdn.net/laomai/
          */

          八、小結
          開發webservice的基本步驟為
          1、編寫服務器端,要點有
           ①導入WebService包和WebMethod包
             import javax.jws.WebService;
             import javax.jws.WebMethod;
           ②實現的服務類前加@WebService符號 
           ③為了代碼清晰,類提供的公開方法前加@WebMethod符號,這個不寫對編譯也沒影響,
            
          2、編譯服務器端,要點為
           ①javac命令的classpath選項中要有javaee.jar的路徑,如
            javac -classpath d:/Sun/SDK/lib/javaee.jar -d ./build src/endpoint/Hello.java
           ②用wsgen命令生成wsdl文件.
           ③將服務器端打包
           注意如果是sun的服務器,那么把service類直接編譯到
           javaee5安裝目錄\domains\domain1\autodeploy下,可以自動完成②和③的工作。
           我們介紹的sun自帶的入門腳本就是這么做的。
          3、在客戶端機器上自動生成stub類,要點為
           ①客戶機上必須也裝有jdk和javaee5
           ②用wsimport工具將服務器傳過來的wsdl文件轉換成本地的stub類
          4、編寫客戶端調用代碼,要點:
           ①導入WebServiceRef包
            import javax.xml.ws.WebServiceRef;
           ②導入本地生成的stub類,如
            import endpoint.HelloService;
            import endpoint.Hello;
           ③指明服務器的wsdl路徑
            @WebServiceRef(wsdlLocation="http://localhost:8080/myhello/HelloService?WSDL")
           ④聲明一個靜態的service對象
            static HelloService service;
           ⑤對要調用的遠程方法聲明一個代理對象,通過代理來調用真正的遠程方法
            Hello port = service.getHelloPort();
               String ret = port.getHello(System.getProperty("user.name"));
          5、編譯客戶端調用程序,注意classpath參數中要有
           ①stub類的路徑
           ②javaee.jar的路徑
           ③appserv-ws.jar的路徑
           
          6、用appclient執行客戶端程序,要點為
           ①進入到客戶端程序的上級目錄
           ②把APPCPATH的值設置為當前目錄" . "
           ③appclient的第一個參數為客戶端程序名,
             后面的參數是傳給客戶端程序本身的命令行參數。

          /*title: web service入門學習筆記(九)
          **date: 2007/01/19
          **author:laomai
          **url: http://blog.csdn.net/laomai/
          */ 
           
          九、本文中用到的文件
          1、WebTest項目文件列表 
          WebTest\passwd 保存密碼的文件,手工建立
          WebTest\src 子目錄 手工建立,內容為
           endpoint\Hello.java  服務器類的實現文件
           client\Client.java   客戶類的實現文件
          WebTest\build
           generated 子目錄,手工建立,內容為
            HelloService.wsdl   由wsgen命令生成
            HelloService_schema1.xsd  由wsgen命令生成
           classes 子目錄,手工建立,內容為
            endpoint\Hello.class  由javac命令生成
            endpoint\jaxws子目錄,由wsgen命令自動生成,內容為
              GetHello.java
              GetHelloResponse.java
              GetHello.class
              GetHelloResponse.class
            stub 子目錄,手工建立,內容為:
             client\Client.class 由javac命令生成
             endpoint 子目錄 由wsimport命令自動生成,內容為:
              GetHello.java
              GetHelloResponse.java
              Hello.java
              HelloService.java
              ObjectFactory.java
              package-info.java
              package-info.class
              GetHello.class
              GetHelloResponse.class
              Hello.class
              HelloService.class
              ObjectFactory.class
          WebTest\deploy子目錄 手工建立,內容為
           hello.war 將WEB-INF子目錄打包后生成的文件,由jar命令生成
           WEB-INF   打包的輸入目錄,手工建立。內容包括:
            web.xml   手工建立
            classes\endpoint子目錄 為build\classes\endpoint的拷貝
            wsdl子目錄,由build\generated拷貝而來

          2、生成的HelloService.wsdl文件的內容
          <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
          <definitions targetNamespace="http://endpoint/" name="HelloService" xmlns="http://endpoint/" xmlns:xsd="http://endpoint/" schemaLocation="HelloService_schema1.xsd"/>
              </xsd:schema>
            </types>
            <message name="getHello">
              <part name="parameters" element="tns:getHello"/>
            </message>
            <message name="getHelloResponse">
              <part name="parameters" element="tns:getHelloResponse"/>
            </message>
            <portType name="Hello">
              <operation name="getHello">
                <input message="tns:getHello"/>
                <output message="tns:getHelloResponse"/>
              </operation>
            </portType>
            <binding name="HelloPortBinding" type="tns:Hello">
              <soap:binding transport="     <operation name="getHello">
                <soap:operation soapAction=""/>
                <input>
                  <soap:body use="literal"/>
                </input>
                <output>
                  <soap:body use="literal"/>
                </output>
              </operation>
            </binding>
            <service name="HelloService">
              <port name="HelloPort" binding="tns:HelloPortBinding">
                <soap:address location="REPLACE_WITH_ACTUAL_URL"/>
              </port>
            </service>
          </definitions>

          十、致謝
           在學習WebService的過程中,我得到了csdn java版的葉鋒城朋友的許多指點,
          餅子堂的兄弟們也給了很多有用的資料,這里一并表示謝意。本文也算是我給這些
          朋友們的一個匯報和總結,呵呵。

          (--end
          /*title: web service入門學習筆記
          **date: 2007/01/23
          **author:laomai
          **url:
          http://blog.csdn.net/laomai/*/


          轉自http://blog.csdn.net/laomai/archive/2007/01/23/1490829.aspx

          posted @ 2009-03-17 19:56 康 閱讀(236) | 評論 (0)編輯 收藏
           
               摘要: JavaSE6.0 Web Service學習筆記(引用) Web Service概述 Web Service的定義 W3C組織對其的定義如下,它是一個軟件系統,為了支持跨網絡的機器間相互操作交互而設計。Web Service服務通常被定義為一組模塊化的API,它們可以通過網絡進行調用,來執行遠程系統的請求服務。 這里我們從一個程序員的視角來觀察web service。在傳統的程序編...  閱讀全文
          posted @ 2009-03-17 19:54 康 閱讀(344) | 評論 (0)編輯 收藏
           
          Copyright © 康 Powered by: 博客園 模板提供:滬江博客
          主站蜘蛛池模板: 竹山县| 兴城市| 丹阳市| 永善县| 临夏县| 新野县| 边坝县| 仙桃市| 陇川县| 华宁县| 元朗区| 清新县| 忻城县| 绥阳县| 格尔木市| 布尔津县| 墨玉县| 德格县| 儋州市| 上杭县| 云霄县| 观塘区| 米林县| 清丰县| 绥棱县| 军事| 博白县| 深圳市| 逊克县| 南木林县| 东乌珠穆沁旗| 舞阳县| 三都| 泗阳县| 乐至县| 工布江达县| 肥东县| 建阳市| 漠河县| 祁阳县| 南岸区|