前言
今天主要和大家分享搭建java版webservice,以及php調用webservice遇到的一些坑。博客內容大部分純手打,純親測。
注:網上有很多使用Eclipse構建webservice的教程,不過配置較麻煩,而且最後可能還訪問不了。因此,此博客採用MyEclipse搭建。需注意一點,MyEclipse10及以下的支持不了pattern庫,因此發佈的項目如果包含Pattern則無法支持,這也是博主換IDE的原因。
#說明
開發環境:MyEclipse2014,JAX-WS構建(容易使用),Tomcat 7
何爲WebService?
它是一種構建應用程序的普遍模型,可以在任何支持網絡通信的操作系統中實施運行;它是一種新的web應用程序分支,是自包含、自描述、模塊化的應用,可以發佈、定位、通過web調用。 WebService 是一個應用組件,它邏輯性的爲其他應用程序提供數據與服務.各應用程序通過網絡協議和規定的一些標準數據格式(Http,XML,Soap)來訪問 WebService ,通過 WebService 內部執行得到所需結果. WebService 可以執行從簡單的請求到複雜商務處理的任何功能。一旦部署以後,其他 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);
}
}
?>
總結
好了,今天的教程就說到這裏了<( ̄︶ ̄)>
當然了,之所以想分享是因爲其中是有一些坑在,搞了一天多才搞定了。歡迎大家交流~~