`

WebSerice入门

阅读更多

离职了,趁着在家的这几天,了解和学习了下JBMP和webservice。

本次日志主要是说webservice的入门操作。

首先,需要对webservice有个整体的了解。

     webService就是一个应用程序,它提供一种通过web访问的api。

那么webService有什么作用呢?

 解决两个或者两个应用程序之间的远程调用(跨平台,跨语言,即java可以调用.net,C或者C也可以调用java,页游中一般会用到);

一般来说,webService的基本组成就是客户端,服务端。

webService应用举例:

服务器端:

xml(client与server进行交互的数据格式);

webservice description languange(WEB服务描述语言,api),简称wsdl;

soap(简单对象访问协议),server与client进行交互时走的协议(协议就是规则),soap协议=在http的基础之上传送xml格式的数据...

 

注意:你的JDK或者JRE版本最低为1.6.0_21,只能比这个版本高,否则你使用Java代码进行发布的时候会出现缺少ATP的异常。

 

说完了这些,下面来说一个最简单的例子:

按步骤来说,第一步,创建服务器端,创建一个Server(Java Project)(需要在类上添加@WebService注解,同时类中要有实例方法):

import javax.jws.WebService;
@WebService
public class HelloService {
    public void doubleKill(){
        System.out.println("doubleKill");
    }
}

发布服务:

import javax.xml.ws.Endpoint;

public class PublishService {
    public static void main(String[] args) {
        Endpoint.publish("http://127.0.0.1:9999/helloService", new HelloService());
    }
}

此时,可以通过浏览器访问以下这个地址:http://127.0.0.1:9999/helloService,会跳转到一个webService的提示页面。如果访问:http://127.0.0.1:9999/helloService?wsdl,那么出现远程访问的说明文档(xml格式),

你需要读懂它,我下次博客中会进行说明,这里先跳过。

第二步,使用wsimport命令生成相关java和class文件。

进入cmd提示符,首先跳转到D盘目录下(这里的目录你可以随意指定),

wsimport -s . http://127.0.0.1:9999/helloService?wsdl,执行效果如下:

 

第三步:创建客户端程序,

创建一个Java Project(Client),将wsimport命令生成的java文件拷贝到src下,

开始编写测试程序:HelloClient.java文件,总体结构如右图(红色方框标明的是自己写的测试类,其他的均为命令生成的)

这里需要说下访问http://http://127.0.0.1:9999/helloService?wsdl生成的xml文件(即webService的API说明)

 

<?xml version="1.0" encoding="UTF-8"?><!-- Published by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.1.6 in JDK 6. --><!-- Generated by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.1.6 in JDK 6. --><definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://service.itheima.com/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://service.itheima.com/" name="HelloServiceService">
<types>
<xsd:schema>
<xsd:import namespace="http://service.itheima.com/" schemaLocation="http://127.0.0.1:9999/helloService?xsd=1"></xsd:import>
</xsd:schema>
</types>
<message name="doubleKill">
<part name="parameters" element="tns:doubleKill"></part>
</message>
<message name="doubleKillResponse">
<part name="parameters" element="tns:doubleKillResponse"></part>
</message>
<portType name="HelloService">
<operation name="doubleKill">
<input message="tns:doubleKill"></input>
<output message="tns:doubleKillResponse"></output>
</operation>
</portType>
<!-- 绑定名(下面根据此信息来获取相关实现类) -->
<binding name="HelloServicePortBinding" type="tns:HelloService">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"></soap:binding>
<operation name="doubleKill">
<soap:operation soapAction=""></soap:operation>
<input>
<soap:body use="literal"></soap:body>
</input>
<output>
<soap:body use="literal"></soap:body>
</output>
</operation>
</binding>
<!-- 这是接口实现类 -->
<service name="HelloServiceService">
<!-- 接口名以及绑定在谁上面 -->
<port name="HelloServicePort" binding="tns:HelloServicePortBinding">
<soap:address location="http://127.0.0.1:9999/helloService"></soap:address>
</port>
</service>
</definitions>

 

,测试类的java代码(其实此时就是客户端不知道服务器端的程序是怎么写的,也不需要去管服务器端的程序时用什么语言来编写的,只要知道文档说明就可以了),测试类如下:

 

public class HelloClient {
	public static void main(String[] args) {
		helloService();
	}
	
	public static void helloService() {
		HelloService helloService = new HelloServiceService().getHelloServicePort();
		helloService.doubleKill();
	}
}

 ,执行就可以调用服务器端的代码了,成功后控制台就会打印出doubleKill关键字。

 

其实除了这一种方法调用之外,还有两个方法,一种是通过myeclipse自带的WebService Explorer(不知道为什么,我这边一直没有成功),一种是直接使用Java代码进行访问,使用java.net.URLConnect相关API进行访问,下次博客将会进行说明。

下面进行下整体流程的一个分析:

 

小结:其实webService的主要作用是在web上发布服务供别人调用,或者在自己的应用程序上调用别人发布的web服务,可以用于多个系统之间的通信,而且这是跨平台、跨语言的一种技术实现(在网页游戏中用的普遍比较多)。

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics