WebService编程基础入门
对于webservice一种通俗易懂的解释,个人觉得对于刚刚接触的人来说是比较易于接受跟理解的:webservice 只就是POST类型的 HTTP请求;以往的HTTP请求都是 浏览器从FORM 里发出的
但是这种新的提交方法 再叫作POST表单请求就不合适了,起个新的名子吧,就叫WEBSERVICE,这种提交的格式就叫做 XML 。因为这东西 比 原来那个 username=tom&password="123456" 更容易被人读懂,而且可以存储表达更多东西。 至于于那个WDSL 就是一种格式规范,他就像是小学语文规定“每个新段落开头要空两个字” 没什么区别它规定了 提交WEBSERVICE 时 应该把 开头写什么标示,结尾写什么标示,..... =================================================================
大纲: 1,Web Service是什么 1 Web service是什么
UDDI 的目的是为电子商务建立标准;UDDI是一套基于Web的、分布式的、为Web Service提供的、信息注册中心的实现标准规范,同时也包含一组使企业能将自身提供的Web Service注册,以使别的企业能够发现的访问协议的实现标准。 其中包含注册用户企业的地址、联系方法、已知的企业标识。行业类别,也包含关于该企业所提供的Web Service的技术信息。
2 web service之咖啡连锁店采购的故事 网上有一个咖啡连锁店采购咖啡的故事,我结合自己的理解简化了一下这个故事,便于对Web Service的更好理解。 采购经理就将具体任务分配给软件工程师,软件工程师认为寻找新的咖啡提供商的最好办法是搜索UDDI注册中心.假定所有的咖啡供应商都在UDDI中注册了。(包含地址、联系方法、企业标识。行业类别,包含关于该企业所提供的Web Service的技术服务信息)。 3 Web Service可以做什么 Web Servcie最主要的优点是: 即跨语言,跨平台的不同系统之间的通信。 现在企业内部的很多系统集成,企业和企业之间的系统集成的问题。Web Service是主要的解决方案。(服务重用,降低开发成本,只开放自己愿意开放的服务)。 4 Web service 什么时候用 Web Service ,RMI,Socket 是现在主要的系统交互方式。 RMI为Java平台的分布式计算提供了一个简单而直接的模型。因为Java的RMI技术是基于Java平台的,所以它将Java平台的安全性和可移植性等优点带到了分布式计算中。RMI大大扩展Java的网络计算能力,它为编写基于分布式对象技术的企业级Internet/Intranet应用提供了强大的系统平台支持。远程方法调用作为Java分布式对象技术成为Java核心的API之一(在java.rmi.* 包)。RMI的引入,使得Java程序之间能够实现灵活的,可扩展的分布式通信。 Socket的英文原义是“孔”或“插座”。通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄。在Internet上的主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务。Socket正如其英文原意那样,象一个多孔插座。一台主机犹如布满各种插座的房间,每个插座有一个编号,有的插座提供220伏交流电, 有的提供110伏交流电,有的则提供有线电视节目。 客户软件将插头插到不同编号的插座,就可以得到不同的服务。 java中也提供有Socket编程方式,Socket和ServerSocket类库位于java.net包中。ServerSocket用于服务器端,Socket是建立网络连接时使用的。在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话。对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生不同级别。不管是Socket还是ServerSocket它们的工作都是通过SocketImpl类及其子类完成的。 RMI是JAVA的首选远程调用协议,非常高效稳定,特别是在少数据量的远程调用方面,与其他通讯协议的差距尤为明显。Web Service的效率是其1/10 RMI与Socket相比,传输相同的有效数据,RMI需要占用更多的网络带宽资源。 一旦你的应用需要在client与server之间传输大量的数据,极端的,比如FTP应用,则RMI是不适合的,我们应该使用 Socket。
RMI技术比较socket的网络编程主要有以下几个方面: Socket的使用主要应用于c/s的系统架构中。 Web Service 是基于SOAP的服务,实现起来最简单,而且交互的系统没有语言限制。
在搭建应用实现方面的容易程度方面 应用容易程度 Web Service>RMI>Socket 5 Web Service如何构建和应用 在 java语言方面现在主要的Web Service框架是Axis2,Xfire,Cxf webservice编程基础―cxf (还没花时间好好研究)博客分类:WebSevice
cxf
webservice
cxf webservice
最近研究了一下cxf的使用,主要的步骤如下:
一, 下载最新的cxf包apache-cxf-2.6.2.tar.zip,并解压,有一个lib文件,里面的jar包,就是webservice需要的(不完全需要,看你的应用,但是懒的分),加载进你的webservice的工程即可。 二, 配置两个配置文件,为beans.xml和web.xml,内容如下: beans.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd"> <import resource="classpath:META-INF/cxf/cxf.xml" /> <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" /> <import resource="classpath:META-INF/cxf/cxf-servlet.xml" /> <jaxws:endpoint id="HelloWorld" address="/HelloWorld" implementor="com.demo.HelloWorldImpl"/> </beans> 需要注意的是,上面红色的部分,其中,id不用管,主要是和spring集成需要的吧,address就是你的服务名,这里配置为HelloWorld。Implementor配置的是服务的实现类,这里是com.demo包里的类HelloWorldImpl。 Web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:j2ee="http://java.sun.com/xml/ns/j2ee"> <context-param> <param-name>contextConfigLocation</param-name> <param-value>WEB-INF/beans.xml</param-value> </context-param> <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> <servlet-name>CXFServlet</servlet-name> <servlet-class> org.apache.cxf.transport.servlet.CXFServlet </servlet-class> </servlet> <servlet-mapping> <servlet-name>CXFServlet</servlet-name> <url-pattern>/services/*</url-pattern> </servlet-mapping> </web-app> 上面红色部分是在weblogic配置需要主要的(在上一篇文章中提过)。 下面是服务端的代码: HelloWorld.java: package com.demo; import java.util.ArrayList; import java.util.List; import javax.jws.WebParam; import javax.jws.WebService; @WebService public interface HelloWorld { //@WebParam(name="text",targetNamespace="http://demo.com/") String sayHi(@WebParam(targetNamespace="http://demo.com/")String text); String sayHiToUser(@WebParam(targetNamespace="http://demo.com/")User user); ArrayList<String> SayHiToUserList(@WebParam(targetNamespace="http://demo.com/")List<User> userList); } HelloWorldImpl.java package com.demo; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; //注解 //@WebService(endpointInterface="com.demo.HelloWorld",serviceName="HelloWorld") public class HelloWorldImpl implements HelloWorld { Map<Integer,User> users = new LinkedHashMap<Integer,User>(); public String sayHi(String text) { return "Hello " + text; } public String sayHiToUser(User user) { users.put(users.size()+1,user); return "Hello "+ user.getName(); } public ArrayList<String> SayHiToUserList(List<User> userList) { String[] result = new String[userList.size()]; ArrayList<String> list = new ArrayList<String>(); int i=0; for(User u:userList) { result[i] = "Hello " + u.getName(); list.add(result[i]); i++; } return list; } } 注意在HellWorld.java中@WebService是表明如下的接口是webservice接口,不能删除。如果不加@WebParam(targetNamespace)以指定参数的命名空间,用xfire根据wsdl生成客户端时,会出现错误。原因为: 查看soap信息,发现在soap信息中多加入了namespace:ns2。如下:<ns2:operation xmlns:ns4="" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns2="url2" xsi:type="ns4:url4"> 原因是服务器端的operation是没有定义targetNamespace,而xfire生成客户端时,如果也没有定义targetNamespace,它会默认的取Service的targetNamespace。 部署在Weblogic时,可能会出现jar包冲突: 解决办法是: 在startWebLogic.cmd。配置: set CLASSPATH_CXF=E:JavaWorkSpaceCXFServer2WebRootWEB-INFlibgeronimo-ws-metadata_2.0_spec-1.1.3.jar set CLASSPATH=%CLASSPATH_CXF%;%CLASSPATH%;%MEDREC_WEBLOGIC_CLASSPATH% 大概就是这些了,很容易吧。 PS:使用xfire调用cxf的服务时,如果传递List类型时,可能会出现问题,不知道什么原因,麻烦哪位大哥知道,告诉我,我们一起学习吧。(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |