Java6原生最简单WebSercive Demo

项目需要开放一系列的API接口,然后就开始研究到底用什么方式开放比较好,网上比较流行的有传统的WebService方式,还有就是RestFul 风格的 API,经过一系列的评估,我还是决定采用RsetFul 风格的API比较好,

因为以前使用新浪微博的接口时,发现蛮好用的。

 

由于考虑到WebService 的广泛使用性,我就打算学习并使用一下WebSerice,了解才能做决定嘛

OK,言归正传

 

总体步骤:

 

步骤一:

创建普通的java项目

创建类

 

package net.itaem.test;

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

@WebService
public class TestWebS {

	public String doString() {
		return "这是一个java6的WebService";
	}

	public static void main(String[] args) {
		String url = "http://192.168.1.102:8081/net.itaem.test.TestWebS";

		Endpoint.publish(url,
				new TestWebS());
	}
}

代码解析:

Endpoint.publish(url,new TestWebS());

该语句中,开启了一个服务,监听url中的端口,而代码头部(代码证的ip地址为本机地址,可以使用localhost或者127.0.0.1替代)

就好像Socket中的服务器端监听一样,监听该端口的访问。

@WebService
public class TestWebS {

使用注解说明了这是一个WebService实现接口类。

 

 

步骤二:

直接运行该类,如果在eclipse 下的话,

image

 

步骤三:

然后我们就可以通过地址访问了:

http://192.168.1.102:8081/net.itaem.test.TestWebS?wsdl

在浏览器输入该地址就可以得到

This XML file does not appear to have any style information associated with it. The document tree is shown below.
<!--
 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://test.itaem.net/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://test.itaem.net/" name="TestWebSService">
<types>
<xsd:schema>
<xsd:import namespace="http://test.itaem.net/" schemaLocation="http://192.168.1.102:8081/net.itaem.test.TestWebS?xsd=1"/>
</xsd:schema>
</types>
<message name="doString">
<part name="parameters" element="tns:doString"/>
</message>
<message name="doStringResponse">
<part name="parameters" element="tns:doStringResponse"/>
</message>
<portType name="TestWebS">
<operation name="doString">
<input message="tns:doString"/>
<output message="tns:doStringResponse"/>
</operation>
</portType>
<binding name="TestWebSPortBinding" type="tns:TestWebS">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
<operation name="doString">
<soap:operation soapAction=""/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
</binding>
<service name="TestWebSService">
<port name="TestWebSPort" binding="tns:TestWebSPortBinding">
<soap:address location="http://192.168.1.102:8081/net.itaem.test.TestWebS"/>
</port>
</service>
</definitions>

 

步骤四:

生成客户端代码

打开cmd ,进入到 项目源码下的src目录执行

image

 

wsimport -p net.wsclient –keep http://192.168.1.102:8081/net.itaem.test.TestWebS?wsdl

PS:myeclipse查看源码路径

右击“src”文件夹,Propertites 弹出窗口右边,location:XXXX  就是源码所在的物理地址

 

回车

Java6原生最简单WebSercive Demo_第1张图片

 

解析:

wsimport  [–s "src目录" ] [–p “生成类所在包名”] [ -keep “wsdl发布地址”]

我们省略了 –s 目录,因为在同一个项目下面,如果不在同一个src (不在同一个项目)就需要使用这个 –s “src路径”

 

 

 

步骤五:

编写调用客户端代码的Test

package net.itaem.web.test;

import net.wsclient.TestWebS;
import net.wsclient.TestWebSService;

public class TeatClint {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		TestWebS testWebS = new TestWebSService().getTestWebSPort();
		String returnContent = testWebS.doString();
		System.out.println(returnContent);
	}

}

运行:

Java6原生最简单WebSercive Demo_第2张图片

 

解析:

其中 TestWebS 是客户端生成的代码,不是我们自己编写的代码,

而 TestWebSService 这个类是 根据我们自己的服务类 的  名字 +Service 后缀生成的,

方法getTestWebSport 也是同样的道理,命名方式  get+服务类名+Port

步骤五中这里所有操作的代码,都是自动生成的客户端代码

testWebS.doString();

这个方法是我们在服务类中定义的方法,

 

也就是说,这个服务类里面的所有方法,构成了我们开放出来的 api

是不是感觉很简单呢,

java6集成的最简单demo。

 

 

总结:

WebService是 和RPC很像,都是调用远程的类对象,然后生成输出。

客户端代码就好像我们Web中的DNS一样,给我们去查找对应的类所在, 和中间件中的ORB (对象请求代理)有点像,但这个封装得更彻底,更先进

在web的世界中,中间件的应用越来越依靠于HTTP,JSON,这类

考虑到传输速率问题,WebService是比RestFul的JSON输出快一点,

不过呢,性能不是非常延迟的时候,webService能不用就不要用了,因为这个东东使用得不好,代码很容易就冗余了,各种难维护

你可能感兴趣的:(Java6原生最简单WebSercive Demo)