兩個項目之間遠程調(diào)用方法接口:
流程:
1. 顯示服務(wù)端,在服務(wù)端自定義接口存崖,加上@WebService
2. 接口中可以寫很多方法,方法上加@WebMethod
3. 寫實現(xiàn)類接口
4. 自定義 你能訪問到方法的地址http://ip:端口號/具體的方法
5. 創(chuàng)建好客戶端使用cmd命令切到這個客戶端的src下輸入
wsimport -keep -p com.zlt.service -verbose 具體的發(fā)布地址?wsdl
6. 寫調(diào)用客戶端的方法 用ws命令創(chuàng)建一個xxxImplService類链沼,這個類類似于一個工廠類
7.從工廠類里面具體調(diào)用實現(xiàn)類的接口
8.調(diào)用你在服務(wù)端(service)里面的具體實現(xiàn)的方法
- 以下面兩個項目(web_controller和web_service)為例内颗,實現(xiàn)web_controller調(diào)web_service中的方法接口
1捻激、項目最終目錄結(jié)構(gòu)
2制轰、實現(xiàn)步驟
新建一個普通的 Java 項目 web_service
- 項目的結(jié)構(gòu)如 圖1-1,先新建一個接口
LoginService.java
:
package com.zlt.service;
import javax.jws.WebMethod;
import javax.jws.WebService;
@WebService
public interface LoginService {
@WebMethod
public String login(String username , String password);
}
- 再新建這個接口的實現(xiàn)類
LoginServiceImpl.java
:
package com.zlt.service.impl;
import javax.jws.WebService;
import com.zlt.service.LoginService;
@WebService
public class LoginServiceImpl implements LoginService{
@Override
public String login(String username, String password) {
if("chen".equals(username) && "123".equals(password))
return "success";
return "failed";
}
}
接口和實現(xiàn)類上都要用注解@WebService
胞谭,但只有接口的方法上才需要用注解@WebMethod
- 在publish_test包下新建發(fā)布的測試類
Publish_Test.java
:
package com.zlt.publish_test;
import javax.xml.ws.Endpoint;
import com.zlt.service.impl.LoginServiceImpl;
public class PublishTest {
public static void main(String[] args) {
String address = "http://127.0.0.1:10086/service/login";
Endpoint.publish(address, new LoginServiceImpl());
System.out.println("發(fā)布成功");
}
}
這里是先設(shè)定一個發(fā)布地址垃杖,由 ip + port + 自定義路徑 構(gòu)成,等會的web_controller項目就從這個地址調(diào)方法丈屹。然后通過javax.xml.ws.Endpoint的publish方法將接口從這個地址發(fā)布出去调俘,這里用了代理模式,用接口將new的一個實現(xiàn)類代理出去旺垒。
- 先將第一個項目跑一下彩库,控制臺打印:
發(fā)布成功
此時復(fù)制發(fā)布地址http://127.0.0.1:10086/service/login
,打開瀏覽器先蒋,粘貼到地址欄骇钦,并在后面加上?wsdl
,也就是http://127.0.0.1:10086/service/login?wsdl
竞漾,訪問此地址眯搭,可以看到該接口方法信息以一種類似于xml的形式發(fā)布到了指定地址:
新建一個普通的 Java 項目 web_controller
項目的結(jié)構(gòu)如 圖1-1,先將目錄結(jié)構(gòu)(com.zlt)建好
-
然后查看本項目地址业岁,復(fù)制下來:
項目地址 打開cmd命令行鳞仙,進入到該項目的src目錄下,以以下格式輸入命令符:
wsimport -keep -p 文件目錄 -verbose 發(fā)布地址?wsdl
在這個demo中笔时,命令符應(yīng)該為
wsimport -keep -p com.zlt.service -verbose http://127.0.0.1:10086/service/login?wsdl
片刻后棍好,web_service 項目的接口等數(shù)據(jù)就存到了web_controller的指定目錄下,具體命令行流程如圖所示:
此時可以看見web_controller項目的com.zlt.service包下多了6個java文件糊闽,說明接口導(dǎo)入成功了梳玫。
- 最后新建
LoginControllerTest.java
進行測試:
package com.zlt.controller;
import com.zlt.service.LoginServiceImpl;
import com.zlt.service.LoginServiceImplService;
public class LoginControllerTest {
public static void main(String[] args) {
LoginServiceImplService factory = new LoginServiceImplService();
LoginServiceImpl loginServiceImpl = factory.getLoginServiceImplPort();
System.out.println(loginServiceImpl.login("chen", "123"));
}
}
測試代碼中,LoginServiceImplService類可以看做一個工廠類右犹。
將測試類跑起來(之前的web_service項目不能停下來提澎,如果停了要將其啟動后才能跑web_controller項目),控制臺打幽盍础:
success
- 可以看到web_controller項目成功調(diào)用了web_service中的方法盼忌,得到了正確的返回值积糯。