網(wǎng)路冷眼@BlogJava

          熙熙攘攘一閑人 以冷靜的眼光觀察技術(shù)
          posts - 88, comments - 193, trackbacks - 0, articles - 28
            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          版本歷史:
          2006.12.17 發(fā)布
          2006.12.18 更正不加標(biāo)準(zhǔn)輸入流讀取字符,程序?qū)⒘⒓赐顺觯瑢⒉荒芴峁┓?wù)。將程序列表的行號(hào)去掉,方便代碼粘貼。


          在前一篇文章中,講述了Java SE 6.0新特征的概觀。本文將介紹Web服務(wù)。


          當(dāng)然,在進(jìn)行本文之前,請(qǐng)首先下載Java SE 6.0,詳情請(qǐng)瀏覽野馬奔騰而出,Java SE 6 正式版發(fā)布

          Java Web 涉及到的JSR有 105,173,181,222,224,250。

          由于Web服務(wù)日趨流行,利用Web服務(wù)的功能性的API特征正從最新的Java EE版本中向Java SE 6平臺(tái)遷移。換言之,針對(duì)Web服務(wù)不需另外加入額外的工具,在Java EE和Java SE平臺(tái)擁有相同的API。野馬將大把不同的Web服務(wù)相關(guān)的API加到標(biāo)準(zhǔn)的工具柜中:以JSR 181針對(duì)Java 平臺(tái)的Web服務(wù)元數(shù)據(jù),通過(guò)JSR 224的基于XML 的Web服務(wù)Java API(JAX-WS);針對(duì)Java的帶有附件的SOAP API(SAAJ)作為JSR 67

          與三個(gè)Web服務(wù)API相關(guān)的包新增到Java SE 6.0里JAX-WS API 放置到javax.xml.ws包; SAAJ類在javax.xml.soap 包; Web服務(wù)的元數(shù)據(jù)類放置在javax.jws包里。

          javax.jws

          JSR 181 及其針對(duì)Java 平臺(tái)Web服務(wù)元數(shù)據(jù)的規(guī)范提供一個(gè)在類中利用標(biāo)注設(shè)計(jì)和開(kāi)發(fā)Web服務(wù)的機(jī)制。標(biāo)注從J2SE 5.0引入,在Java SE 6.0得到了進(jìn)一步擴(kuò)展。在第10章將會(huì)完整描述。但是,標(biāo)注基本上允許將@tag加入到類,方法和特性來(lái)描述相關(guān)的元數(shù)據(jù)。一個(gè)解析器然后能定位標(biāo)記并采取適當(dāng)?shù)男袆?dòng);盡管行動(dòng)什么時(shí)候發(fā)生完全依賴于標(biāo)記自身。

          JAX-WS 2.0 很容易使用. 本文將介紹如何使用Java SE 6。以JAX-WS如何建立一個(gè)簡(jiǎn)單的Web服務(wù)。首先建立一個(gè)建立一個(gè)將要作為Web服務(wù)發(fā)布的類,如表1所示:

          Java 代碼 列表1

          package  hello;

          public   class  CircleFunctions  {

             
          public   double  getArea( double  radius)  {
                 
          return  java.lang.Math.PI  *  (r  *  r);
              }


             
          public   double  getCircumference( double  radius)  {
                 
          return   2   *  java.lang.Math.PI  *  r;
             }

          }


          為了輸出這些方法,必需做兩件事情:引入javax.jws.WebService  包;在類的前面增加@WebService  標(biāo)注以告訴Java編譯器將發(fā)布此類為Web服務(wù)。下面的代碼顯示了這種變化(以黑體顯示增加的代碼)。

          Java 代碼 列表2
          package hello;

          import javax.jws.WebService;

          @WebService

          public class CircleFunctions {
             
          public double getArea(double r) {
                 
          return java.lang.Math.PI * (r * r);
              }


             
          public double getCircumference(double r) {
                  
          return 2 * java.lang.Math.PI * r;
              }


          }



          在此,有兩個(gè)基本的標(biāo)注@WebService@WebMethod。@WebService標(biāo)注指明HelloService 類作為Web服務(wù)。如果沒(méi)有制定,標(biāo)注的名稱就是類的名稱。也能制定命名空間,服務(wù)名,WSDL 位置和endpoint 接口等。在指定的上下文環(huán)境中,可以使用javax.xml.ws.Endpoint類publish()靜態(tài)方法發(fā)布上面的類作為Web服務(wù)代碼見(jiàn)列表3:

          Java 代碼 列表3

          import javax.xml.ws.Endpoint;

          public static void main(String[] args) {

                Endpoint.publish(
                   
          "http://localhost:8080/WebServiceExample/circlefunctions",
                   
          new CircleFunctions());
                  
          try {
                      System.in.read();
                  }
           catch (IOException ex) {
                      ex.printStackTrace();
                  }

          }



          現(xiàn)在,用javac編譯源代碼。但是源文件能做什么呢?通過(guò)對(duì)源文件運(yùn)行 javac編譯器進(jìn)行編譯只是產(chǎn)生了class文件。并沒(méi)有產(chǎn)生特殊的東西。但是在編譯類之后,也需要運(yùn)行wsgen 命令行工具(wsgen 是Web service generator的縮寫(xiě))。編譯源代碼后還必需完成更多的步驟:像下面一樣調(diào)用wsgen工具。

          >  wsgen –cp . hello.CircleFunctions

          Wsgen工具將在一個(gè)叫做wsgen子目錄下產(chǎn)生大量的源代碼,然后將這些源代碼編譯成class文件。盡管從未編輯這些文件,但是可以瀏覽這些文件。注意在使用Wsgen工具時(shí),原始的源代碼必需在相應(yīng)的包里。否則將產(chǎn)生錯(cuò)誤。

          就這么簡(jiǎn)單。當(dāng)運(yùn)行應(yīng)用程序時(shí),Java SE 6平臺(tái)擁有一個(gè)小的Web應(yīng)用服務(wù)器,它將在地址為http://localhost:8080/WebServiceExample/circlefunctions 發(fā)布Web服務(wù)。通過(guò)顯示CircleFunction的WSDL 來(lái)驗(yàn)證Web服務(wù)。當(dāng)JVM仍然運(yùn)行時(shí),在瀏覽器輸入:


          如果在瀏覽器里看見(jiàn)大量描述Web服務(wù)的功能的XML代碼,那么Web服務(wù)就成功發(fā)布了。

          評(píng)論

          # re: 感受野馬(Mustang)性情,體會(huì)Java SE 6.0的新特性之二--Web服務(wù)  回復(fù)  更多評(píng)論   

          2006-12-18 08:22 by 壞男孩
          真的方便多了,不用webservice的框架也可以寫(xiě)webservices的程序真爽!

          樓主辛苦了

          # re: 感受野馬(Mustang)性情,體會(huì)Java SE 6.0的新特性之二--Web服務(wù)  回復(fù)  更多評(píng)論   

          2006-12-18 09:37 by 網(wǎng)路冷眼[匿名]
          要不說(shuō)是新特性哪!

          # re: 感受野馬(Mustang)性情,體會(huì)Java SE 6.0的新特性之二--Web服務(wù)  回復(fù)  更多評(píng)論   

          2006-12-18 10:50 by 緋心
          樓主,我照你的方法做了。wsgen –cp . hello.CircleFunctions之后也產(chǎn)生的大量的代碼。但是http://localhost:8080/WebServiceExample/circlefunctions?WSDL卻出不來(lái),why?

          # re: 感受野馬(Mustang)性情,體會(huì)Java SE 6.0的新特性之二--Web服務(wù)  回復(fù)  更多評(píng)論   

          2006-12-18 21:18 by 網(wǎng)路冷眼
          @緋心
          對(duì)不起,原來(lái)未加標(biāo)準(zhǔn)輸入流輸入等待字符輸入,程序執(zhí)行完后立即退出。文章已更正。謝謝提出問(wèn)題。

          # re: 感受野馬(Mustang)性情,體會(huì)Java SE 6.0的新特性之二--Web服務(wù)  回復(fù)  更多評(píng)論   

          2006-12-19 21:25 by 網(wǎng)路冷眼
          @壞男孩
          謝謝!其實(shí)還是有框架的,只不過(guò)Java SE 6.0里帶了個(gè)小的Web服務(wù)器,就不需要笨重的Web Service的容器。有道是“簡(jiǎn)約不簡(jiǎn)單,殺雞焉用牛刀!”

          # re: 感受野馬(Mustang)性情,體會(huì)Java SE 6.0的新特性之二--Web服務(wù)  回復(fù)  更多評(píng)論   

          2006-12-25 22:10 by ws
          樓主,我的程序如下:
          package hello;


          import java.io.IOException;

          import javax.jws.WebMethod;
          import javax.jws.WebService;
          import javax.xml.ws.Endpoint;

          @WebService
          public class CircleFunctions {
          @WebMethod
          public double getArea(double r){
          return java.lang.Math.PI*(r*r);
          }
          public static void main(String[] args) {
          // TODO Auto-generated method stub
          Endpoint.publish("http://localhost:8080/WebServiceExample/circlefunctions", new CircleFunctions());
          try{
          System.in.read();
          }catch(IOException ex){
          ex.printStackTrace();
          }
          }
          }


          wsgen –cp . hello.CircleFunctions之后也產(chǎn)生的大量的代碼。但是http://localhost:8080/WebServiceExample/circlefunctions?WSDL卻出不來(lái),why?
          謝謝。

          # re: 感受野馬(Mustang)性情,體會(huì)Java SE 6.0的新特性之二--Web服務(wù)  回復(fù)  更多評(píng)論   

          2006-12-25 22:18 by 網(wǎng)路冷眼@BlogJava
          然后要執(zhí)行:
          >java hello.CircleFunctions
          由于有標(biāo)準(zhǔn)輸入流等待輸入,程序不會(huì)退出。在后臺(tái)WS 會(huì)一直提供服務(wù)。然后在瀏覽器里面在輸入相應(yīng)的地址就OK!

          # re: 感受野馬(Mustang)性情,體會(huì)Java SE 6.0的新特性之二--Web服務(wù)  回復(fù)  更多評(píng)論   

          2007-01-03 11:50 by 交口稱贊
          客戶端的寫(xiě)法
          請(qǐng)看偶的主頁(yè)
          http://www.aygfsteel.com/vip01/
          主站蜘蛛池模板: 麻江县| 澄迈县| 西林县| 巩义市| 遵义县| 江孜县| 海阳市| 乐业县| 泾阳县| 衡东县| 民权县| 都江堰市| 康乐县| 丁青县| 蒲江县| 黑水县| 类乌齐县| 六盘水市| 安岳县| 洛宁县| 东乌珠穆沁旗| 贵德县| 广水市| 萝北县| 永善县| 金湖县| 德格县| 涿州市| 八宿县| 兴山县| 嘉峪关市| 泰和县| 柳江县| 皮山县| 山阴县| 六枝特区| 德令哈市| 偏关县| 紫云| 绥芬河市| 来安县|