当前位置: 首页 > news >正文

WebService的初级学习

  • 复习准备

  1. Schema约束:

    1.1   namespace相当于Schema文件的id;

    1.2   targetNamespace属性用来指定schema文件的namespace的值;

    1.3  xmlns属性引入一个约束, 它的值是一个schema文件的namespace值;

    1.4 schemaLocation属性用来指定引入的schema文件的位置;

    schema规范中:

         1. 所有标签和属性都需要有schema文件来定义;

         2. 所有的schema文件都需要有一个id, 但在这里它叫namespace;

         3. namespace的值由什么来指定?    由targetNamespace属性来指定, 它的值是一个url(很有可能不存在)

         4. 如何引入一个Schema约束? (例如:xmlns:mvc="http://www.springframework.org/schema/mvc)

              属性? : 用xmlns属性

              属性值: 对应的schema文件的id(namespace值)

         5. 如果引入的schema不是w3c组织定义, 必须指定schema文件的位置

         6. schema文件的位置由什么属性来指定?

              属性? : schemaLocation

              属性值: namespace path

      7. 如果引入了N个约束, 需要给n-1个取别名

  2. HTTP协议相关知识

    2.1 请求的组成:

            请求行(请求方式  path  http1.1)

        请求头

        请求体: 只有post请求有

    2.2  响应的组成
        响应状态行:

        响应头

        响应体 : 浏览器解析显示的数据

    2.3 请求的过程

        浏览器客户端 _http1.1建立连接_>  服务器  ----->  页面文档(文字图片等)

  • 关于WebService的几个问题及常用术语

    1. Webservice是什么?

      基于Web的服务:服务器端整出一些资源让客户端应用访问(获取数据)

      一个跨语言、跨平台的规范(抽象)

      多个跨平台、跨语言的应用间通信整合的方案(实际)

    2. 为什么用使用webService

       web service能解决:

                跨平台调用

            跨语言调用

            远程调用

    3. webservice相当于HTTP+?+?

      Http+xml+schema

    4. wsdl是什么?(webService definition language)

      webservice定义语言, 对应.wsdl文档, 一个webservice会对应一个唯一的wsdl文档, 定义了客户端与服务端发送请求和响应的数据格式和过程

    5. 如何发布一个webservice? (SEI: service endPoint interface  服务终端接口)

      定义SEI   @webservice @webMethod

      定义SEI的实现

      发布:  Endpoint.publish(url, SEIImplObject)

    6.如何请求一个webservice?

      根据wsdl文档生成客户端代码  jdk/cxf

      根据生成的代码调用webService

  • WebService发布请求实例

    1. service代码(使用JDK开发):  

/*定义SEI
*/
package com.webservice.service;

import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.xml.ws.WebEndpoint;

@WebService//使用webservice接口
public interface HelloWS {
    @WebMethod//接口中暴露的方法
    public String sayHello(String name);
}
/*SEI的实现
*/
package com.webservice.service;

import javax.jws.WebService;

@WebService
public class HelloWSImp implements HelloWS {

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

}
/*终端的发布
*/
package com.webservice.test;

import javax.xml.ws.Endpoint;

import com.webservice.service.HelloWSImp;

public class ServerTest {
    public static void main(String[] args) {
     //终端发布的url,可以自定义但不要和已知的重复 String address
= "http://localhost:5766/webservice-test_service/HelloWS";
     //发布终端 Endpoint.publish(address,
new HelloWSImp()); System.out.println("webservice发布成功!"); } }

  2.Client代码:

    在cmd命令行进入client文件包的src文件下,使用jdk自带的wsimport.exe工具生成client代码,输入

      wsimport -keep url?wsdl  (...?wsdl 可查看其wsdl文件) 完成后会制动生成相应的client代码

    (若使用cxf框架开发,加入cxf的jar包即可,service不需要其他改动; Client边在自动生成代码时使用的是cxf的工具

     wsdl2java url?wsdl )

    自动生成Client代码后直接开始测试

package com.webservice.test;

import com.webservice.service.HelloWSImp;
import com.webservice.service.HelloWSImpService;

public class ClientTest {
    public static void main(String[] args) {
     //起点,在其wsdl文件的<wsdl:service>中可以看出这个类似 工厂 的类 HelloWSImpService factory
= new HelloWSImpService();
     //client对应的SEI实现类 HelloWSImp helloWSImpPort
= factory.getHelloWSImpPort(); String sayHello = helloWSImpPort.sayHello("xffgem"); System.out.println(sayHello); } }

 

转载于:https://www.cnblogs.com/hfblogs/p/5226871.html

相关文章:

  • ZOJ1372 POJ 1287 Networking 网络设计 Kruskal算法
  • UVA 10689 Yet another Number Sequence
  • Web 服务器基准测试,nginx+php vs Apache+php
  • 如何使用一台PC搭建可以在线迁移的KVM学习环境
  • 【转】linux(Ubuntu)配置svn仓库,搭建svn服务器
  • JQuery判断数组中是否包含某个元素$.inArray(元素字符串, 数组名称);
  • eclipse安装pydev
  • 看opengl写代码(7) 使用混合数组(glInterLeavedArrays)
  • 将已有项目导入Gitlab
  • innerText兼容处理
  • ./configure,make,make install的作用(转)
  • hdu 5080 2014ACM/ICPC鞍山K题 polya计数
  • Java并发编程:Semaphore、CountDownLatch、CyclicBarrier
  • 我的Android进阶之旅------Android自定义View来实现解析lrc歌词并同步滚动、上下拖动、缩放歌词的功能...
  • 利用ReadWriterLock 写一个简单的缓存
  • [case10]使用RSQL实现端到端的动态查询
  • Hibernate最全面试题
  • js学习笔记
  • k8s如何管理Pod
  • python学习笔记-类对象的信息
  • 从 Android Sample ApiDemos 中学习 android.animation API 的用法
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 聊聊hikari连接池的leakDetectionThreshold
  • 手写双向链表LinkedList的几个常用功能
  • 责任链模式的两种实现
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • #includecmath
  • #NOIP 2014#day.2 T1 无限网络发射器选址
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (20050108)又读《平凡的世界》
  • (ros//EnvironmentVariables)ros环境变量
  • (WSI分类)WSI分类文献小综述 2024
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (三)模仿学习-Action数据的模仿
  • (三维重建学习)已有位姿放入colmap和3D Gaussian Splatting训练
  • (一)pytest自动化测试框架之生成测试报告(mac系统)
  • (转)linux下的时间函数使用
  • (转)总结使用Unity 3D优化游戏运行性能的经验
  • .bat批处理(五):遍历指定目录下资源文件并更新
  • .NET C# 使用 SetWindowsHookEx 监听鼠标或键盘消息以及此方法的坑
  • .NET core 自定义过滤器 Filter 实现webapi RestFul 统一接口数据返回格式
  • .NET Micro Framework初体验
  • .NET 中使用 TaskCompletionSource 作为线程同步互斥或异步操作的事件
  • .net和php怎么连接,php和apache之间如何连接
  • .NET上SQLite的连接
  • .NET中使用Protobuffer 实现序列化和反序列化
  • /*在DataTable中更新、删除数据*/
  • /usr/lib/mysql/plugin权限_给数据库增加密码策略遇到的权限问题
  • @transactional 方法执行完再commit_当@Transactional遇到@CacheEvict,你的代码是不是有bug!...
  • [ 云计算 | Azure 实践 ] 在 Azure 门户中创建 VM 虚拟机并进行验证
  • [《百万宝贝》观后]To be or not to be?
  • [4.9福建四校联考]
  • [BZOJ1178][Apio2009]CONVENTION会议中心
  • [C/C++随笔] char与unsigned char区别
  • [docker] Docker的数据卷、数据卷容器,容器互联