schema规范中:
1.所有标签和属性都需要有schema文件来定义。
2.所有schema文件都需要有一个唯一标识id,单在xml文件中它叫namespace。
3.namespace的值由targetNamespace属性来指定,它的值是一个url(很可能不存在)。
4.如何引入一个schema约束?
1).属性?:用xmlns属性。
2).属性值?:对应schema文件的id即(namespace值)。
5.如果引入的schema约束不是w3c提供的,必须指定schema文件的位置。
6.schema文件的位置由什么属性来指定
1).属性?:用schemaLocation属性。
2).属性值?:引入文件的namespace+空格+path
7.如果引入了n个schema约束,需要给n-1个取别名。
同时取别名的schema定义的标签在引用之前都得先加上别名。
http协议:
请求的组成:
请求行:(请求方式(get/post),请求路径(不包含主机名),请求所用协议(http1.1))
请求头:
请求体:只有post请求才有请求体
响应组成:
响应状态行:(200请求成功,404路径错误,500服务器端异常情况,302客户端跳转)
响应头:
响应体:
8.webservice中的几个重要术语
1.WSDL:web service definition language(webservice定义语言)
1-1).对应一种类型的文件 xxx.wsdl
1-2).定义了webservice的服务器端与客户端应用交互传递请求和响应数据的格式和方式
1-3).一个webservice对应一个唯一的wsdl文件
2).SOAP:Simple Object Access Protocal
2-1).简单对象访问协议
2-2).是一种简单的、基于http和xml的协议,用于在web上交换结构化的数据
2-3).SOAP消息请求消息和响应消息
2-4).http+xml片段
3).SEI:webservice Endpoint Interface
3-1).webservice的终端接口
3-2).webservice服务器端用来处理请求的接口
4).CXF:Celtix +Xfire
4-1).一个apache的用于开发webservice服务器端和客户端的框架
4-2).
4-3).
9.webservice服务端代码实现
1)创建一个java工程作为webservice服务端,如创建java工程hello_ws
2)在该项目的src项目下创建包 cn.bsxy.ws.server(任意取一个包名,遵循java包名定义的规则)
用于存放server端测试类 如 public class TestHelloWs(){}
创建包名cn.bsxy.ws.sei 用于存放webservice的SEI webservice终端接口public interface HelloWs(){}
创建包名cn.bsxy.ws.sei.impl 用于存放webservice的SEI的实现类,public class HelloWsImpl implements HelloWs(){}
以上各包中类的具体代码如下:
//webservice发布代码
package cn.bsxy.ws.server;
import javax.xml.ws.Endpoint;
import cn.bsxy.ws.sei.impl.HelloWsImpl;
/**
*
* @author smartluobo
*该类用来发布服务器端的wsdl文件
*/
public class TestHelloWs {
public static void main(String[] args) {
String address = "http://192.168.0.116:8888/hello_ws/hellows";
Endpoint.publish(address, new HelloWsImpl());
System.out.println("发布webservice成功");
}
}
//webservice终端接口定义
package cn.bsxy.ws.sei;
import javax.jws.WebMethod;
import javax.jws.WebService;
/**
*
* @author smartluobo
*该类用来定义webservice的终端接口,即对外提供的访问方法
*/
@WebService
public interface HelloWs {
@WebMethod
String sayHello(String name);
}
//webservice终端接口类的实现类,完成webservice对外提供接口的具体实现
package cn.bsxy.ws.sei.impl;
import javax.jws.WebService;
import cn.bsxy.ws.sei.HelloWs;
/**
* webservice终端接口实现类。对webservice对外提供接口的具体实现
* @author smartluobo
*
*/
@WebService
public class HelloWsImpl implements HelloWs {
@Override
public String sayHello(String name) {
System.out.println("hello web server"+name);
return "hello client"+name;
}
}
在TestHelloWs.java中运行该类当控制台打印发布成功后说明webservice已经发布成功。
webservice发布成功后打开浏览器,将在TestHelloWs.java中定义的address
复制到浏览器地址栏并在后面追加"?wsdl",就能看到发布后生成的wsdl文件。到此webservice服务端就已经ok
对webservice服务端的简单总结两个注解加上一个类
注解[email protected](该注解表示定义的该类是一个webservice终端接口,
但是在该终端接口类的实现类上任然需要加上该注解)
在上述的HelloWs.java和HelloWsImpl.java上都需加上@WebService注解
注解[email protected](该注解用在方法上表示该方法是webservice对外提供的一个方法,只需在接口定义方法上加该注解即可)
类.Endpoint(调用该类的Endpoint.publish方法发布webservice)
Endpoint.publish(String address, Object implementor)
address:webservice发布的地址。
implementor:webservice终端接口实现的类的对象。
10.webservice客户端实现:
1.创建一个普通的java项目作为客户端项目hello_ws_client(项目名称任意)。
2.根据wsdl文件发布地址借助jdk的wsimport.exe生成客户端代码。
path wsimport -keep url
path:表示生成的代码放在哪个路径下。
-keep:表示保存生成的代码的。
url:wsdl文件发布的url地址。
如:我想把通过wsdl文件生成代码放在hello_ws_client项目的src目录下。
进入hello_ws_client项目的src目录:我本地的路径为 D:\lmb\workspace\hello_ws_client\src在D盘下
2.1打开命令窗口 输入d: 切换盘符进入D盘
2.2 输入cd D:\lmb\workspace\hello_ws_client\src 进入到需要存放生成代码的路径下
2.3 输入 wsimport -keep http://192.168.0.116:8888/hello_ws/hellows?wsdl
2.4 上述三步完成后即完成了根据wsdl文件生成java代码的工作,此时刷新hello_ws_client项目即可看到生成的java代码。
3.在hello_ws_client项目中新建包cn.bsxy.ws.client.test(包名随意)
3.1创建一个测试类 public class ClientTest(){}(类名随意)
package cn.bsxy.ws.client.test;
import cn.bsxy.ws.sei.impl.HelloWsImpl;
import cn.bsxy.ws.sei.impl.HelloWsImplService;
public class ClientTest {
public static void main(String[] args) {
//使用wsimport生成的一个工厂类(名字为XxxxService)
HelloWsImplService factory = new HelloWsImplService();
//使用wsimport生成的一个类(名字和服务端webservice终端接口实现类的名称一致。但是在本地是一个接口)
//factory.getHelloWsImplPort()返回的是一个动态代理对象
HelloWsImpl helloWs = factory.getHelloWsImplPort();
String result = helloWs.sayHello("smartluobo");
System.out.println(result);
}
}
4.webservice客户端简单访问也到此结束。