Web Service总结

SOAP是一种基于XML的数据格式和HTTP POST的网络协议,用于解决跨平台、跨系统的分布式对象交互问题。它解决了传统HTTP协议在服务器间交互的安全性、复杂性和效率问题。AXIS是Apache的一个开源Web服务框架,用于发布和访问Web服务。AXIS通过WSDD文件配置服务和处理程序,提供服务部署和安全控制。示例中展示了AXIS的配置细节,包括全局配置、处理程序定义和服务发布。

目录

1.SOAP

1.1.SOAP协议简介

1.2.SOAP语法规则

1.3.为什么会有SOAP?

2.AXIS

2.1.AXIS官网解释

2.2.示例wsdd

2.3.访问发布的webservice


1.SOAP

1.1.SOAP协议简介

SOAP使用基于XML的数据结构和超文本传输协议(HTTP)的组合定义了一个标准的方法来使用Internet上各种不同操作环境中的分布式对象;

通俗理解就是SOAP是XML数据格式 + HTTP POST协议组合而成的一种网络协议,是HTTP POST协议的一种变种;

1.2.SOAP语法规则

SOAP 消息必须用 XML 来编码

SOAP 消息必须使用 SOAP Envelope 命名空间

SOAP 消息必须使用 SOAP Encoding 命名空间

SOAP 消息不能包含 DTD 引用

SOAP 消息不能包含 XML 处理指令

1.3.为什么会有SOAP?

客户端浏览器通过http get/post发送请求到服务器A,然后服务器A给予回执,这种场景下是没有问题的,但下面有个场景:

客户端浏览器发送HTTP POST请求到服务器A,然后服务器A解析参数之后,再去远程调用服务器B,那么会存在以下问题:

问题1:那是不是意味着服务器B还需要新建一个Web Servlet来接受来自服务器A的HTTP请求?会不会增大服务器B不必要的开发工作量?

问题2:服务器A发送HTTP请求之前,要不要发送一个登录HTTP来获取对应的权限呢?如果不用的话,那服务器B如何确保每一个HTTP请求的安全性?如果服务器A需要先提前发送一个登录HTTP的话,那服务器B是不是还要单独开发一套新增权限-分配权限-删除权限等整套的权限管理系统、新增用户-删除用户-维护用户等整套的用户管理系统、一整套WEB管理系统、一套数据库呢?那这套开发成本应该是由服务器A承担呢,还是服务器B承担呢?

问题3:如何确保服务器A到服务器B的参数传输过程中的安全性呢?

从我个人的角度来看,就想出了这几个问题,因此,实际情况下问题可能会更多,这就导致了传统的HTTP GET/POST根本无法满足这种业务场景,为此,人们发明了SOAP协议,来解决该场景下遇到的所有问题;

2.AXIS

2.1.AXIS官网解释

http://axis.apache.org/axis/java/reference.html#DeploymentWSDDReference

找到这个章节即可:Deployment (WSDD) Reference

2.2.示例wsdd

<?xml version="1.0" encoding="UTF-8"?>

<!-- deployment:一个根元素,告诉AXIS这是一个发布Webservice -->

<deployment name="defaultClientConfig" 

xmlns:java="http://xml.apache.org/axis/wsdd/providers/java" 

xmlns:handler="http://xml.apache.org/axis/wsdd/providers/handler"

xmlns="http://xml.apache.org/axis/wsdd/">

<!-- globalConfiguration:全局配置 -->

<globalConfiguration name="defaultClientConfig">

<!-- parameter:全局属性 -->

<!-- 管理员密码,由AdminService使用。 -->

<parameter name="adminPassword" value="admin" />

<parameter name="enableNamespacePrefixOptimization" value="false" />

<parameter name="disablePrettyXML" value="true" />

<parameter name="sendXsiTypes" value="true" />

<!-- true / false标志,用于控制是否发送多引用。 -->

<parameter name="sendMultiRefs" value="true" />

<!-- true / false标志,用于控制是否在消息中发送<?xml?>声明 -->

<parameter name="sendXMLDeclaration" value="true" />

<!-- 将此标志设置为true可打开Axis引擎中XML Schema(xsd)类型的首选项。 -->

<parameter name="dotNetSoapEncFix" value="true" />

<!-- 实现附件支持的类的名称。 默认值为org.apache.axis.attachments.AttachmentsImpl -->

<parameter name="attachments.implementation" value="org.apache.axis.attachments.AttachmentsImpl" />

<!-- requestFlow:全局请求处理程序,在实际处理程序处理请求之前先执行,有点类似于web工程下的Filter -->

<!-- requestFlow:子元素有:handler or chain -->

<requestFlow name="RequestFlow1">

<!-- 执行嵌入式部署 -->

<handler name="Handler1" type="java:org.apache.axis.handlers.JWSHandler">

<parameter name="scope" value="session" />

</handler>

<handler name="Handler2" type="java:org.apache.axis.handlers.JWSHandler">

<parameter name="scope" value="request" />

<parameter name="extension" value=".jwr" />

</handler>

</requestFlow>

</globalConfiguration>

 

 

<!-- handler:定义处理程序,并指示处理程序的类型 -->

<!-- URLMapper是HTTP特定的处理程序,通常在HTTP传输链上运行(默认情况下已部署)。 它用于根据URL进行服务分配- -->

<handler name="URLMapper" type="java:org.apache.axis.handlers.http.URLMapper" />

<handler name="LocalResponder" type="java:org.apache.axis.transport.local.LocalResponder" />

<!-- SimpleAuthentication处理程序将MessageContext传递给SecurityProvider(请参阅org.apache.axis.security),以使用SecurityProvider所需的任何信息(目前仅用户名和密码)对用户进行身份验证。 -->

<handler name="Authenticate" type="java:org.apache.axis.handlers.SimpleAuthenticationHandler" />

    

    <!-- transport:在服务器端定义传输。 当传入请求到达时,将调用服务器传输。

     服务器传输可以定义<requestFlow>和/或<responseFlow>元素,

     以指定在处理的请求(即传入消息)或响应(即传出消息)部分期间应调用的处理程序/链(此功能的作用与< 上面的service>元素)。-->

<transport name="http" type="">

<requestFlow name="RequestFlow1" type="">

<!-- URLMapper是HTTP特定的处理程序,通常在HTTP传输链上运行(默认情况下已部署)。 它用于根据URL进行服务分配- -->

<handler name="Handler1" type="URLMapper" />

<!-- HTTPAuthHandler接受HTTP特定的身份验证信息(现在仅是基本身份验证),并将其转换为用户名和密码的通用MessageContext属性。 -->

<handler name="Handler2" type="java:org.apache.axis.handlers.http.HTTPAuthHandler" />

</requestFlow>

</transport>

<transport name="local" type="">

<responseFlow name="ResponseFlow1" type="">

<handler name="Handler1" type="LocalResponder" />

</responseFlow>

</transport>

 

<service name="AdminService" type="" provider="java:MSG">

<parameter name="allowedMethods" value="AdminService" />

<parameter name="enableRemoteAdmin" value="false" />

<parameter name="className" value="org.apache.axis.utils.Admin" />

<namespace>http://xml.apache.org/axis/wsdd/</namespace>

</service>

<service name="Version" type="" provider="java:RPC">

<parameter name="allowedMethods" value="getVersion" />

<parameter name="className" value="org.apache.axis.Version" />

</service>

 

<!-- service:定义对外发布的服务 -->

<!-- service:下面的参数有:className、allowedMethods、allowedRoles、extraClasses -->

<service name="XXXXXXAccess" provider="java:RPC">

<parameter name="scope" value="Request" />

<parameter name="className" value="XXX.XXX.XXXX.XXXX.XXXX.axis.impl.XXXXXX" />

<parameter name="allowedMethods" value="*" />

<namespace>http://XXXX.XXXX.com/XXX/services/XXXXXXX</namespace>

</service>

</deployment>

2.3.访问发布的webservice

http://192.168.88.129:9080/xxx/services/AdminService?wsdl

http://192.168.88.129:9080/xxx/services/Version?wsdl

http://192.168.88.129:9080/xxx/services/XXXXXXAccess?wsdl

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值