本篇博客是模拟服务端发布服务,客户端模拟接收服务端的返回数据的一个简单案例(客户端输入姓名,服务端根据客户端输入的姓名模糊查询身份证的案例)
服务端发布服务
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);
}
}
客户端控制台显示:
服务端的控制台显示:
代表客户端获取服务端的数据成功!
说在最后的话:编写实属不易,若喜欢或者对你有帮助记得点赞+关注或者收藏哦~