1. 程式人生 > >WebService手寫簡單案例:客戶端與服務端的資料互動

WebService手寫簡單案例:客戶端與服務端的資料互動

本篇部落格是模擬服務端釋出服務,客戶端模擬接收服務端的返回資料的一個簡單案例(客戶端輸入姓名,服務端根據客戶端輸入的姓名模糊查詢身份證的案例)
在這裡插入圖片描述

服務端釋出服務

1.專案準備工作:新建一個web專案,匯入mysql的jar包放入工程,寫好jdbc連線,寫好實體類,寫dao,不同的是新建一個包,叫做webservice包,裡面放的是你需要釋出的服務介面和它的實現類,下面是我的專案模組x
在這裡插入圖片描述
詳細程式碼如下,如果要整個專案,請在https://download.csdn.net/download/zeal9s/10720381下載
IDCARDDao.java

package com.server.
dao; /** * * @ClassName: IDCARDDao * @Description:通過姓名模擬查詢身份證資訊 * @author 小思 * @date 2018年10月12日 上午11:13:59 * */ import java.sql.Connection; import java.sql.ResultSet; import java.sql.Statement; import java.util.ArrayList; import java.util.List; import com.server.entity.IDCARD; import com.server.util.
BaseDao; public class IDCARDDao { /** * * @Title: find * @Description:通過姓名模擬查詢身份證資訊 * @param name * @return * @return IDCARD */ public List<IDCARD> find(String name) { List<IDCARD> list = new ArrayList<>(); try { // 連線資料庫 Connection con = BaseDao.getConnection
(); // 執行查詢 Statement statement = con.createStatement(); ResultSet resultSet = statement.executeQuery("select * from IDCARD where name like '%" + name + "%'"); while (resultSet.next()) { IDCARD idcard = new IDCARD(); idcard.setId(resultSet.getInt(2)); idcard.setName(resultSet.getString(1)); idcard.setSex(resultSet.getString(3)); idcard.setBirthday(resultSet.getString(4)); idcard.setAddress(resultSet.getString(5)); idcard.setNumber(resultSet.getString(6)); list.add(idcard); } } catch (Exception e) { e.printStackTrace(); } return list; } //測試連線 // public static void main(String[] args) { // IDCARDDao id = new IDCARDDao(); // List<IDCARD> list=id.find("嚴"); // System.out.println(list.size()); // } } ```java **IDCARD.java** package com.server.entity; /** * * @ClassName: IDCARD * @Description:身份證實體類 * @author 小思 * @date 2018年10月12日 上午11:15:14 * */ public class IDCARD { private Integer id; private String name; private String sex; private String birthday; private String address; private String number; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public String getBirthday() { return birthday; } public void setBirthday(String birthday) { this.birthday = birthday; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String getNumber() { return number; } public void setNumber(String number) { this.number = number; } public IDCARD(Integer id, String name, String sex, String birthday, String address, String number) { super(); this.id = id; this.name = name; this.sex = sex; this.birthday = birthday; this.address = address; this.number = number; } public IDCARD() { super(); } }

Test.java

package com.server.test;

import java.util.Map;
import java.util.SortedMap;

import javax.xml.ws.Endpoint;

import com.server.webservice.WebserviceImpl;

/**
 * 
 * @ClassName: Test
 * @Description:釋出服務的測試類
 * @author 小思
 * @date 2018年10月12日 下午8:48:59
 *
 */
public class Test {
	public static void main(String[] args) {
		/**
		 * Endpoint:Web 服務端點
		 * 端點要麼處於已釋出狀態,要麼處於未釋出狀態。
		 * 可以使用 publish方法開始釋出端點,此時端點開始接受傳入請求。
		 * 相反,可以使用 stop 方法停止接受傳入請求並取消端點。一旦停止,就不能再次釋出該端點。
		 * address:釋出端點的給定地址處 
		 * implementor:釋出端點的指定的實現者
		 * 埠號建議大於10000
		 **/
		Endpoint.publish("http://192.168.43.21:10087/IDCARD.do", new WebserviceImpl());
		System.out.println("恭喜服務端釋出服務成功");
	}

}

BaseDao.java

package com.server.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

/**
 * 
 * @ClassName: BaseDao
 * @Description:連線MySQL的幫助類
 * @author 小思
 * @date 2018年10月12日 上午10:35:05
 *
 */

public class BaseDao {

	/**
	 * 
	 * @Title: getConnection
	 * @Description:連線資料庫
	 * @return
	 * @return Connection
	 */
	public static Connection getConnection() {
		Connection con = null;
		String url = "jdbc:mysql://localhost:3306/webservice_server?user=root&password=1234&useUnicode=true&characterEncoding=UTF8";
		try {
			Class.forName("com.mysql.jdbc.Driver");
			con = DriverManager.getConnection(url);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return con;
	}

	/**
	 * 
	 * @Title: close
	 * @Description:關閉資料庫,釋放資源
	 * @param connection
	 * @param resultSet
	 * @param statement
	 * @return void
	 */
	public static void close(Connection connection, ResultSet resultSet, Statement statement) {

		try {
			if (resultSet != null) {
				resultSet.close();
			}
			if(statement!=null) {
				statement.close();
			}
			if(connection!=null) {
				connection.close();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}

Webservice.java(注意:在需要釋出的類前面,要開啟@WebService註解)

package com.server.webservice;

import javax.jws.WebMethod;
import javax.jws.WebService;
/**
 * 
* @ClassName: Webservice
* @Description:釋出的專案的介面
* @author 小思
* @date 2018年10月12日 上午11:59:13
*
 */
@WebService
public interface Webservice {
	/**
	 * 
	* @Title: test
	* @Description:啟用註解,釋出專案
	* @return void
	 */
	@WebMethod
	public String test(String name);

}

WebserviceImpl.java(注意:在需要釋出的類前面,要開啟@WebService註解)

package com.server.webservice;

import java.util.ArrayList;
import java.util.List;

import javax.jws.WebService;

import com.server.dao.IDCARDDao;
import com.server.entity.IDCARD;
/**
 * 
* @ClassName: WebserviceImpl
* @Description:釋出的專案的介面實現類
* @author 小思
* @date 2018年10月12日 上午11:58:54
*
 */
@WebService
public class WebserviceImpl implements Webservice {

	@Override
	public String test(String name) {
		System.out.println("歡迎您呼叫我們的業務介面");
		IDCARDDao id = new IDCARDDao();
		List<IDCARD> list = new ArrayList<>();
		list = id.find(name);
		//如果查詢不為空
		if (list.size() == 0) {
			System.out.println("已查詢,沒有此人的資訊");
		} else {
			System.out.println("根據您填寫的名字,已查詢到下列資訊:");
			System.out.println("姓名		性別                 出生年月                     身份證號碼                      地址");
			for (IDCARD idcard : list) {
				System.out.println(idcard.getName() + "	" + idcard.getSex() + "         " + idcard.getBirthday()
						+ "       " + idcard.getNumber() + "       " + idcard.getAddress());
			}
		}
		return "服務端查到的資料的條數:"+list.size();

	}
	
	

}

程式碼如上,完整專案可從https://download.csdn.net/download/zeal9s/10720381下載
2.測服務是否釋出成功:準備工作做完了,然後進入webservice的瀏覽器測試,點選下面的圖示
在這裡插入圖片描述
然後點選
在這裡插入圖片描述
然後會出現
在這裡插入圖片描述
然後點選go
然後點選它的test方法,我傳了一個引數,點選Add,在文字框輸入“嚴”,然後服務端就能查詢到姓名中包含“嚴”的身份證資訊
在這裡插入圖片描述
服務端釋出服務成功

客戶端接收服務端傳送的資訊

1.準備工作:建好客戶端的專案WebService_client,注意客戶端在獲取資料的時候,控制檯的服務不能停止,還有客戶端和服務端在同一個區域網下
2.將服務端釋出的服務介面和相應的方法,生成程式碼到WebService_client專案的src的檔案下。找到WebService_client專案存放的路徑,然後進入src資料夾下,按住shift,然後右鍵,在此處開啟命令視窗,輸入wsimport -keep http://192.168.43.21:10087/IDCARD.do?wsdl(備註:這個地址就是你服務端釋出服務的訪問地址+?wsdl)
在這裡插入圖片描述
然後回車,程式碼就會自動生成,去eclipse重新整理專案

在這裡插入圖片描述
新建的是全新的專案 什麼都沒有,重新整理即可,就會包含服務端釋出的服務的相關類解析檔案
在這裡插入圖片描述

2.新建TestWsdl.java,測試服務端的資料是否能獲取

先去瀏覽器瀏覽http://192.168.43.21:10087/IDCARD.do?wsdl這個瀏覽器定義語言的檔案,我們要去獲取服務端釋出的服務的名稱,在測試類獲取到服務類,一般看的順序是從下往上,找到這個name裡面的值就是服務的名稱
在這裡插入圖片描述

然後編寫完TestWsdl.java執行

package com.server.webservice;
/**
 * 
* @ClassName: TestWsdl
* @Description:測試服務端的資料是否能獲取
* @author 小思
* @date 2018年10月14日 下午10:05:05
*
 */
public class TestWsdl {

	public static void main(String[] args) {
		//獲取服務端釋出的服務
		WebserviceImplService service=new WebserviceImplService();
		//獲取服務類的介面
		WebserviceImpl webserviceImplPort = service.getWebserviceImplPort();
	    //通過介面獲取它的方法
		String out=webserviceImplPort.test("嚴");
		System.out.println(out);
	}
}

客戶端控制檯顯示:

在這裡插入圖片描述

服務端的控制檯顯示:

在這裡插入圖片描述

代表客戶端獲取服務端的資料成功!

說在最後的話:編寫實屬不易,若喜歡或者對你有幫助記得點贊+關注或者收藏哦~