初探Webervice,入门小程序

第一个问题:什么是webservice?

第二个问题:webservice可以干什么?

第三个问题:怎么开始webservice?

我相信,世界上很多的事物都让人产生这三个方面的疑问?正如:我是谁?我从哪里来?我到哪里去?

今天研究了以下webservice和RPC,看看这俩个东西究竟可以干什么,此篇博客记录学习webservice的路程,稍后以一个小demo进行入门级程序的编写。

我们首先来回答第一个问题:什么是webservice?

一言以蔽之:WebService是一种跨编程语言和跨操作系统平台的远程调用技术。

比如:我局域网内有两台主机,ip分别是192.168.1.100和192.168.1.101,分别归小张和小王使用,小张调用小王写的函数,这个过程叫做webservice。放飞思维,我在沈阳调用一个在北京的朋友主机上的函数更是webservice了。

第二个问题:webservice可以干什么?

比如:一个大型企业开发的服务作为接口暴露出来,那么好了,个人只要遵循该企业的规则就可以调用企业的接口。支付宝相信大家都熟悉,许多第三方网站上都有支付宝的调用接口,怎么实现的,毫无疑问:webservice。类似的还有pos机。

第三个问题:怎么开始webservice?

其实websercie分为两个方面:server端和client端,server端把服务开发好后,将该服务的接口发布出来,client端调用该接口就可以实现webservice。当然,我说这个是最简单的流程,其实这个过程很复杂,我向来喜欢大道至简的原则,争取做到让一个小白在看完这篇博客之后马上能明白什么是webservice。

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

webserice其实已经很成熟了,有许多开发框架,今天我们就用jdk自带的框架来开发webservice。

咱们以一个例子开始:

首先,必须server端必须开发并发布服务,导入jws框架,发布的地址是192.168.1.100:

package cn.edu.lnu.webservice;

import javax.jws.WebService;
import javax.xml.ws.Endpoint;

@WebService
public class Function {
	
	 	public String transWords(String words){
		         String res = "";
		       for(char ch : words.toCharArray()){
		           res += ch+",";
		     }
		         return res;
		     }
		    
		     public static void main(String[] args) {
		         // 使用Endpoint(终端)类发布webservice
		         //Endpoint.publish("http://localhost:8089/service/function", new Function());
		    	 Endpoint.publish("http://192.168.1.100:8089/service/function", new Function());
		         System.out.println("Publish Success");
		      }
	
}
怎么发布?运行main函数即可,运行之后,console打出“Publish Sucess",这时候我们去浏览器中输入该网址,结果如下图“

Web Services
Endpoint 	Information
Service Name:	{http://webservice.lnu.edu.cn/}FunctionService
Port Name:	{http://webservice.lnu.edu.cn/}FunctionPort
	
Address:	http://192.168.1.100:8089/service/function
WSDL:	http://192.168.1.100:8089/service/function?wsdl
Implementation class:	cn.edu.lnu.webservice.Function

点击超链接,内容如下“

<definitions targetNamespace="http://webservice.lnu.edu.cn/" name="FunctionService">
    <types>
        <xsd:schema>
            <xsd:import namespace="http://webservice.lnu.edu.cn/" schemaLocation="http://192.168.1.100:8089/service/function?xsd=1"/>
        </xsd:schema>
    </types>
  <message name="transWords">
    <part name="parameters" element="tns:transWords"/>
   </message>
  <message name="transWordsResponse">
     <part name="parameters" element="tns:transWordsResponse"/>
   </message><portType name="Function"><operation name="transWords">
    <input wsam:Action="http://webservice.lnu.edu.cn/Function/transWordsRequest" message="tns:transWords"/>
        <output wsam:Action="http://webservice.lnu.edu.cn/Function/transWordsResponse" message="tns:transWordsResponse"/>
       </operation></portType><binding name="FunctionPortBinding" type="tns:Function">
       <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
    <operation name="transWords"><soap:operation soapAction=""/>
     <input>
     <soap:body use="literal"/>
      </input>
   <output>
    <soap:body use="literal"/>
   </output></operation>
   </binding>
   <service name="FunctionService">
    <port name="FunctionPort" binding="tns:FunctionPortBinding">
      <soap:address location="http://192.168.1.100:8089/service/function"/>
     </port>
   </service>
   </definitions>

这东西是啥?wsdl,基于xml的webservice描述语言。这样server端就发布成功了!

现在192.168.1.101这台主机上的程序想访问这个服务,怎么做?

新建个项目,运行命令窗口,键入以下命令

wsimport -s ./workspace/wsclient -p cn.edu.lnu.client -keep  http://localhost:8089/service/function?wsdl

client只建项目即可,其他不用做,命令执行,刷新项目,会出现几个java文件,这些就是代理文件,新建一个测试类,输入如下代码:

package cn.edu.lnu.test;

import cn.edu.lnu.client.Function;
import cn.edu.lnu.client.FunctionService;

public class ClientTest {
	public static void main(String[] args) {
		Function ft = new FunctionService().getFunctionPort();
		String result = ft.transWords("love");
		System.out.println(result);
	}
}

程序打印 l  o  v  e

大家可以看到,我在101这台主机上压根就没有写方法,方法的调用是srver端的transord(),这就是一个简单的webservice小程序!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值