- 常识
- 基于socket # socket可以跨语言访问
- 单用socket提供网络服务出现的问题:
- 1.不能处理不同协议的请求,如http协议发送的是请求头信息
- # http调用socket:127.0.0.1:8888/或action=“127.0.0.1:8888”
- 2.添加新参数,客户端也要修改
- 版本
- jdk6之后的版本开始支持web service
- jdk6不支持soap1.2
- 传输标准:xml或json # 普遍使用xml,RestFul使用json
- 优点
- 服务方式
- 返回的结果均为xml
- http get
- http post
- get与post方式直接传递参数,参数易混淆,所以有soap发送xml的方式
- soap1.1
- soap1.2
- soap
- 常识:
- soap:simple object access protocol
- soap是以post方式传输的
- 内容
- 获得
- 内容 # 查看时从后向前看
- <service>标签 - name属性:默认 发布类名 + Service
- <port>标签 - name属性:默认有soap1.1 soap1.2 get post(jdk1.6只有soap1.1),默认 类名 + port
- binding属性:真正的实现者 # 指向标签
- <soap:address>标签 - location属性:访问的地址
- <binding>标签:是真正的实现类,soap协议,是文本,方法名 - <portType>标签: - input
- <message>标签 用schema格式来描述参数类型 - xsd:schema关联的schema文件中
- <element>标签 ,约定了参数类型- 创建与发布
- 发布到eclipse的jetty容器
- @WebService
- MyWebService
- public String showName(Strng name)
- System.out.println(“name=” + name);
- return name + “你好!”;
- main
- 可以发布成服务的方法
- 1.非final、static修饰的public方法
- 2.@WebMethod(exclude=true)方法前加该注解时不发布该方法
- 调用
- HttpClient
- wsdl.xml
- web service提供给不同平台生成解决方案的配置文件
- HttpClient发送soap时充当了:wsdl.xml解决方案调用的过程
- o→ wsimport.exe(jdk1.6)
- 解析wsdl.xml文件
- 命令:wsimport -s . -p cn.itcast # -s 保存源码(默认不保存),-p指定包名
- 生成类:
- jdk1.6中解析时忽略生成soap12服务类文件(jdk1.6不支持)与get post服务类文件(默认忽略)
- XxxService
- XxxServicePort
- Xxx
- ..
- 调用:
- MyWSService mywsService = new MyWSService();
- String retVal = mywsService.getMyWSPort().sayHello();
- o→ myeclipse的web service soap浏览器
- 可以从soap浏览器中查看请求和返回的soap.xml文件的源码
- |→ 右上角wsdl page
- |→ 左边栏 uddi main
- |→ 右边栏按提示输入即可
- o→ ajax
- 方式一:直接调用
- 缺点
- 新版浏览器(ie10等)不支持跨域请求(为了安全),所以只能请求localhost
- 会把数据暴露在客户端
- 注解
- @WebMethod(exclude=true) # 对此方法不进行发布
- @WebService # 声明为web service服务类
- 可选属性
- name=“服务名”,
- portName=“端口名”,
- serviceName=“真正服务类的名字”,
- targetNamespace=“包名a.b.c”
- @WebResult(name="") # 方法返回值类型前,指定返回值名(如果返回的是集合,则指定的是集合内元素的名)
- @WebParam(name="") # 方法参数值类型前,指定参数名