首页 > 编程知识 正文

webservice还有人用吗(webservice菜鸟教程)

时间:2023-05-05 08:06:12 阅读:69951 作者:4750

什么是web服务? web服务是网络服务的直译,是与RPC相同的方式。 远程过程调用协议(RPC )--远程过程调用协议是一种在不了解底层网络技术的情况下通过网络从远程计算机程序请求服务的协议虽然客户端必须遵循TCP协议才能调用服务端,但web服务使用的是更高级别的HTTP协议,客户端访问服务器的目的是获取数据,而该数据是为了获取平台或语言web服务采用XML。 使用场景为权威机构提供的第三方小功能(天气、百度地图……)。

权威人员检索纤细的蜗牛无法获得的数据,并将其封装在ws服务器端。 纤细的蜗牛作为web服务的客户端调用和集成服务端的多个客户端数据

一些大型app应用公司(如腾讯)需要针对不同平台、pc浏览器、手机浏览器、手机app开发不同的客户端,客户端需要调用获取数据,prc、web服务器

如下图所示,在手机APP (没有页面,想要数据)的情况下,必须提供接口,以便呼叫方能够使用接口。 那么接口实现者和接口调用者之间必须遵循一个规范。 说白了,接口约束是为了统一规范。 下面介绍为什么要使用web服务。

解决异构系统中的孤立信息问题针对上面情况,我们可在企业系统里搭建一根总线—ESB(企业服务总线),用来连接企业里各个系统的服务,每个系统和总线连起来,用XML传输数据

企业中的所有服务都在总线上注册,并且必须在总线上找到服务,然后才能由其他系统调用服务。 也就是说,web服务ESB解决了每个系统不直接暴露web服务,而是直接暴露时大家相互依赖的问题。 随着系统流量的增加,服务管理变得麻烦,因此用web服务ESB解决问题。总结:webservice是一种基于http协议和XML技术,并使用WSDL描述和使用SOAP协议传输的异构系统解决方案

***下面简单说明。 基于jdk方法生成web服务* * *基于jdk生成web服务服务器端生成项目以创建此服务接口和实现类,并将本地服务标记为远程服务发布服务测试。 根据评论做一些事情。 /** *只要在一个接口中添加了@WebService,所有方法都将添加@WebMethod * @author,以梦想为马,wx dmj * @ webmethodoperationname=' ' exclude=true排除方法@ web服务@ soap绑定(style=style.RPC ) /默认文档, rpc是publicinterfaceihelloservice {//@ web param (name=' name ) ) x修改参数名称//@ webresult (name=' ret ' )修改返回值名称@ importJavaX.jws.web服务; import javax.jws.soap.soap绑定; @WebService标记就是远程服务类//endpoint接口指定接口//serviceName服务名portName端口名targetName限定名,实现类为接口创建遵循的接口实现类@ web service (endpoint interface=' com.ZJ.ws.JDK.server.tag.ihello service ), 服务名称=' hello service ' (publicclassihelloserviceimplimplementsihelloservice { @ overridepublicstringsayhi (字符串名称) } package com.ZJ.ws.JDK.server.tag; import javax.xml.ws.Endpoint; import com.ZJ.ws.JDK.server.tag.ihelloserviceimpl; //分发服务公共类发布(公共[ ] args ) endpoint.publish ((http://127.0.0.13360888/hh }} 服务发布成功后 通过浏览器访问地址 注意:jdk1.8 http://192.168.0.103:8888/hello 不能直接访问地址 要加上?wsdl 需要加一个描述

trong>


接下对刚刚出现的wsdl做个描述,以及访问结束后XML格式文件做个介绍:
wsdl简介
1.是什么
web service description language 网络服务描述语言,简单理解就是用来描述服务的
2.结构讲解
definitions 根
name:服务名称,类型+Service
targetNamespace:http://倒置包名
service:服务接口
<soap:address location=“http://127.0.0.1:8888/hello”/> 服务在哪个地址上能够被访问
不安的烤鸡ding:
<soap:不安的烤鸡ding transport=“http://schemas.xmlsoap.org/soap/http” style=“document”/>
transport:什么样的传输协议来调用
style=“document”:表示我们wadl文件遵循什么格式,默认document 还有RPC
portType:接口类型
描述了有哪些接口方法
message:消息
描述接口方法的参数和返回值消息
types:描述消息的类型和名称–在document才有,而rpc没有

基于jdk构建webservice client端 创建项目通过wsdl地址生成本地接口
使用jdk的一个工具wsimport-jdk不安的烤鸡,想在任意路径调用,需要配置path
wsimport -s . http://127.0.0.1:8888/hello?wsdl (通过命令生成本地代码)注意:不要把服务端关了通过生成一些类获取本地接口代理对象通过该本地代理对象的方法就能远程调用服务 /** * 获取本地接口代理对象并且完成调用 * @author 以梦为马 不负wxdmj * */public class Invoke {public static void main(String[] args) {//获取本地接口代理对象 HelloServiceImpl helloService=new HelloServiceImplService().getHelloServiceImplPort(); System.out.println(helloService.getClass()); //通过代理对象调用远程服务方法 System.out.println(helloService.sayHello("as"));;}}

**

再来说下基于第三方框架CXF实现webservice客户端和服务端


支持ESB+webservice
下载Apache 第三方框架:apache-cxf-3.2.12-src
需要配置环境变量:

因为它内置jetty所以还需要jettyjar包
因为服务端发布服务时需要jetty 而客户端只是调用服务不需要jetty
为什么要把jetty放个文件夹 因为后续如果用Tomcat 就不要jetty了

JaxWsServerFactoryBean 是支持注解的
Client-cxf

package com.zj.server.cxf;import javax.jws.WebService;@WebServicepublic interface IHelloService {String sayX(String name);} package com.zj.server.cxf;import javax.jws.WebService;@WebService(endpointInterface="com.zj.server.cxf.IHelloService")public class IHelloServiceImpl implements IHelloService{@Overridepublic String sayX(String name) {// TODO Auto-generated method stubreturn name+"测试============";}} package com.zj.server.cxf;import org.apache.cxf.jaxws.JaxWsServerFactoryBean;public class Publish {public static void main(String[] args) {/** * 1.创建JaxWsServerFactoryBean的对象 用于发布服务 * 2.设置服务发布地址 * 3.设置服务发布的接口 * 4.设置服务的发布对象 * 5.使用Create方法发布服务 */JaxWsServerFactoryBean factoryBean=new JaxWsServerFactoryBean();factoryBean.setAddress("http://127.0.0.1:9999/hi");factoryBean.setServiceClass(IHelloService.class);factoryBean.setServiceBean(new IHelloServiceImpl());factoryBean.create();System.out.println("发布服务成功");}}


配置好环境变量生成client代码 然后只需要留IHelloService接口代码

package cn.zj.ws.client.cxf;import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;public class Invoke {public static void main(String[] args) {//1.创建的对象,用于接收服务JaxWsProxyFactoryBean bean=new JaxWsProxyFactoryBean();//2.设置服务的发布接口,表示去哪里服务bean.setAddress("http://127.0.0.1:9999/hi");//3.设置服务的发布接口,使用本地的代理接口bean.setServiceClass(IHelloService.class);//通过create方法返回接口代理对象实例IHelloService helloService=(IHelloService)bean.create();//验证是否是代理对象System.out.println(helloService.getClass());//调用远程方法System.out.println(helloService.sayX("清新的云朵"));}}

最终完成基于第三方框架实现webservice,当然梳理比较粗,并且目前webservice是个比较老一点的技术。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。