首頁»Java WEB»Web Service入門

                    Web Service入門

                    來源:jobbole 發布時間:2012-10-16 閱讀次數:

                      1. Web Service的定義

                      目前對Web Service沒有統一的定義,定義一:Web Service是自包含的、模塊化的應用程序,它可以在Web中被描述、發布、查找以及調用。定義二:Web Service是基于網絡的、分布式的模塊化組件,它執行特定的任務,遵守具體的技術規范,這些規范使得Web Service能與其他兼任的組件進行操作。定義三:所謂Web Service是指由企業發布的完成其特別商務需求的在線應用服務,其他公司或應用軟件通過Internet來訪問并使用這項應用服務。筆者比較喜歡維基百科的定義:Web Service是一種面向服務的架構的技術,通過標準的Web協議提供服務,目的是保證不同平臺的應用服務可以互操作。

                      目前對WebService還沒有絕對全面和準確的定義,但是一般Web Service通常包括:

                      SOAP

                      一個基于XML的可擴展消息信封格式,需同時綁定一個傳輸協議。這個協議通常是HTTP或HTTPS、SMTP、XMPP。

                      WSDL

                      一個XML格式文檔,用以描述服務端口訪問方式和使用協議的細節。通常用來輔助生成服務器和客戶端代碼及配置信息。比如JAVA語言的wsdl2java 工具。

                      UDDI

                      一個用來發布和搜索WEB服務的協議,應用程序可借由此協議在設計或運行時找到目標WEB Service。

                      2. 使用Web Service的方式

                      遠端過程調用

                      Web Service提供一個分布式函數或方法接口供用戶調用,這是一種比較傳統的方式。通常,在WSDL中對RPC接口進行定義。盡管最初的Web Service廣泛采用RPC這種方式部署,但是針對其過于緊密之耦合性的批評聲也絡繹不絕。原因是RPC式的Web Service服務是利用一個簡單的映射,把用戶請求直接轉換為一個特定語言編寫的函數或方法。

                      面向服務架構

                      相比RPC式的Web Service,面向服務架構(SOA)得到了大部分主要軟件供應商以及業界專家的支持和肯定。因為SOA方式更加關注如何去連接服務而不是去特地某個實現的細節。

                      REST式服務

                      表達性狀態轉移(Representational state transfer,REST)類似于HTTP協議,REST把接口限定在一組HTTP操作中,比如GTP、PUT、DELETE等以供調用,此種服務可以通過WSDL來描述SOAP消息內容,通過HTTP限定動作接口;或者完全在SOAP中對動作進行抽象。

                      3. HelloWorld

                      筆者將使用Apache Cxf官網的How To示例來實現helloworld和后續的示例,并且筆者將使用maven工具來構建示例項目。關于cxf及maven請參考官網http://cxf.apache.orghttp://maven.apache.org。(示例使用maven構建項目pom.xml)

                      編寫Web Service

                      HelloWorld.java

                    @WebService
                     public interface HelloWorld {
                     String sayHi(@WebParam(name=”text”) String text); //這里的text為輸入參數
                     }

                      HelloWorldImpl.java

                    package demo.hw.server;
                     import java.util.LinkedHashMap;
                     import java.util.Map;
                     import javax.jws.WebService;
                     @WebService(endpointInterface = “demo.hw.server.HelloWorld”, serviceName = “HelloWorld”)
                     public class HelloWorldImpl implements HelloWorld {
                     public String sayHi(String text) {
                     System.out.println(“sayHi called”);
                     return “Hello ” + text;
                     }
                     }

                      發布服務

                      Server.java

                    System.out.println(“Starting Server”);
                     HelloWorldImpl implementor = new HelloWorldImpl();
                     String address = “http://localhost:9000/helloWorld”; //發布地址
                     Endpoint.publish(address, implementor);

                      訪問Web Service

                      Client.java

                    JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
                     factory.getInInterceptors().add(new LoggingInInterceptor());
                     factory.getOutInterceptors().add(new LoggingOutInterceptor());
                     factory.setServiceClass(HelloWorld.class);
                     factory.setAddress(“http://localhost:9000/helloWorld”); //地址為以上發布的地址
                     HelloWorld client = (HelloWorld) factory.create();
                     String reply = client.sayHi(“HI”);
                     System.out.println(“Server said: ” + reply);
                     System.exit(0);

                      3. XML與JSON

                      兩者都是Web Service資源表示方式,直白點說,就是Web Service將以兩者之一來請求或者返回結果。它們定義如下:

                      1. JSON 一種輕量級的數據交換格式,具有良好的可讀性和便于快速編寫的特性。另外,JSON采用的兼容性很高的文本格式。

                      2. XML 擴展標記語言,用于標記電子文件使其具有結構性的標記語言,可以用來標記數據、定義數據類型,是一種允許用戶對自己的標記語言進行定義的源語言。XML、非常適合Web傳輸,其提供了一種統一方法來描述和交換獨立于應用程序或供應商的結構化數據。

                      XML與JSON優缺點比較:

                      1. 可讀性 兩者不相上下,JSON格式{property1:value1,property2:value2,…},XML格式value1value2。在描述上,XML要優于JSON。

                      2. 可擴展性 這點XML可以做的,JSON也可以。

                      3. 數據大小 這點JSON要優于XML,但是差別不是太大。

                      4. 使用范圍 XML目前被業界廣泛采用,而javascript語言對JSON支持要比XML優越。

                      5. 性能 經測試,JSON的解析速度幾乎是XML解析的10倍。

                      4. CXF與Spring框架集成

                      假定使用Maven來構建項目,pom.xml

                      編寫Web Service

                      HelloWorld.java

                    package demo.spring.service;
                     import javax.jws.WebService;
                     @WebService public interface HelloWorld {
                     String sayHi(String text);
                     }

                      接口實現類HelloWorldImpl.java

                    package demo.spring.service;
                     import javax.jws.WebService;
                     @WebService(endpointInterface = “demo.spring.service.HelloWorld”)
                     public class HelloWorldImpl implements HelloWorld {
                     public String sayHi(String text) {
                     System.out.println(“sayHi called”);
                     return “Hello ” + text;
                     }
                     }

                      在項目的WEB-INF目錄下新建一個”cxf-servlet.xml”文件,內容:

                      另外還需要設置Servlet。一般,Web項目中都會有一個Web.xml文件,我們需要添加Spring ContextLoaderLister元素。當Web容器啟動時,將由Spring ContextLoaderLister來啟動Srping,并且加載配置文件。這些配置文件是通過context-param元素來定義的。

                      …

                    contextConfigLocation WEB-INF/beans.xml //配置文件
                    org.springframework.web.context.ContextLoaderListener

                      最后在上述的beans.xml在創建客戶端。

                      這里可以選擇將”helloClient” 注入到Srping bean中,或者采用手動的方式從Spring application context中查找:

                    ApplicationContext context = …; // your Spring ApplicationContext
                     HellWorld client = (HelloWorld) context.getBean(“helloClient”);

                      來自:http://blog.jobbole.com/29195/

                    QQ群:WEB開發者官方群(515171538),驗證消息:10000
                    微信群:加小編微信 849023636 邀請您加入,驗證消息:10000
                    提示:更多精彩內容關注微信公眾號:全棧開發者中心(fsder-com)
                    網友評論(共1條評論) 正在載入評論......
                    理智評論文明上網,拒絕惡意謾罵 發表評論 / 共1條評論
                    登錄會員中心
                    福彩试机号今天 广东好彩1最快开奖结果查询 藏宝图猜一生肖 新浪彩票图表走势图 排列五走势图(2019年) 福彩3d跨度走势图彩吧助手 河北体彩福彩开奖结果今天开奖结果查询 福彩福建快3开奖结果查询今天 福建36选7兑奖规则 彩票双色球16007大奖号 山西快乐十分软件哪个好用 中彩票不捐款 陕西十一选五开奖结果查询今天 喜乐彩包围复选82 连云港体育彩票销售额 大乐透走势图机选