什么是WebService
WebService是一種跨編程語言和跨操作系統平台的遠程調用技術。是通過SOAP在Web上提供的軟件服務,使用WSDL文件進行說明,並通過UDDI進行注冊。
- SOAP (簡易對象訪問協議);
- UDDI (通用描述、發現及整合);
- WSDL (Web services 描述語言)。
比如現在需要使用第三方公司的短信服務,使用WebService來調用它的服務,只需要第三方公司提供一個接口調用文檔和WebService地址,就能根據文檔地址編程去調用它開放的短信服務,發送短信。
基礎的 Web Services平台是 XML + HTTP。HTTP 協議是最常用的因特網協議。XML 提供了一種可用於不同的平台和編程語言之間的語言。
建立服務端
首先創建新的工程。
再創建一個新的模塊即一個簡單的java項目。

然后創建三個包,分布是寫接口、接口實現類、入口類的代碼(手動刪除系統自動生成的example代碼)。

代碼如下:
package com.asu.service;
import javax.jws.WebService;
@WebService
public interface IHello {
public String sayHello(String name);
}
package com.asu.impl;
import com.asu.service.IHello;
import javax.jws.WebService;
@WebService
public class HelloImpl implements IHello {
public String sayHello(String name) {
String strSay = "Hello"+name; return strSay;
}
}
package com.asu.main;
import com.asu.impl.HelloImpl;
import javax.xml.ws.Endpoint;
public class WebService {
public static void main(String[] args) {
String address = "http://127.0.0.1:9001/Service/ServiceTest";
Endpoint.publish(address, new HelloImpl());
System.out.println("service success");
}
}
右鍵運行WebService.java的main主方法(之后一直保持運行狀態,不要關閉)。

在瀏覽器的地址欄中輸入WebService入口類文件中定義的address地址(http://127.0.0.1:9001/Service/ServiceTest?wsdl),注意,要在地址后面加上 “?wsdl”。那么如果出現了下圖類似的界面,那么就說明WebService發布成功。

建立客戶端
接下來,我們就要實現在本地調用這個遠程接口。
在本地再新建一個普通的 Java Project 項目。

在彈出的選項框中的填寫上一步在瀏覽器地址欄中填寫的URL。

點擊完成,系統會自動為我們創建一些必要的類(手動刪除系統自動生成的example代碼)。
紅框圈起來的是系統創建的類,我們需要自己在創建一個類(WebServiceClientTest.java)來實現這些調用這些新創建的類,以到達調用接口的目的。

代碼如下:
package com;
public class WebServiceClientTest {
public static void main(String[] args) throws Exception {
HelloImpl test = new HelloImplServiceLocator().getHelloImplPort();
String message = test.sayHello("調用者");
System.out.println(message);
}
}
結果
運行結果如下:

log4j報錯解決辦法(百度):在配置文件log4j.properties(文件名必須這個,放在resources目錄) 全選粘貼如下代碼:
# Global logging configuration 開發時候建議使用 debuglog4j.rootLogger=DEBUG, stdout# Console
output...log4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
