定义


我们常常会听到。xx项目中用到了Web Service。那么。什么是Web Service呢?

首先让我们来了解一下Web Service。Web Service技术。就是能使得执行在不同机器上的不同应用无须借助附加的、专门的第三方软件或硬件, 就可相互交换数据或集成。根据Web Service规范实施的应用之间,不管它们所使用的语言、平台或内部协议是什么,都能够相互交换数据。

Web Service是自描写叙述、自包括的可用网络模块,能够执行详细的业务功能。


Web service是一个平台独立的。低耦合的,自包括的、基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言下的一个子集)标准来描写叙述、公布、发现、协调和配置这些应用程序,用于开发分布式的互操作的应用程序。


准备


将EJB公布成Web服务,在EJB容器中不是困难的事情,仅仅要容器实现了JavaEE的JAX-WS标准即可了,开发者要做的就是添加一点点有关WebService的注解。打包公布到应用容器即可。


步骤


创建Web Service

  • 建立一个POJO endpoint
服务端不用再强制规定WebService必须实现一个接口了。而一个普通的POJO+EJB注解的类就能够当做WebServiceserver类。


HelloWorld服务端代码

package com.foshanshop.ws;

import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding; @WebService(name="HelloWorld",
targetNamespace="http://com.foshanshop.ws",
serviceName="HelloWorldService")
@SOAPBinding(style=SOAPBinding.Style.RPC)
public class HelloWorldService { @WebMethod
public String sayHello(String name) {
System.out.println("client调用了server端的代码");
return name + "说:这是一个简单的Web測试服务! ";
}
}
@WebService 这个凝视放置在 Java 类的前面。声明这个类的部分方法能够被公布为 Web 服务。

@WebService 的属性用于设置 Web 服务被公布时的一些配置信息,经常使用的属性说明例如以下
    1. name
Web 服务的名字,WSDL中 wsdl:portType 元素的 name 属性和它保持一致。默认是 Java 类或者接口的名字。
    2. serviceName
Web 服务的服务名。WSDL 中 wsdl:service 元素的 name 属性和它保持一致,默认是Java 类的名字+”Service” 。

    3. targetNamespace
WSDL文件所使用的 namespace,该 Web 服务中所产生的其它 XML文档相同採用这个作为 namespace 。
@SOAPBinding()表示这个服务能够映射到一个 SOAP 消息中。 Style 用于指定SOAP 消息请求和回应的编码方式。
@WebMethod 这个凝视放在须要被公布成 Web 服务的方法前面。

  • 把endpoint定义成Servlet
Web.xml配置

<servlet>
<servlet-name>HelloWorldService</servlet-name>
<servlet-class>com.foshanshop.ws.HelloWorldService</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloWorldService</servlet-name>
<url-pattern>/HelloWorldService/*</url-pattern>
</servlet-mapping>
  • 把endpoint打包成war包
定义好Servlet之后。将服务端的类打成war包,部署到JBoss容器中。

注意:POJO endpoint 文件及 web.xml都是必须的。

经过上面的步骤,完毕了一个Web Service 的开发,以下我们通过Jboss管理平台查看刚才公布的 Web Service,打开链接 http://localhost:8080/jbossws,看到例如以下界面




点击“View a list of deployed services”后,就能够看到已经公布的Web Services了。例如以下图

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaGFwcHlsZWU2Njg4/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">


在上图中你能够点击 ServiceEndpointAddress 下的路径 http://127.0.0.1:8080/ws_01/HelloWorldService?wsdl 訪问他的 wsdl描写叙述。wsdl描写叙述文件在应用公布时由容器自己主动生成,输出例如以下

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaGFwcHlsZWU2Njg4/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" style="background-color:inherit">


创建client


首先新建一个名为ws_01_client 的 java 项目,然后新建一个Web Service Client,然后在WSDL URL中输入:http://127.0.0.1:8080/ws_01/HelloWorldService?wsdl。一路下一步就可以。


创建好client之后。写了一个測试类,代码例如以下

package com.foshanshop.ws;

import ws.foshanshop.com.HelloWorld;
import ws.foshanshop.com.HelloWorldService; public class TestHelloWorld { /**
* @param args
*/
public static void main(String[] args) {
HelloWorldService helloWorldService = new HelloWorldService();
HelloWorld helloWorld = helloWorldService.getHelloWorldPort();
System.out.println(helloWorld.sayHello("小星星"));
}
}

输出

  • client输出
小星星说:这是一个简单的Web測试服务!

  • 服务端输出
16:46:26,474 INFO [STDOUT] client调用了server端的代码


小结


事实上,EJB公布Web Service还是比較简单的。我这里仅仅是列出了一个用java语言调用Web Service的方法,其它也都是非常类似的。

实际上,WebService的主要目标是跨平台的可互操作性。为了达到这一目标,WebService全然基于XML(可扩展标记语言)、XSD (XMLSchema)等独立于平台、独立于软件供应商的标准。是创建可互操作的、分布式应用程序的新平台。

由此能够看出。在下面三种情况下。使用 WebService会带来极大的优点。

  • 跨防火墙的通信
在一个用户界面和中间层有较多交互的应用程序中,使用 WebService这样的结构,能够节省花在用户界面编程上20%的开发时间。

另外,这样一个由WebService组成的中间层。全然能够在应用程序集 成或其他场合下重用。最后,通过WebService把应用程序的逻辑和数据“暴露”出来,还能够让其他平台上的客户重用这些应用程序。

  • 应用程序集成
企业级的应用程序开发人员都知道。企业里常常都要把用不同语言写成的、在不同平台上执行的各种程序集成起来。而这样的集成将花费非常大的开发力量。通过WebService,应用程序能够用标准的方法把功能和数据“暴露”出来,供其他应用程序使用。
  • B2B的集成
用WebService来实现B2B集成的最大优点在于能够轻易实现互操作 性。仅仅要把业务逻辑“暴露”出来。成为WebService,就能够让不论什么指定的合作伙伴调用这些业务逻辑,而无论他们的系统在什么平台上执行。使用什么 开发语言。

这样就大大降低了花在B2B集成上的时间和成本。让很多原本无法承受EDI的中小企业也能实现B2B集成。

  • 软件和数据重用
软件重用是一个非常大的主题,重用的形式非常多,重用的程度有大有小。

最主要的形式是源码模块或者类一级的重用,还有一种形式是二进制形式的组件重用。


WebService在同意重用代码的同一时候,能够重用代码背后的数据。使用WebService,再也不必像曾经那样。要先从第三方购买、安装软件组 件,再从应用程序中调用这些组件;仅仅须要直接调用远端的WebService就能够了。


从以上论述能够看出。WebService在通过Web进行互操作或远程调用的时候是最实用的。只是。也有一些情况,WebService根本不能带来不论什么优点。
  • 单机应用程序
眼下,企业和个人还使用着非常多桌面应用程序。

当中一些仅仅须要与本机上的其他程序通信。在这样的情况下,最好就不要用WebService,仅仅要用本地的 API就能够了。COM非常适合于在这样的情况下工作,由于它既小又快。执行在同一台server上的server软件也是这样。

最好直接用COM或其他本地的API来 进行应用程序间的调用。当然WebService也能用在这些场合,但那样不仅消耗太大,并且不会带来不论什么优点。

  • 局域网的同构应用程序
在很多应用中。全部的程序都是用VB或VC开发的,都在Windows平台下使用COM,都执行在同一个局域网上。比如,有两个server应用程序须要相互通信。或者有一个Win32或WinForm的客户程序要连接局域网上还有一个server的程序。

在这些程序里,使用DCOM会比SOAP/HTTP有效得多。

与此相类似,假设一个.NET程序要连接到局域网上的还有一个.NET程序,应该使用.NETremoting。有趣的是。在.NETremoting 中。也能够指定使用SOAP/HTTP来进行WebService调用。只是不妨直接通过TCP进行RPC调用,那样会有效得多。


谈谈EJB是怎样公布Web Service的的更多相关文章

  1. CXF实战之在Tomcat中公布Web Service(二)

    服务接口及实现类请參考WebService框架CXF实战(一) 创建Maven Web项目,在pom.xml中加入CXF和Spring Web的引用,因为CXFServlet须要Spring Web的 ...

  2. Web Service学习-CXF开发Web Service的权限控制(二)

    Web Service怎样进行权限控制? 解决思路:server端要求input消息总是携带实username.password信息,假设没实username和password信息.直接拒绝调用 解决 ...

  3. Web Service学习-CXF开发Web Service实例demo(一)

    Web Service是什么? Web Service不是框架.更甚至不是一种技术. 而是一种跨平台,跨语言的规范 Web Service解决什么问题: 为了解决不同平台,不同语言所编写的应用之间怎样 ...

  4. web service与EJB的区别

    1.WebService可以说是跨平台的,因为它采用的是XML技术,说穿了就是把你的请求按照该WebServece的标准将参数传过去,然后服务器返回结果,当然了最重要的是参数的传递和结果的返回都是采用 ...

  5. Web Service概念梳理

    计算机技术难理解的很多,Web Service 对我来说就是一个很难理解的概念:为了弄清它到底是什么,我花费了两周的时间,总算有了一些收获,参考了不少网上的资料,但有些概念说法不一.我以w3c和 一些 ...

  6. Web Service和WCF的区别。其实二者不属于一个范畴!!!

    Web Service和WCF的区别 [1]Web Service:严格来说是行业标准,也就是Web Service 规范. 它有一套完成的规范体系标准,而且在持续不断的更新完善中. 它使用XML扩展 ...

  7. WCF、Net remoting、Web service概念及区别

    Windows通信基础(Windows Communication Foundation,WCF)是基于Windows平台下开发和部署服务的软件开发包(Software Development Kit ...

  8. Web Service和WCF的到底有什么区别

    [1]Web Service:严格来说是行业标准,也就是Web Service 规范,也称作WS-*规范,既不是框架,也不是技术. 它有一套完成的规范体系标准,而且在持续不断的更新完善中. 它使用XM ...

  9. 基于REST架构的Web Service设计

    来自: http://www.williamlong.info/archives/1728.html 先前我曾经介绍过利用Apache Axis实现基于SOAP的Web Service实现技术和相关代 ...

随机推荐

  1. AC日记——Pupils Redistribution Codeforces 779a

    A. Pupils Redistribution time limit per test 1 second memory limit per test 256 megabytes input stan ...

  2. window下安装tensowflow

    tensorflow0.12版本支持windows,但是需要python3.5.x.而我的本机只安装了Anaconda2.7版本.因此我们可以在Anaconda中新增Python3.5的环境. 首先, ...

  3. hadoop之hdfs及其工作原理

    hadoop之hdfs及其工作原理 (一)hdfs产生的背景 随着数据量的不断增大和增长速度的不断加快,一台机器上已经容纳不下,因此就需要放到更多的机器中,但这样做不方便维护和管理,因此需要一种文件系 ...

  4. spring计时工具类stopwatch用法

    public class Test { public static void main(String[] args) { StopWatch stopWatch = new StopWatch(); ...

  5. arcgis andriod Edit features

    来自:https://developers.arcgis.com/android/guide/edit-features.htm#ESRI_SECTION1_56C60DB71AF941E98668A ...

  6. apache一个IP绑定多个域名

    用ServerAlias <VirtualHost *:80>ServerAdmin i@kuigg.comDocumentRoot /www/kuigg.comServerName ku ...

  7. php 的$_POST 和$_REQUEST的区别

    发现$_POST 没数据,而$_REQUEST 有数据 ----------------------------------------- https://stackoverflow.com/ques ...

  8. AngularJS的简单表单验证

    代码下载:https://files.cnblogs.com/files/xiandedanteng/angularjsCheckSimpleForm.rar 代码: <!DOCTYPE HTM ...

  9. Unity Shaders and Effects Cookbook (3-4) 使用高光贴图

    在学习完上一节之后.已经了解了在Unity 中怎样实现一个高光 Shader ,可是会有一个问题.就是效果看起来不切实际,如以下的问题 我用一张图片贴到了Cube上面.然后用了一个高光材质,得到了下图 ...

  10. hihocoder 1032 manachar 求回文串O(n)

    #include <cstdio> #include <iostream> #include <algorithm> #include <queue> ...