webservice:(1)新手搭建呼叫webservice那些坑
前言
今天主要和大家分享搭建java版webservice,以及php呼叫webservice遇到的一些坑。部落格內容大部分純手打,純親測。
注:網上有很多使用Eclipse構建webservice的教程,不過配置較麻煩,而且最後可能還訪問不了。因此,此部落格採用MyEclipse搭建。需注意一點,MyEclipse10及以下的支援不了pattern庫,因此釋出的專案如果包含Pattern則無法支援,這也是博主換IDE的原因。
說明
開發環境:MyEclipse2014,JAX-WS構建(容易使用),Tomcat 7
何為WebService?
它是一種構建應用程式的普遍模型,可以在任何支援網路通訊的作業系統中實施執行;它是一種新的web應用程式分支,是自包含、自描述、模組化的應用,可以釋出、定位、通過web呼叫。 WebService
關鍵的技術和規則
在構建和使用Web Service時,主要用到以下幾個關鍵的技術和規則:
- XML:描述資料的標準方法.
- SOAP:表示資訊交換的協議.
- WSDL:Web服務描述語言.
- UDDI:通用描述、發現與整合,它是一種獨立於平臺的,基於XML語言的用於在網際網路上描述商務的協議.
XML
可擴充套件的標記語言(XML)是Web service平臺中表示資料的基本格式。除了易於建立和易於分析外,XML主要的優點在於它既是平臺無關的,又是廠商無關的。無關性是比技術優越性更重要的:軟體廠商是不會選擇一個由競爭對手所發明的技術的。
SOAP
SOAP是web service的標準通訊協議,SOAP為simple object access protocoll的縮寫,簡單物件訪問協議. 它是一種標準化的傳輸訊息的XML訊息格式。
WSDL
WSDL的全稱是web service Description Language,是一種基於XML格式的關於web服務的描述語言。其主要目的在於web service的提供者將自己的web服務的所有相關內容,如所提供的服務的傳輸方式,服務方法介面,介面引數,服務路徑等,生成相應的完全文件,釋出給使用者。使用者可以通過這個WSDL文件,建立相應的SOAP請求訊息,通過HTTP傳遞給webservice提供者;web服務在完成服務請求後,將SOAP返回訊息傳回請求者,服務請求者再根據WSDL文件將SOAP返回訊息解析成自己能夠理解的內容。
UDDI
將web service進行UDDI註冊釋出,UDDI是一種建立登錄檔服務的規範,以便大家將自己的web service進行註冊釋出供使用者查詢.然而當服務提供者想將自己的web service向全世界公佈,以便外部找到其服務時,那麼服務提供者可以將自己的web service註冊到相應的UDDI商用註冊網站,目前全球有IBM等4家UDDI商用註冊網站。因為WSDL檔案中已經給定了web service的地址URI,外部可以直接通過WSDL提供的URI進行相應的web service呼叫。所以UDDI並不是一個必需的web service元件,服務方完全可以不進行UDDI的註冊。
具體例項
(一) 開始搭建webservice
前提
首先安裝好MyEclipse2014,保證jdk環境配置好了,有tomcat伺服器(沒有也沒關係,MyEclipse自帶MyEclipse Tomcat 7,親測好用,預設埠為8080)。
- 建立釋出webservice
- 配置Tomcat
- 部署專案並啟動Tomcat伺服器
- 新增JAX-WS庫
- 測試webservice
編碼
1. 建立釋出webservice
新建Web Service Project
然後填好資訊並next
然後接下來一直next,可選擇生成web.xml.
這是剛新建的專案結構
2. 然後新建一類檔案UserInfo.java
示例原始碼:
package com.yuan.webservice;
/**
*
* @author Joryun
*
*/
public class UserInfo {
public String GetUserInfo(){
return "源哥";
}
public String ParameterTest(String user, String pwd){
return user+":"+pwd;
}
}
3. 接下來發布web service
4. 選擇從java類建立web service
5. 選擇訪問的java class
6. 生成WSDL(WSDL以上有介紹,不懂可以回去看)
7. 釋出後的專案結構如下
(二) 配置Tomcat
前提
假定你需要使用自己本機Tomcat的情況下
過程
Window-Preferences-MyEclipse-Servers-Tomcat
配置好後Apply-OK.
部署專案並啟動Tomcat伺服器
部署此專案到伺服器
選擇完後Finish
接下來啟動Tomcat伺服器
伺服器已啟動的圖例
新增JAX-WS庫
在專案的構建路徑中新增庫檔案
測試webservice
輸入URL,出現圖式效果即為釋出成功.
http://localhost:8080/WebServiceDemo/UserInfoPort?wsdl
PHP呼叫webservice
說明
博主採用CI框架測試,但不用框架也一樣。並且php專案檔案釋出到了xampp上,直接訪問本地即可檢視效果。
關於php呼叫webservice,親測過兩種方法:
1. 引入nusoap.php,呼叫call()方法
2. php5自帶函式測試,classMap方式傳值
1. 引入nusoap.php,呼叫call()方法
特別注意:以下兩處圈紅圈的是坑點,一開始測試的時候用的是webservice介面名的引數,即user,pwd.但實際上列印到網頁上之後才發現引數是arg0和arg1。。。
2. php5自帶函式測試,classMap方式傳值
以下貼PHP實現原始碼:
<?php
header('Content-Type: text/html; charset=UTF-8');
/**
* Class Test
* Joryun
*
* 呼叫webservice測試類
*/
class Test extends CI_Controller
{
public function __construct()
{
parent::__construct();
}
public function index()
{
/**
* nusoap.php需在網上下載,並將該php檔案包含進專案空間
* 引入nusoap.php,呼叫call()方法
*/
// require_once ("libs/nusoap.php");
//
// // Create the client instance
// $client = new nusoap_client('http://localhost:8080/WeixinDemo/UserInfoPort?wsdl', true);
// $client->soap_defencoding = 'utf-8';
// $client->decode_utf8 = false;
// $client->xml_encoding = 'utf-8';
//
// $param = array('arg0'=>'Joryun', 'arg1'=>'666666');//webservice引數陣列
// $result = $client->call('ParameterTest', $param);//介面和引數
// print_r($result);
/**
* php5自帶函式測試
* classMap方式傳值
*/
$client = new SoapClient("http://localhost:8080/WeixinDemo/UserInfoPort?wsdl");
echo ("SOAP伺服器提供的開放Function:");
echo '<pre>';
var_dump ( $client->__getFunctions () );//獲取伺服器上提供的方法
echo '</pre>';
echo '<br>';
echo ("SOAP伺服器提供的Type:");
echo '<pre>';
var_dump ( $client->__getTypes () );//獲取伺服器上資料型別
echo '</pre>';
$object=new stdclass;
$object->arg0='Joryun';
$object->arg1='666666';
$result = $client->ParameterTest($object);
//$result=get_object_vars($result); //將object轉換為array
var_dump($result);
}
}
?>
總結
好了,今天的教程就說到這裡了<( ̄︶ ̄)>
當然了,之所以想分享是因為其中是有一些坑在,搞了一天多才搞定了。歡迎大家交流,有啥指導直說無妨哈哈哈哈~~
程式設計是一門事業。互勵共勉!!!