webService使用

1. 认识webservice

WebService定义: 顾名思义就是基于Web的服务。它使用Web(HTTP)方式,接收和响应外部系统的某种请求。从而实现远程调用。

Webservice理解:我们可以调用互联网上查询天气信息Web服务,然后将它嵌入到我们的程序(C/S或B/S程序)当中来,当用户从我们的网点看到天气信息时,他会认为我们为他提供了很多的信息服务,但其实我们什么也没有做,只是简单了调用了一下服务器上的一段代码而已。WebSerice可以将你的服务(一段代码)发布到互联网上让别人去调用,也可以调用别人机器上发布的WebService,就像使用自己的代码一样.。

2. Webservice调用

2.1webservice几个名词

名词1:XML. Extensible Markup Language -扩展性标记语言

         XML,用于传输格式化的数据,是Web服务的基础。

         namespace-命名空间。

         xmlns=“http://itcast.cn”使用默认命名空间。

         xmlns:itcast=“http://itcast.cn”使用指定名称的命名空间。

 

名词2:WSDL – WebService Description Language – Web服务描述语言。

         通过XML形式说明服务在什么地方-地址。

         通过XML形式说明服务提供什么样的方法 – 如何调用。

 

名词3:SOAP-Simple Object Access Protocol(简单对象访问协议)

         SOAP作为一个基于XML语言的协议用于有网上传输数据。

         SOAP= 在HTTP的基础上+XML数据。

         SOAP是基于HTTP的。

         SOAP的组成如下:

                   Envelope– 必须的部分。以XML的根元素出现。

                   Headers– 可选的。

                   Body– 必须的。在body部分,包含要执行的服务器的方法。和发送到服务器的数据。

名词4:UDDI (Universal Description, Discovery, and Integration) 是一个主要针对Web服务供应商和使用者的新项目。

在用户能够调用Web服务之前,必须确定这个服务内包含哪些商务方法,找到被调用的接口定义,还要在服务端来编制软件,UDDI是一种根据描述文档来引导系统查找相应服务的机制。

UDDI利用SOAP消息机制(标准的XML/HTTP)来发布,编辑,浏览以及查找注册信息。

它采用XML格式来封装各种不同类型的数据,并且发送到注册中心或者由注册中心来返回需要的数据。

2.2 webservice服务网址

Webservice服务网站:http://www.webxml.com.cn

2.3  WSDL解析

Wsdl文档从下往上读

Types - 数据类型定义的容器,它使用某种类型系统(一般地使用XML Schema中的类型系统)。(入参和出参的数据类型)
 Message - 通信消息的数据结构的抽象类型化定义。使用Types所定义的类型来定义整个消息的数据结构(入参和出参)。
 Operation - 对服务中所支持的操作的抽象描述,一般单个Operation描述了一个访问入口的请求/响应消息对(方法)。
 PortType- 对于某个访问入口点类型所支持的操作的抽象集合,这些操作可以由一个或多个服务访问点来支持(服务类)。
Binding- 特定服务访问点与具体服务类的绑定(不看内容,看关系)。
Port- 定义为webservice单个服务访问点。
Service-相关服务访问点的集合。

2.4生成客户端代码方式调用webservice

1. wsimport是jdk自带的,可以根据wsdl文档生成客户端调用代码的工具.当然,无论服务器端的WebService是用什么语言写的,都将在客户端生成Java代码,服务器端用什么写的并不重要。

3. wsimport.exe位于JAVA_HOME\bin目录下.

常用参数为:-d<目录>  - 将生成.class文件。默认参数。

•    -s<目录>  -将生成.java文件和class文件。

•    -p<生成的新包名> -将生成的类,放于指定的包下。

•    (wsdlurl) - http://server:port/service?wsdl,必须的参数。

示例:

C:/> wsimport –s . http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl

4.注意:-s不能分开,-s后面有个小点,用于指定源代码生成的目录。点即当前目录。

如果使用了-s参数则会在目录下生成两份代码,一份为.class代码。一份为.java代码。

.class代码,可以经过打包以后使用。.java代码可以直接Copy到我们的项目中运行。

调用webservice步骤

1)      打开WSDL文档

2)      从下往上读WSDL文档,先找到Services(服务访问点集合),根据Services里面binding属性找到binding元素,再根据binding元素的type属性找到绑定的portType(服务类)

3)      根据WSDL的地址生成客户端代码wsimport -s . -p com.rl.trans d:/wsCode/EnglishChinese.wsdl

4)      把客户端代码拷贝到项目中

5)      创建服务访问点集合对象

6)      根据服务访问点获得服务类

7)      调用服务类的方法

3. jdk发布webservice服务

注意:用Jdk1.6.0_21以后的版本发布一个WebService服务.

说明:      在JDK1.6中JAX-WS规范定义了如何发布一个webService服务。

                     JAX-WS是指Java Api for XML –WebService.

与Web服务相关的类,都位于javax.xml.ws.*包中。

主要类有:

a)      @WebService - 它是一个注解,用在类上指定将此类发布成一个webservice服务,如下所示:

@WebServicepublic class HelloServer {/*** 1.需要方法权限是public* 2.不能是final类型* 3.方法不能是静态的* 4.服务类至少有一个方法* @paramname*@return*/@WebMethod(exclude=false)public String sayHello(String name){return name + " hello!";}@WebMethod(exclude=false)public String sayBye(String name){return name + " bye!";}}

b)      Endpoint – 此类为端点服务类,它的方法publish用于将一个已经添加了@WebService注解对象绑定到一个地址的端口上。Endpoint是jdk提供的一个专门用于发布服务的类,它的publish方法接收两个参数,一个是服务的地址,二是提供服务的类。它位于javax.xml.ws.*包中。

static Endpoint.publish(String address,Object implementor) 在给定地址处针对指定的实现者对象创建并发布端点。

   public static void main(String[] args) {

      //jdk发布webservice服务,第一个参数服务地址,第二个参数具体服务类

      Endpoint.publish("http://127.0.0.1:8080/hello",new HelloServer());

   }

其他注意事项:

1)      给类添加上@WebService注解后,类中所有的非静态方法都将会对外公布。不支持静态方法,final方法。

2)      如果希望某个方法(非static,非final)不对外公开,可以在方法上添加@WebMethod(exclude=true),阻止对外公开。

3)      如果一个类上,被添加了@WebService注解,则必须此类至少有一个可以公开的方法,否则将会启动失败。

4)      服务类中不能没有方法

5)      @WebMethod(exclude=true)屏蔽方法

转载于:https://www.cnblogs.com/zhang-bo/p/8778241.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/414298.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

工作261:ele-layont布局使用

<!--页面主体布局--> <template><el-container class"layout"><!--头部组件--><el-header class"element-header" style"height: 80px;line-height: 80px"><global-header /></el-header><el-con…

68-Flutter中极光推送的使用

1、申请极光账号和建立应用 极光推送的官方网址为&#xff1a;https://www.jiguang.cn/ 注册好后&#xff0c;进入服务中心,然后再进入开发者平台&#xff0c;点击创建应用。 这时候会出现新页面&#xff0c;让你填写“应用名称”和上传“应用图标”。 创建完成&#xff0c;极…

工作275:表单验证重置

/*3GY歌谣表单验证 通过继续前行*/this.$refs["form"].validate(valid > {if (valid) {setTimeout(() > {/*声明变量*/let method postAction;/*声明url* position()* *//*url/user*/let url this.url.add;/*4 判断是否有id 确定新增还是编辑 根据表单数据是…

被引用的外部JS存在window.onload时,判断当前页面是否已存在window.onload,并进行相应处理...

如果页面a.html引用了b.js&#xff0c;b.js里的方法需要在页面资源加载完成后执行&#xff0c;即在window.onload里执行&#xff1b;这时如果a.html里使用了window.onload方法&#xff0c;b.js就不能重复调用这个方法了&#xff0c;因为window.onload不能同时使用多个&#xff…

new String(123) 创建了几个对象?

String 对象可谓再熟悉不过了&#xff0c;与此相关的面试题经常会引出内存性能优化的问题&#xff0c;本篇主要以 new String("123") 创建了几个对象为例记录。 一、你能回答正确吗 String a "123"; 如上定义的为常量&#xff1b; String b a "456&…

如何优化网站页面提高网页的加载速度

网站要想加载快无非就是减少http请求次数&#xff0c;下面说一下具体做法&#xff1a; 1&#xff1a;字符集声明 如果<head>部分未定义字符集&#xff0c;将增加页面渲染次数&#xff0c;速度减慢。 2&#xff1a;Meta信息完善程度 建议网站meta信息填写完整 3&…

工作263:弹性布局 修改样式

<div class"container" style"display: flex;flex-direction: column"><!-- <el-radio-group v-model"mode">--><div ><!-- <el-radio-button class"login-btn" label"0">营销端</el…

MongoDB系列四(索引).

一、索引简介 再来老生常谈一番&#xff0c;什么是索引呢&#xff1f;数据库索引与书籍的索引类似。有了索引就不需要翻整本书&#xff0c;数据库可以直接在索引中查找&#xff0c;在索引中找到条目以后&#xff0c;就可以直接跳转到目标文档的位置&#xff0c;这能使查找速度提…

并发编程之多线程线程安全(上)

1、为什么有线程安全问题&#xff1f; 当多个线程共享同一个全局变量或静态变量&#xff0c;做写的操作时&#xff0c;可能会发生数据冲突问题&#xff0c;也就是线程安全问题。但是做读操作是不会发生数据冲突问题。 案例&#xff1a;现在有100张火车票&#xff0c;有两个窗口…

[PAT乙级]数字分类 (20)

题目描述 给定一系列正整数&#xff0c;请按要求对数字进行分类&#xff0c;并输出以下5个数字&#xff1a;A1 能被5整除的数字中所有偶数的和&#xff1b;A2 将被5除后余1的数字按给出顺序进行交错求和&#xff0c;即计算n1-n2n3-n4...&#xff1b;A3 被5除后余2的数字的个…

怎样在php中使用PDF文档功能

写给Hunte: 好久不在网上见你,真有点说不出来的感觉,没有hunte的phpuser.com什么也不是. 转了你站上的两篇文章, 特翻了一篇了以示致歉. ---------------------------------------------------- 原作者:Perugini Luca (www.phpbuilder.com) 译者:znsoft (http://www.phpease.co…

并发编程快速入门

1、线程与进程的区别 进程是所有线程的集合&#xff0c;每一个线程是进程中的一条执行路径。 比方&#xff1a;通过查看 windows 任务管理器中的列表&#xff0c;我们可以把运行在内存中的 exe 文件理解成进程&#xff0c;进程是受操作系统管理的基本运行单元。 2、为什么要…

工作275:表单验证层级添加

<template><!--绑定了一个 控制是否为全屏fullscreen close-on-click-modal 是否通过点击model进行关闭 visible是否显示弹出框 close关闭按钮 --><el-dialog :title"fullTitle" width"80%" :fullscreen"false" :close-on-click-…

Python 黑帽子第二章运行截图

转载于:https://www.cnblogs.com/blankicefire/p/8796158.html

公司网页添加旺旺,状态不正确

这两天在给公司做的网站添加旺旺&#xff0c;在阿里巴巴官网生成代码之后复制到网页。想试试旺旺的状态是否正确&#xff0c;登录旺旺之后一直都是不在线状态&#xff0c;如下图&#xff1a; &#xff0c; 到官网问客服之后得到的答复如下&#xff1a; 如果您登录了阿里旺旺…

并发编程之多线程线程安全(下)

1、什么是 Volatile&#xff1f; volatile 是一个类型修饰符&#xff0c;具有可见性&#xff0c;也就是说一旦某个线程修改了该被 volatile 修饰的变量&#xff0c;它会保证修改的值会立即被更新到主存&#xff0c;当有其他线程需要读取时&#xff0c;可以立即获取修改之后的值…

工作265:v-model实现原理 自定义组件使用v-model

v-model只是一个语法糖&#xff0c;等于:valueinput&#xff0c;真正的实现靠的还是&#xff1a; &#xfeff;v-bind:绑定响应式数据&#xff0c;触发 input 事件并传递数据 (核心和重点) 1其实和下面一样的 <input :value“something” input“something $event.target…

关于CI框架引入CSS与JS文件

</pre>最近用了一下CI框架&#xff0c;使用到了bootstrap&#xff0c;引入CSS文件的时候一直不生效&#xff0c;琢磨这找到了原因。<p></p><p>首先&#xff0c;在根目录找到.htaccess文件&#xff0c;修改为如下内容</p><p></p><…

视图转为表

create table t as select * from view转载于:https://www.cnblogs.com/jycjy/p/8796841.html

idea中隐藏.iml文件

在创建父子工程或者聚合工程时产生的大量 .iml 文件&#xff0c;有时会对我们的操作产生干扰&#xff0c;所以&#xff0c;一般情况下&#xff0c;我们都将其隐藏掉&#xff0c;步骤如下&#xff1a; File——>settings——>Editor——>File Types——>Ignore fil…