关于WebService技术的应用开发
2016-01-31 16:37
399 查看
这段时间自己一直在琢磨如何远程调用服务,我有个项目就是需要同步数据,通俗点就是把这个数据库里的数据搬到别的地方的数据库里,因此我使用WebService来调用服务。
在使用WebService需要以下几个步骤:
1.WebService的服务接口,供客户端调用。
@javax.jws.WebService //WebService接口的注解
public class DoWebService {
@Resource
private WebServiceContext wsContext;
public String doServiceFace(String name) {
return "你好,欢迎来到服务端,"+name;
}
public String getClientInfo() {
MessageContext mc = wsContext.getMessageContext();
HttpExchange exchange = (HttpExchange) mc .get(JAXWSProperties.HTTP_EXCHANGE);
InetSocketAddress isa = exchange.getRemoteAddress();
String IP = isa.getAddress().getHostAddress();
System.out.println("当前的IP:" + IP);
}
}
解析:我这里的代码是很简单的,在这里只需要讲几点:
a.在类的顶部加上@javax.jws.WebService 注解,声明这是个WebService的接口。
b.服务端接收数据,类型是一个String类型,这里关于网络传数据比较建议用XML。
c.在接收到数据时,进行处理,返回数据给客户端。同样也是String类型。
d.在这里这些都是需要被客户端调用的接口,接收到什么和返回什么都是通过这个入口来实现的。
e.处理数据的过程,我在项目中主要用到的是Spring+ibatis来进行数据同步。注意:使用类的时候,spring的注入应该用静态的注入方式。只需要将接收到的数据交给 Spring+ibatis来处理。也就是在这个接口里调用别的类来处理。
f.getClientInfo()为获取正在调用服务的客户端IP地址。可以用它来记录谁访问过我。
g.浏览器中执行http://localhost:8080/Service/DoWebService?WSDL 看是否页面上显示XML数据。
2.发布WebService。
public class StartWebService extends ActionSupport {
private static final long serialVersionUID = 1L;
@Override
public String execute() throws Exception {
System.out.println("程序已经开始执行了。。。。。");
Endpoint.publish("http://168.7.109.9:8080/Service/DoWebService", new DoWebService());
System.out.println("service success!");
return "success";
}
}
我的这个是使用action来发布的,同样你也可以使用main方法来发布,都是可以的。在浏览器中通过请求执行下这段代码就可以了
3.客户端接入。
需要在cmd中使用wsimport来执行。
其命令是:wsimport -s C:\Users\cyl\workspace\WebServiceClient\src
-p com.xyyh.client -keep http://168.7.109.16:8080/Service/WebService?WSDL 必须服务端启用才可以执行。
a.C:\Users\cyl\workspace\WebServiceClient\src指的是客户端项目src的路径,将WebService接口类引入过来,供客户端调用。
b.-p com.xyyh.client在客户端的src下生成一个com.xyyh.client包,将WebService类全放在该包下。
c.-keep http://168.7.109.16:8080/Service/DoWebService ?WSDL 连接WebService的地址。这里面有几个参数是不一样的,DoWebService 为接口名称,ip地址是不同的。
4.客户端的调用。
public class test {
public void dotest(){
DoWebService ws = new DoWebServiceService().getDoWebServicePort();
String hz = ws.doServiceFace("张三");
System.out.println(hz);
}
}
5.最后的结果是:
控制台输出:你好,欢迎来到服务端,张三
在使用WebService需要以下几个步骤:
1.WebService的服务接口,供客户端调用。
@javax.jws.WebService //WebService接口的注解
public class DoWebService {
@Resource
private WebServiceContext wsContext;
public String doServiceFace(String name) {
return "你好,欢迎来到服务端,"+name;
}
public String getClientInfo() {
MessageContext mc = wsContext.getMessageContext();
HttpExchange exchange = (HttpExchange) mc .get(JAXWSProperties.HTTP_EXCHANGE);
InetSocketAddress isa = exchange.getRemoteAddress();
String IP = isa.getAddress().getHostAddress();
System.out.println("当前的IP:" + IP);
}
}
解析:我这里的代码是很简单的,在这里只需要讲几点:
a.在类的顶部加上@javax.jws.WebService 注解,声明这是个WebService的接口。
b.服务端接收数据,类型是一个String类型,这里关于网络传数据比较建议用XML。
c.在接收到数据时,进行处理,返回数据给客户端。同样也是String类型。
d.在这里这些都是需要被客户端调用的接口,接收到什么和返回什么都是通过这个入口来实现的。
e.处理数据的过程,我在项目中主要用到的是Spring+ibatis来进行数据同步。注意:使用类的时候,spring的注入应该用静态的注入方式。只需要将接收到的数据交给 Spring+ibatis来处理。也就是在这个接口里调用别的类来处理。
f.getClientInfo()为获取正在调用服务的客户端IP地址。可以用它来记录谁访问过我。
g.浏览器中执行http://localhost:8080/Service/DoWebService?WSDL 看是否页面上显示XML数据。
2.发布WebService。
public class StartWebService extends ActionSupport {
private static final long serialVersionUID = 1L;
@Override
public String execute() throws Exception {
System.out.println("程序已经开始执行了。。。。。");
Endpoint.publish("http://168.7.109.9:8080/Service/DoWebService", new DoWebService());
System.out.println("service success!");
return "success";
}
}
我的这个是使用action来发布的,同样你也可以使用main方法来发布,都是可以的。在浏览器中通过请求执行下这段代码就可以了
3.客户端接入。
需要在cmd中使用wsimport来执行。
其命令是:wsimport -s C:\Users\cyl\workspace\WebServiceClient\src
-p com.xyyh.client -keep http://168.7.109.16:8080/Service/WebService?WSDL 必须服务端启用才可以执行。
a.C:\Users\cyl\workspace\WebServiceClient\src指的是客户端项目src的路径,将WebService接口类引入过来,供客户端调用。
b.-p com.xyyh.client在客户端的src下生成一个com.xyyh.client包,将WebService类全放在该包下。
c.-keep http://168.7.109.16:8080/Service/DoWebService ?WSDL 连接WebService的地址。这里面有几个参数是不一样的,DoWebService 为接口名称,ip地址是不同的。
4.客户端的调用。
public class test {
public void dotest(){
DoWebService ws = new DoWebServiceService().getDoWebServicePort();
String hz = ws.doServiceFace("张三");
System.out.println(hz);
}
}
5.最后的结果是:
控制台输出:你好,欢迎来到服务端,张三