离职了,趁着在家的这几天,了解和学习了下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服务,可以用于多个系统之间的通信,而且这是跨平台、跨语言的一种技术实现(在网页游戏中用的普遍比较多)。