1.webservice及其简单应用!

先理解什么是服务:

现在的应用程序变得越来越复杂,甚至只靠单一的应用程序无法完成全部的工作。更别说只使用一种语言了。
大家在写应用程序查询数据库时,并没有考虑过为什么可以将查询结果返回给上层的应用程序,甚至认为,这就是数据库应该做的,其实不然,这是数

据库通过TCP/IP协议与另一个应用程序进行交流的结果,而上层是什么样的应用程序,是用什么语言,数据库本身并不知道,它只知道接收到了一份协议,这就是SQL92查询标准协议。
目前的云计算、云查杀都是一种服务,现在比较流行的说法是SOA(面向服务的框架)。
既然数据库可以依据某些标准对外部其他应用程序提供服务、而且不关心对方使用什么语言,那我们为什么就不能实现跨平台、跨语言的服务呢?
只要我们用Java写的代码,可以被任意的语言所调用,我们就实现了跨平台,跨语言的服务!

什么是webservice,它可以用来干什么?

WebService,顾名思义就是基于Web的服务。它使用Web(HTTP)方式,接收和响应外部系统的某种请求。从而实现远程调用. 学习WebSerice可以将你的服务(一段代码)发布到互联网上让别人去调用,也可以调用别人机器上发布的WebService,就像使用自己的代码一样。


webservice的特点:

1.WebService通过HTTP POST方式接受客户的请求

2.WebService与客户端之间一般使用SOAP协议传输XML数据.

3.它本身就是为了跨平台或跨语言而设计的。

基于cxf的webservice简单应用:

这里使用的是apache-cxf-2.7.10的jar包,拷贝lib下的jar包的项目中。

service的编写:

package com.cxf.test.service;

import javax.jws.WebParam;
import javax.jws.WebService;

@WebService(name="sayHiInterface", targetNamespace = "http://com.cxf.test.service/")
public interface SayHiToWebService {
	public String sayHi(@WebParam(name = "name") String name);
}

package com.cxf.test.service;

import javax.jws.WebParam;
import javax.jws.WebService;

@WebService(targetNamespace = "http://com.cxf.test.service/",endpointInterface = "com.cxf.test.service.SayHiToWebService", serviceName="SayHiToWebServiceImplService")
public class SayHiToWebServiceImpl implements SayHiToWebService {

	public String sayHi(String name) {
		return "hi: " + name;
	}

}
server的发布方式:

import com.cxf.test.service.SayHiToWebService;
import com.cxf.test.service.SayHiToWebServiceImpl;

public class ServerStart {
	public static void main(String[] args) {
		//传统发布方式
//		SayHiToWebServiceImpl sayHiToWebService = new SayHiToWebServiceImpl();
//		String address = "http://192.168.1.109:8080/sayHiToWebService";
//		Endpoint.publish(address, sayHiToWebService);
		
		SayHiToWebService helloworldimp = new SayHiToWebServiceImpl();  
      <span style="white-space:pre">	</span> <span style="white-space:pre">	</span>JaxWsServerFactoryBean factoryBean = new JaxWsServerFactoryBean();  
        <span style="white-space:pre">	</span>factoryBean.setAddress("http://192.168.1.109:8080/sayHiToWebService");  
        <span style="white-space:pre">	</span>factoryBean.setServiceClass(SayHiToWebService.class);
        <span style="white-space:pre">	</span>factoryBean.setServiceBean(helloworldimp);  
        <span style="white-space:pre">	</span>factoryBean.create();  
	}
}

client调用方式:

package com.cxf.test.server;

import java.net.MalformedURLException;
import java.net.URL;

import javax.xml.namespace.QName;
import javax.xml.ws.Service;

import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;


import com.cxf.test.service.SayHiToWebService;



public class ClientTest {
	public static void main(String[] args) {
//		JaxWsProxyFactoryBean jwpb = new JaxWsProxyFactoryBean();
//		jwpb.setServiceClass(SayHiToWebService.class);
//		jwpb.setAddress("http://192.168.1.109:8080/sayHiToWebService");
//		SayHiToWebService sayHiToWebService = (SayHiToWebService) jwpb.create();
//		System.out.println(sayHiToWebService.sayHi("cainiaolei"));
		
		try {
			URL url = new URL("http://192.168.1.109:8080/sayHiToWebService?wsdl");
			QName qName=new QName("http://com.cxf.test.service/","SayHiToWebServiceService");
			Service service = Service.create(url,qName);
			SayHiToWebService sayHiToWebService = service.getPort(SayHiToWebService.class);
			System.out.println(sayHiToWebService.sayHi("cainiao"));
		} catch (MalformedURLException e) {
			e.printStackTrace();
		}
	}
}
访问:
<pre name="code" class="java">http://192.168.1.109:8080/sayHiToWebService?wsdl是否可以看见这项服务的具体描述呢?

 这样一个简单的webservice应用就形成了! 

下面讲解wsdl2java命令生成客户端代码,客户端可以直接通过代码调用服务!

控制台下进入现在的apache-cxf文件下的bin目录:

调用 wsdl2java -p com.  sy.cxf.client -d e:\ -all http://localhost:8080/cxf/webservice/helloWorld?wsdl 命令,

这样就会在e盘下生成客户端代码。

-p 也就是package 对应java中的包
-d 输入目录,生成.java文件会在该目录,会自动添加-p参数配置的包路径
-client 生成客户端测试web service的代码.
-server 生成服务器启动web  service的代码.
-impl 生成web service的实现代码.
-ant  生成build.xml文件.
-all 生成上面-client -server -impl -ant 对应的所有文件.


这样就可以在e盘下看到我们的客户端代码了,拷贝代码到客户端!



这里我是以我的应用进行描述的,

这样在客户端,你就可以通过:

new CollectHuaQiangServiceService().getCollectHuaQiangServicePort().startCaptureHuaQiangService(); 调用你的服务了!

注:以上参考过itcast机构的ppt!


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值