WebService 学习记录
-------------------------------------------PS:这个WebService 服务必须一直开着,关闭就没法访问了
    Web Service 教程
一、webservice介绍
1.使用场景
- 不同的移动客户端访问
      - 需要访问第三方的项目
2.访问第三方应用的方式
      ISO的七层模型  : 物理层、数据链路层、网络层、传输层、表示层、会话层、应用层
     - Socket访问  : Socket属于传输层,它是对Tcp/ip协议的实现,包含TCP/UDP,它是所有通信协议
                       的基础,Http协议需要Socket支持,以Socket作为基础
        Socket通信特点:
	  1. 开启端口,该通信是 长连接的通信 ,很容易被防火墙拦截,可以通过心跳机制
	               来实现 ,开发难度片段
	  2. 传输的数据一般是字符串 ,可读性不强
	            lj|16|1|60|up  
          3. socket端口不便于推广 
	     http:17.23.23.2:2345   www.jd.com   www.360buy.com
	  4. 性能相对于其他的通信协议是最优的
     - Http协议访问 :属于应用层的协议,对Socket进行了封装
          1. 跨平台 
	  2. 传数据不够友好 : 
	     get请求: http://127.0.0.1:8888?username=lj&pwd=1234
	  3. 对第三方应用提供的服务,希望对外暴露服务接口
问题:
       1. 数据封装不够友好 :可以用xml封装数据 
       2. 希望给第三方应用提供web方式的服务  (http + xml) = web  Service
- Webservice
       1.webService介绍
2.webservice的规则
         - xml 
	 - soap :(simple object access 协议) :简单对象访问协议
	 - wsdl : webservice描述语言 ,它也是xml实现的
       3.webservice的优点
4.webservice专业名称
         1. xml
         2. wsdl
	 3. soap
二、调用第三方的WS服务
1.体验webservice www.webxml.com.cn
2.准备客户端,调用第三方的webservice服务,让本项目有手机查号的功能
     - 一般访问方式  HttpClient
       1. Http-GET            //Soap 1.2不带支持低版本  所以一本用soap 1.1
       2. Http-Post 
       3. Soap (http+xml)
     问题:1. 如何解析结果

2. 如何传递对象参数
- 推荐的访问方式
          在jdk 1.6 版本以后 ,通过jax-ws 包提供对webservice的支持 
	     - 该方式通过注解的方式来声明webservice 
	     - 通过 jdk EndPoint.publish()发布webserive服务
早期的版本 : jax-rpc (remote produce call)
webservice 纳入 w3c规范,其他的平台都支持该规范 :JEE\Php\.NET
	    都支持wsimport 方式 : 对远程的webservice生成本地代理,再通过本地代理
	                           来访问webservice!!!!!!!
        - wsimport 命令的位置: 
	   C:\Program Files\Java\jdk1.7.0_04\bin
	- 要求:
	  1. jdk的 版本要在 jdk 1.6.21及以上 
	  2. 操作系统安装的jdk版本 与 MyEclispe 及 默认指定的版本要一致
- wsimport使用: 
	  记得设置jdk\bin  环境变量  指定path 
           语法  wsimport [opations] <wsdl_uri>
	     - wsdl_uri:wsdl 的统一资源标识符
	     - d  :指定要输出的文件的位置
	     - s  :表示要解析java的源码 ,默认解析出的是class字节码 
	     - p  : 指定输出的包名
		  ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1.调用webService:不论是php,.net 、java 都会使用本地代理

2. Java 使用的是
wsimport -s ./ -p cn.it.ws.c http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?WSDL 获取服务然后调用

-----------------------------------------------------------发布WebService----------------------------------------------------------------------------------------
PS:WebService 是的发布是Java JDK中的一种,SE中的一种
PS:如果多次指定报错,就要这样添加注释

| 
 package bee.test; import javax.jws.WebMethod; import bee.model.Phone; public static void main(String[] args) {  | 
 
 | 
三、自定义及发布一个webservice服务
    - 声明 某个业务服务为webservice服务
       通过@webservice 注解来声明
    - 发布webservice服务
       Endpoint.publish()发布
    - 通过wsimport生成本地代理来访问自己发布的webservice
       wsimport
四、webservice传输实体对象
五、练习:
1. 调用教师机的ws服务
      步骤:
       1. 系统jdk环境与myeclipse jdk 环境一致  ,1.6.021以上  
       2. 知道服务端的WDSL路径
           http://192.168.114.10:8888/ws/phoneService?WSDL
       3. 命令行 wsimport -s ./ -p  cn.itcast.ws.d http://192.168.114.10:8888/ws/phoneService?WSDL
       4. 导入通过wsimport 解析的java类,再编写一个main测试
                MoblieOsInfoService ws=new MoblieOsInfoService();
		MoblieOsInfo phoneServicePort = ws.getMoblieOsInfoPort()
                 PhoneOs phone=phoneServicePort.getMobileOsInfo("android");
2. 创建自己的ws服务并发布、调用
   步骤: 1.声明webservice服务 (@webService)2. 发布webservice(EndPoint.publish) 3. 客户端访问(wsimport)
      1. 创建一个要通过webservice对外发布的java bean : PhoneService
      2. 在java 的入口main方法 通过EndPoint 发布一个服务端点
         String address1="http://192.168.19.10:8888/ws/phoneService";
         Endpoint.publish(address1, new PhoneService());
         System.out.println("adrress1的WSDL地址"+address1+"?WSDL");
六、WSDL文件介绍 :webservice服务说明


七、通过注解配置修改wsdl文件, 让它具有更好的可读性 
   需求:
     1. 想改方法的输入参数名、返回参数名
     2. 想改服务名,方法名
     3. 对该业务类的某些方法不想对外发布 
       -  默认只有public 修饰的方法会以webservice的形式对外发布 
	 而 private  受保护的,缺省的,都不会发布
       - 某些public 方法也不想对外发布
实现:注解配置修改wsdl文件
重点:
    1. webservice 的作用、规则、优点
    2. 专业名词
       wsdl 、 soap 、 xml
    3. wsimport 生成本地代理
    4. 通过JEE方式声明与发布webservice
       - 声明 :@webservice
       - 发布 :EndPoint
    5. WSDL文件描述 
    6. 通过修改注解,配置wsdl文件,增强可读性
-------------------------------------------------------------------------------------------------------------------------------------------
通过Jdk 
   声明 :@Webservice
     发布 :EndPoint 
      不足: 希望tomcat启动时,webservice服务能够开启 ,最好与Spring集成
              希望有一个webservice的服务列表 
   通过Webservice框架来实现 :axis2  、xfire
四、使用CXF框架,发布webservice服务,并使用客户端远程访问webservice
  1. CXF介绍 :soa的框架
    * cxf 是 Celtrix (ESB框架)和 XFire(webserivice) 合并而成,并且捐给了apache  
    * CxF的核心是org.apache.cxf.Bus(总线),类似于Spring的 ApplicationContext
    * CXF默认是依赖于Spring的
    * Apache CXF 发行包中的jar,如果全部放到lib中,需要 JDK1.6 及以上,否则会报JAX-WS版本不一致的问题
    * CXF 内置了Jetty服务器 ,它是servlet容器,好比tomcat
  2.CXF特点
    1. 与Spring、Servlet做了无缝对接,cxf框架里面集成了Servlet容器Jetty 
    2. 支持注解的方式来发布webservice
    3. 能够显示一个webservice的服务列表
    4. 能够添加拦截器:输入拦截器、输出拦截器 :
         输入日志信息拦截器、输出日志拦截器、用户权限认证的拦截器
---------------------------------------------WebService传输时xml, RestFul是传输json---------------------------------------------------------------
PS:打Jar 包


五、Spring+CXF整合来管理webservice
| 
 /**通过cxf框架发布webservice Inbound Message public static void main(String[] args) { bean.create();//创建,发布webservice  | 
实现步骤:
      1. 添加cxf.jar 包(集成了Spring.jar、servlet.jar ),spring.jar包 ,servlet.jar 包
      2. 编写业务类,通过CXF来发布webservice
         员工管理:
	   方法 :添加员工、查询员工
3. 添加一个CXF请求的 Servlet,用来处理webservice的请求 
           过滤的地址/ws/*
      4. 配置Spring的配置文件: applicationContext.xml ,把cxf的bean在spring配置
5. 在web.xml中配置 CXF的 Servlet , 添加spring的监听
6. 通过wsimport生成本地代理 ,访问webservice
六、 练习:
    Spring与CXF整合
     - 添加 cxf.jar、添加Spring框架、Servlet.jar包
     - web.xml 配置
       1. 配置CXF的Servlet,用来处理所有 webservice请求 
	  配置Servlet
	   <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
	   <url-pattern>/ws/*</url-pattern>
       2. 加载spring监听器
     - 业务类,通过cxf发布的webservice的业务bean
       员工管理webservice服务
	  1. 添加员工
	  2. 查询所有员工
	  3. 通过List<Employee> 来保存员工
     - spring 配置文件配置bean
        配置cxf 
     - 客户端访问
       测试
1.web.xml

2. 就这两个就可以了,Tomcat启动的时候服务就布上去了

--------------------------------------------------------------------------------------------------------
七、webservice测试工具 
     web service exprlorer
八、soap1.1与soap1.2区别
- Soa  :面向服务的架构,它是一种思想 
      service 1、service2 、service3  所有服务面向web,即插即用
      IBM大力提倡Soa架构 ,希望以组装电脑的方式来开发软件 
       - 提供各种服务的组件(webservice):硬盘、cpu 、内存条
       - 企业服务总线 (Enterprise service bus):主板

WebService 学习记录的更多相关文章
- webService学习记录
		
服务端配置1.新建web项目,导入xFire的jar包2.创建服务接口.实现类3.创建src->META-INF->service->service.xml 将实现类.接口配置到里面 ...
 - webService学习之路(三):springMVC集成CXF后调用已知的wsdl接口
		
webService学习之路一:讲解了通过传统方式怎么发布及调用webservice webService学习之路二:讲解了SpringMVC和CXF的集成及快速发布webservice 本篇文章将讲 ...
 - Quartz 学习记录1
		
原因 公司有一些批量定时任务可能需要在夜间执行,用的是quartz和spring batch两个框架.quartz是个定时任务框架,spring batch是个批处理框架. 虽然我自己的小玩意儿平时不 ...
 - Java 静态内部类与非静态内部类 学习记录.
		
目的 为什么会有这篇文章呢,是因为我在学习各种框架的时候发现很多框架都用到了这些内部类的小技巧,虽然我平时写代码的时候基本不用,但是看别人代码的话至少要了解基本知识吧,另外到底内部类应该应用在哪些场合 ...
 - Apache Shiro 学习记录4
		
今天看了教程的第三章...是关于授权的......和以前一样.....自己也研究了下....我觉得看那篇教程怎么说呢.....总体上是为数不多的精品教程了吧....但是有些地方确实是讲的太少了.... ...
 - UWP学习记录12-应用到应用的通信
		
UWP学习记录12-应用到应用的通信 1.应用间通信 “共享”合约是用户可以在应用之间快速交换数据的一种方式. 例如,用户可能希望使用社交网络应用与其好友共享网页,或者将链接保存在笔记应用中以供日后参 ...
 - UWP学习记录11-设计和UI
		
UWP学习记录11-设计和UI 1.输入和设备 通用 Windows 平台 (UWP) 中的用户交互组合了输入和输出源(例如鼠标.键盘.笔.触摸.触摸板.语音.Cortana.控制器.手势.注视等)以 ...
 - UWP学习记录10-设计和UI之控件和模式7
		
UWP学习记录10-设计和UI之控件和模式7 1.导航控件 Hub,中心控件,利用它你可以将应用内容整理到不同但又相关的区域或类别中. 中心的各个区域可按首选顺序遍历,并且可用作更具体体验的起始点. ...
 - UWP学习记录9-设计和UI之控件和模式6
		
UWP学习记录9-设计和UI之控件和模式6 1.图形和墨迹 InkCanvas是接收和显示墨迹笔划的控件,是新增的比较复杂的控件,这里先不深入. 而形状(Shape)则是可以显示的各种保留模式图形对象 ...
 
随机推荐
- 【转】Java中static关键字用法总结
			
1. 静态方法 通常,在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法 声明为static的方法有以下几条限制: · 它们仅能调用其他的static 方法. · 它 ...
 - RabbitMQ fanout类型的Exchange
			
就目前来说,Exchange是与消息发送端有关的,因为它可以指定将消息发送到哪个或哪些队列中. 本篇文章介绍的fanout类型就是指定将消息群发到与Exchange绑定的所有队列中. fanout这个 ...
 - 3.5 C++间接继承
			
参考:http://www.weixueyuan.net/view/6362.html 总结: 假设类C继承自类B,类B继承自类A.那么类C中的除了能够继承B类的成员函数和成员变量外,同样也能继承B类 ...
 - SQL-24 获取所有非manager员工当前的薪水情况,给出dept_no、emp_no以及salary ,当前表示to_date='9999-01-01'
			
题目描述 获取所有非manager员工当前的薪水情况,给出dept_no.emp_no以及salary ,当前表示to_date='9999-01-01'CREATE TABLE `dept_emp` ...
 - day 34 进程线程排序 抢票 初级生产者消费者
			
# 实现的内容 模拟购票 20个人买,就有一张购票查,的时候大家都看到,但是购买只能一人购买成功#利用互斥锁# from multiprocessing import Process,Lock# im ...
 - Linux:磁盘配额
			
磁盘配额 一.简略步骤显示 第一步:关闭虚拟机 第二步:编辑虚拟机设置--硬盘--添加 第三步:查看磁盘分区情况 fdisk -l 第四步:选择磁盘分区 fdisk /dev/sda2 第五步:选择磁 ...
 - 给视频加上 遮盖层, 移入隐藏, 移开 显示遮盖 ;;; mouseover ,和 mouseout
			
如下图所示: 主要就是 给遮盖定位 . 但是有一个问题就是 video的高度不是固定的 . 如果 video 和 遮盖 在一个 父级div里, 无法确定位置, 如果用js效果不是很好. 思路: v ...
 - 10.3.1 iOS启动画面横屏是怎么回事?
			
产生这个问题的原因是编译旧版Delphi建立的项目,二种解决方法: 1.用 10.3.1 重建空工程,再把使用的单元文件重新加进来.这个操作有点麻烦,尤其对于使用单元多的文件,不过,有种方法,就是先把 ...
 - springboot默认创建的bean是单实还是多例
			
转:https://blog.csdn.net/q1512451239/article/details/53122687 springboot默认创建的bean是单实还是多例 曾经面试的时候有面试官问 ...
 - strcmp,stricmp
			
strcmp,stricmp:原型:int strcmp(const void *s1, const void *s2);功能:比较字符串s1和s2是否相同,区分大小写. 说明:如果s1=s2则返回零 ...