WebService手写简单案例:客户端与服务端的数据交互

版权声明:本文为博主原创文章,版权归原作者小思所有,转载或者引用本文内容请注明来源及原作者,https://blog.csdn.net/zeal9s/ https://blog.csdn.net/zeal9s/article/details/83051780

本篇博客是模拟服务端发布服务,客户端模拟接收服务端的返回数据的一个简单案例(客户端输入姓名,服务端根据客户端输入的姓名模糊查询身份证的案例)
在这里插入图片描述

服务端发布服务

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);
	}
}

客户端控制台显示:

在这里插入图片描述

服务端的控制台显示:

在这里插入图片描述

代表客户端获取服务端的数据成功!

说在最后的话:编写实属不易,若喜欢或者对你有帮助记得点赞+关注或者收藏哦~

猜你喜欢

转载自blog.csdn.net/zeal9s/article/details/83051780