Web Service(上)

1.XML

CDATA指不应由XML解析器进行解析的文本数据。
在XML元素中,<&是非法的。解析器会把字符<解释为新元素的开始,把字符&解释为字符实体的开始。
某些文本,比如JavaScript代码,包含大量<&字符。为了避免错误,可以将脚本代码定义为CDATA。
CDATA部分由<![CDATA[开始,由]]>结束。


DTD(文档类型定义)是一种XML的约束方式,它的目的就是约束XML标记的写法。
XML Schema(XML Schema Definition,XSD)比DTD的约束能力强,所以DTD正在被逐渐淘汰。
在开发中通过Eclipse导入DTD文件,便于开发提示。

在XML中导入DTD,可以通过两种方式:

  1. 在XML中直接编写,<!DOCTYPE 根节点 [ ...... ]>
  2. 在专门的DTD文件中编写,然后在XML中通过特定的语句导入DTD文件。在导入时,要知道DTD文件是本地文件还是共享文件。
    本地文件的导入格式:<!DOCTYPE 根节点 SYSTEM "dtd的URL">
    共享文件的导入格式:<!DOCTYPE 根节点 PUBLIC "dtd的名称""dtd的URL">

book.xsd

<?xml version="1.0" encoding="UTF-8" ?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
	targetNamespace="http://www.atguigu.com/bookSchema"
	elementFormDefault="qualified">
	<element name="书架">
		<complexType>
			<sequence maxOccurs="unbounded">
				<element name="书">
					<complexType>
						<sequence>
							<element name="书名" type="string" />
							<element name="作者" type="string" />
							<element name="售价" type="string" />
						</sequence>
					</complexType>
				</element>
			</sequence>
		</complexType>
	</element>
</schema>

book.xsd文件通过xmlns="http://www.w3.org/2001/XMLSchema"引入Schema约束。
targetNamespace="http://www.atguigu.com/bookSchema"是book.xsd文件的ID。

book.xml

<?xml version="1.0" encoding="UTF-8"?>
<书架 xmlns="http://www.atguigu.com/bookSchema"
	xmlns:dd="http://www.w3.org/2001/XMLSchema-instance"
	dd:schemaLocation="http://www.atguigu.com/bookSchema book.xsd">
	<书>
		<书名>JavaScript开发</书名>
		<作者>老佟</作者>
		<售价>28.00元</售价>
	</书>
</书架>

book.xml引入了约束xmlns="http://www.atguigu.com/bookSchema"
通过schemaLocation="http://www.atguigu.com/bookSchema book.xsd"指定约束文件的位置。属性schemaLocation通过约束xmlns="http://www.w3.org/2001/XMLSchema-instance"引入,所以这里引入了两个约束,需要给其中一个约束起别名(因为DTD无法解决“在引入多个约束时,有同名标签,导致命名冲突”的问题,所以出现了Schema,它是DTD的替代者)。下面代码中的dd就是别名。

xmlns:dd="http://www.w3.org/2001/XMLSchema-instance" 
dd:schemaLocation="http://www.atguigu.com/bookSchema book.xsd"

2.WebService简介

Web Service
Web Service是应用程序组件,它使用开放协议进行通信,可通过使用UDDI来发现。
Web Service基于HTTP和XML。HTTP 协议是最常用的因特网协议。XML 提供了一种可用于不同的平台和编程语言之间的语言。
Web services 平台的元素:

  • SOAP (简易对象访问协议)
  • UDDI (通用描述、发现及整合)
  • WSDL (Web services 描述语言)

SOAP
SOAP是指简易对象访问协议,它是一种用于应用程序之间的通信协议。
SOAP基于XML,独立于平台、独立于语言。
SOAP很简单并可扩展。
SOAP允许你绕过防火墙。
SOAP将被作为 W3C 标准来发展。

WSDL
WSDL 指网络服务描述语言 (Web Services Description Language)。
WSDL 是一种使用 XML 编写的文档。这种文档可描述某个 Web service。它可规定服务的位置,以及此服务提供的操作(或方法)。

3.使用JDK开发Web Service

发布Web Service

import javax.jws.WebMethod;
import javax.jws.WebService;

/*
 * SEI: 
 */
@WebService
public interface HelloWS {

	@WebMethod
	public String sayHello(String name);
}
import javax.jws.WebService;

/*
 * SEI的实现
 */
@WebService
public class HelloWSImpl implements HelloWS {

	@Override
	public String sayHello(String name) {
		System.out.println("server sayHello() "+name);
		return "Hello " + name;
	}

}
import javax.xml.ws.Endpoint;

import com.atguigu.day01_ws.ws.HelloWSImpl;

/*
 * 发布Web Service
 */
public class ServerTest {

	public static void main(String[] args) {

		String address = "http://192.168.1.108:8989/day01_ws/hellows";
		Endpoint.publish(address , new HelloWSImpl());
		System.out.println("发布webservice成功!");
	}
}

请求Web Service
根据WSDL文档生成客户端代码。

import com.atguigu.day01_ws.ws.HelloWSImpl;
import com.atguigu.day01_ws.ws.HelloWSImplService;

/*
 * 调用webservice
 */
public class ClientTest {

	public static void main(String[] args) {
		HelloWSImplService factory = new HelloWSImplService();
		HelloWSImpl helloWS = factory.getHelloWSImplPort();
		System.out.println(helloWS.getClass());
		
		String result = helloWS.sayHello("Jack");
		System.out.println("client "+result);
	}
}

posted @ 2018-06-15 08:51  gzhjj  阅读(288)  评论(0编辑  收藏  举报