如何写webservice接口一个简单的Web Service

php脚本(3)
这是我电某专业课上留的小作业,写一个简单的webservice,我这里就用php实现了。
首先,php版本需要是5.0以上,这样才能使用php内置的soap。之后请到c:/windows下的php.ini文件中,将extension=php_soap.dll和extension=php_openssl.dll前的分号去掉,再将php安装文件夹下的ext文件夹下的php_soap.dll文件拷贝到windows的system32目录下,然后重启Apache服务。这样就可以使用php的soap了。
这里编写服务端和客户端。服务端注册soap服务给客户端调用,代码如下。目前PHP并不支持动态生成wsdl文件,但是可以使用无wsdl模式,使用参数来传递要使用的信息。
// 这里用PHP建立一个SOAP服务
class math{
public function add($a, $b){
return $a + $b;
public function sub($a, $b){
return $a - $b;
public function div($a, $b){
if ($b == 0) {
throw new SoapFault(-1, &Cannot divide by zero!&);
return $a/$b;
$server = new SoapServer(null, array(&location&=&&http://localhost:8080/soapServer.php&,'uri'=&&server.php&));
$server-&setClass(&math&);
$server-&handle();
客户端的代码如下,使用的是无wsdl文件的模式。
$client = new SoapClient(null,array('location'=&&http://127.0.0.1:8080/soapServer.php&,&uri&=&&server.php&));
    $result = $client-&div(8,2);
    echo &The div answer is: $result&br&&;
    $result = $client-&add(8,2);
    echo &The add answer is: $result&br&&;
    $result = $client-&sub(8,2);
    echo &The sub answer is: $result&br&&;
} catch (Exception $ex) {
    echo &An error was caught:{$ex-&getMessage()}&;
然后在浏览器上访问,就会得到如下的结果。

参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:29521次
排名:千里之外
原创:51篇
评论:22条
(2)(1)(1)(1)(1)(4)(1)(4)(3)(3)(2)(6)(4)(3)(7)(5)(3)(1)查看: 21928|回复: 35
精华1在线时间68 小时帖子主题UID187794积分2020技术分1360 资源分25 分享激情345 博客好友记录相册
知县, 积分 2020, 距离下一级还需 2980 积分
UID187794积分2020
首先表明,本人对于IOS目前还是一个小白,最近有心抽空出来学习下IOS的开发。看着活跃的论坛气氛,本人深入其中。
鉴于目前大多数IOS设备都可以需要与互联网进行数据交换,认证。我就发挥点我的特长,本人一直在搞java,电子商务等业务。
现在就抽空给大家写一个,如何创建自己的一个webservice接口,好让ios创建一个webservice请求对象来进行webservice的调用。
另外,在利用tomcate搭建一个简单的Http Basic Authentication 认证。这个一般与用户名,密码校验程序有关。
专业名词,webservice,Http Basic Authentication,请参考相关百度文档。
ok,闲话少说,开始。
工具:tomcate6.0,Eclipse(j2ee)的那个版本,官网上直接下。
知识点扫盲:
根据 RFC2617 的规定,HTTP 有两种标准的认证方式,即,BASIC 和 DIGEST。HTTP Basic Authentication 是指客户端必须使用用户名和密码在一个指定的域 (Realm) 中获取认证。本文将介绍 HTTP Basic Authentication 在不同的应用服务器上的实现方法,并着重介绍不同 Web services 的实现是如何使用 HTTP Basic Authentication 来增强安全性的。通过主流 Web services 服务实现来测试 HTTP Basic Authentication:通过 Apache Tomcat + Axis 来讲述如何在 Apache Tomcat 上配置 HTTP Basic Authentication,并使用 Apache Axis 实现的 Web services 加以测试;
正如&HTTP Basic Authentication&这个名字,它是 Authentication( 认证 ) 中最简单的方法。长期以来,这种认证方法被广泛的使用。当你通过 HTTP 协议去访问一个使用 Basic Authentication 保护的资源时,服务器通常会在 HTTP 请求的 Response 中加入一个&401 需要身份验证&的 Header,来通知客户提供用户凭证,以使用资源。如果你正在使用 Internet Explorer 或者 Mozilla Firefox 这样的可视化浏览器来访问需要认证的资源,浏览器会弹出一个窗口,让你输入用户名和密码,如果所输入的用户名在资源使用者的验证列表,并且密码完全正确,此时,用户才可以访问受限的资源。那么什么是 HTTP Basic Authentication 呢?如何在不同的服务器上配置 Basic Authentication 呢?下面本文将展开介绍。
HTTP Basic Authentication 介绍
HTTP BASIC 认证的基本流程如图 1 所示,
12:00:02 上传
HTTP Basic Authentication 是指客户端在使用 HTTP 协议访问受限资源时,必须使用用户名和密码在一个指定的域 (Realm) 中获取认证。在正式开始之前,我们需要明白以下名词的含义:
1.Authentication,即认证,验证。它是一种确认的过程,通过这样的认证过程,你可以确定某物体是不是它所声称的那种物体。这通常会涉及到用户名和密码,也可能是身份证明,或生物特征,如视网膜等。
2.Realm,即域。一个 Realm 就是一系列用户名和密码的“数据库”,它通常用来保存、识别某个或某些 Web 应用中有效的用户和密码。它还定义了每个有效用户所对应的角色。
Web services 客户端访问受限 Web services 服务流程
12:00:02 上传
下面,本文将以 Tomcat 何 WebSphere Application Server 为例,分别讲述如何配置 Web services 的 endpoint 为受限资源,并使用 Web services 静态和动态客户端分别加以测试。
精华1在线时间68 小时帖子主题UID187794积分2020技术分1360 资源分25 分享激情345 博客好友记录相册
知县, 积分 2020, 距离下一级还需 2980 积分
UID187794积分2020
为 Tomcat 配置 Basic Authentication
本节将详细讲述如何在 Tomcat 下使用 Basic Authentication 来增强 Axis 实现的 Web services 访问的安全性。本文使用 Eclipse 来开发相关的例子,在这里假设您已经安装了相关的环境。
创建 Web services Provider 应用
在 Eclipse 中新建一个 Dynamic Web Project,并将其命名为“TomcatAxis”如图 3 所示:
图 3. 创建动态 WEB 工程
12:00:18 上传
该工程的目录结构如图 4 所示:
12:00:18 上传
为 Web services 添加实现
创建一个基于 Axis 实现的 Web Service,本文采取“Bottom up Java bean Web Service”方式创建,其具体操作过程为:
1.创建该 Web services 的实现类,代码如下
清单 1. Web services Provider 实现代码
package sample.
public class ServiceImpl {
& &* return the summation of the two integer arguments
& &* @param addend
& &* @param augend
& &* @return
&&public int sum(int addend, int augend) {
& & return addend +
2.基于该实现类,创建 Web Service,如图 5 所示
12:00:18 上传
精华0在线时间14 小时帖子主题UID68533积分2373技术分1960 资源分30 分享激情137 博客好友记录相册
知县, 积分 2373, 距离下一级还需 2627 积分
UID68533积分2373
我也在研究web service
有服务器端和客户端的代码吗?
精华1在线时间68 小时帖子主题UID187794积分2020技术分1360 资源分25 分享激情345 博客好友记录相册
知县, 积分 2020, 距离下一级还需 2980 积分
UID187794积分2020
成上述步骤后,会在 /TomcatAxis/WebContent/wsdl/ 目录下创建一个名称为“ServiceImpl.wsdl”的 WSDL 文件。
3.将 Web Application 部署到 Tomcat 上,使用 Eclipse 自带的 Web services 测试工具“Web services Explorer”来测试所创建的 Web services 是否能被使用,如图 6 所示
12:02:14 上传
测试所创建的 Web services(反键点击....wsdl文件,会有一个list的操作,选取test webservice)
在确认所创建的 Web services 能够正常使用后,需要为 Web Application 配置 Basic Authentication。
精华1在线时间68 小时帖子主题UID187794积分2020技术分1360 资源分25 分享激情345 博客好友记录相册
知县, 积分 2020, 距离下一级还需 2980 积分
UID187794积分2020
为 Web Application 配置 Basic Authentication:
1.打开 Tomcat 安装目录下的“conf”文件夹,修改文件“tomcat-users.xml”,该文件是用来存储 Tomcat 预加载的用户和角色定义的,此文件即是上文提到的 Realm。在“&tomcat-users&”中加入如下用户和角色:
清单 2. 定义用户及其角色
& & & & & & & & & & & & & & & && &
&&&!-- Web services invoker role --&
&&&role rolename=&WsInvokerRole&/&
&&&!-- Web services invokers/users --&
&&&user username=&wsaxis& password=&wsaxis& roles=&WsInvokerRole&/&
2.打开 Web 应用“TomcatAxis”的部署描述符:web.xml 文件,并在“&web-app&”中加入如下片段:
清单 3. 配置安全资源
& & & & & & & & & & & & & & & && &
&&&!-- configurations for BASIC Authentication --&
&&&security-constraint&
& & &web-resource-collection&
& && &&web-resource-name&All Web services Endpoints&/web-resource-name&
& && &&url-pattern&/services/*&/url-pattern&
& & &/web-resource-collection&
& & &auth-constraint&
& && &&description&Web services invokers are allowed doing invocation&/description&
& && &&role-name&WsInvokerRole&/role-name&
& & &/auth-constraint&
&&&/security-constraint&
&&&!-- authentication method --&
&&&login-config&
& & &auth-method&BASIC&/auth-method&
& & &realm-name&Realm of Web services Invokers&/realm-name&
&&&/login-config&
在“&security-constraint&”片段内,定义了改 Web Application 需要保护的资源,可以通过“&url-pattern&”来定义符合一定 URL 样式的资源,上述片段的定义,保护了所有 Web services 的 endpoints。
“&login-config&”片段定义了采取 BASIC 认证方式,其中“&realm-name&”只在 BASIC 认证方式下有效,它分配安全领域名,此名称供浏览器用于对话框标题,且为 Authorization 头部的一部分。
3.重启 Tomcat,骤重新测试该 Web Service,将有如图 7 提示框,提示输入用户名和密码:输入之前所定义的 wsaxis 用户名及其密码后,点击 OK,Web services 将会被调用。否则将无法正常调用到 Web Service。
12:04:01 上传
精华1在线时间68 小时帖子主题UID187794积分2020技术分1360 资源分25 分享激情345 博客好友记录相册
知县, 积分 2020, 距离下一级还需 2980 积分
UID187794积分2020
测试 Tomcat 下 Basic Authentication
通常 Web services 可以有两种调用方式,即静态调用方式和动态调用方式。下面将分别介绍如何使用这两种方式验证 Basic Authentication 是否正常工作。
静态调用方式测试
首先,新建一个 Java Project,命名为“TomcatAxisClient”, 如图 8
12:04:17 上传
其次,将前文所声称的 Web services 的 WSDL 的 URL 作为参数,生成 Web services 客户端,
12:04:17 上传
精华1在线时间68 小时帖子主题UID187794积分2020技术分1360 资源分25 分享激情345 博客好友记录相册
知县, 积分 2020, 距离下一级还需 2980 积分
UID187794积分2020
完成上述操作后,将有如下结构的 Web services 客户端类生成,
使用上述客户端类,就可以实现 Web services 的调用。现在,需要创建一个测试类,实例化客户端类,调用 Web Service。类名为“sample.test.client.runable.StaticClientTest”,详细代码见清单 4.
清单 4. 静态调用类
& & & & & & & & & & & & & & & && &
package sample.test.client.
import java.net.URL;
import sample.test.ServiceImplServiceL
import sample.test.ServiceImplSoapBindingS
public class StaticClientTest {
&&public static void main(String[] args) {
& & // String userName = &wsaxis&, password = &wsaxis&;
& && &int addend = 64, augend = 128;
& && &ServiceImplSoapBindingStub sisbs = new ServiceImplSoapBindingStub(
& && && & new URL(&&&http://localhost:8080/TomcatAxis/services/ServiceImpl&),
& && && & new ServiceImplServiceLocator());
& & // sisbs.setUsername(userName);
& & & & & & & & & & & & & & & && &&&// sisbs.setPassword(password);
& && &System.out
& && && & .println(&Static Client Invocation:\n\tThe summation is: &
& && && && &&&+ sisbs.sum(addend, augend));
& & } catch (Exception e) {
& && &e.printStackTrace();
运行上述代码,你将发现 Web services 不能够被顺利调用,此处将会抛出 Web services 调用异常,如图
这个错误表明,你所调用的资源是受保护的,你必须提供相关的认证信息来访问它们。如果把如下代码的注释符去掉,
& & & & & & & & & & & &&&
// String userName = &wsaxis&, password = &wsaxis&;
// sisbs.setUsername(userName);
// sisbs.setPassword(password);
重新编译,运行,你就能得到正确的结果,
精华1在线时间68 小时帖子主题UID187794积分2020技术分1360 资源分25 分享激情345 博客好友记录相册
知县, 积分 2020, 距离下一级还需 2980 积分
UID187794积分2020
由于 Web services 的 endpoint 被列为受限资源,需要使用这些资源,必须提供相应的认证信息。清单 4 中被注释掉的内容,正是用来向服务器认证时使用的,由于服务器无法获得认证信息,就返回了 401 Unauthorized 错误。去掉注释后的请求得到了服务器的认证,因而能够得到正确的结果。
动态调用方式测试
动态调用方式不需要生成 Web services 客户端,通过查找 Web services 提供的服务,就能调用 Web Service,此处不对动态调用方式详加解释, 清单 5 是使用动态调用的方式测试 Basic Authentication 的。
清单 5. 动态调用测试代码
& & & & & & & & & & & & & & & && &
package sample.test.client.
import javax.xml.namespace.QN
import javax.xml.rpc.C
import javax.xml.rpc.ParameterM
import javax.xml.rpc.S
import javax.xml.rpc.ServiceF
public class DynamicClientTest {
&&public static void main(String[] args) {
& && &String address = &http://localhost:8080/TomcatAxis/services/ServiceImpl&;
& && &String namespaceURI = &http://test.sample&;
& && &String serviceName = &ServiceImplService&;
& && &String portName = &ServiceImpl&;
& && &String operationName = &sum&;
& && &String userName = &wsaxis&, password = &wsaxis&;
& && &int addend = 64, augend = 128;
& && &ServiceFactory factory = ServiceFactory.newInstance();
& && &Service service = factory.createService(new QName(serviceName));
& && &Call call = service.createCall(new QName(portName));
& && &call.setTargetEndpointAddress(address);
& && &QName intQName = new QName(&http://www.w3.org/2001/XMLSchema&,&int&);
& && &call.setOperationName(new QName(namespaceURI, operationName));
& && &call.addParameter(&addend&, intQName, ParameterMode.IN);
& && &call.addParameter(&augend&, intQName, ParameterMode.IN);
& && &call.setReturnType(intQName);
& && &call.setProperty(Call.USERNAME_PROPERTY, userName);
& && &call.setProperty(Call.PASSWORD_PROPERTY, password);
& && &Object[] inParams = new Object[2];
& && &inParams[0] = new Integer(addend);
& && &inParams[1] = new Integer(augend);
& && &int value = ((Integer) call.invoke(inParams)).intValue();
& && &System.out.println(&Dynamic Client Invocation:\n\tThe summation is: & + value);
& & } catch (Exception e) {
& && &e.printStackTrace();
需要指出的是,与静态调用方式不同,动态调用方式设置认证的用户名和密码是通过 Property(属性)来设置的(代码中加粗的部分)。上述代码的运行结果
如果去掉清单 4 中加粗的部分,同样服务器将返回 401 Unauthorized 错误。
下面,本文将结合 Rational Application Developer Standard Edition Version 8.0 和 WebSphere Application Server Version 7.0 来介绍如何在 WAS 上配置 HTTP Basic Authentication,并使用 JAX-WS 实现的 Web services 加以测试。
精华1在线时间68 小时帖子主题UID187794积分2020技术分1360 资源分25 分享激情345 博客好友记录相册
知县, 积分 2020, 距离下一级还需 2980 积分
UID187794积分2020
OK,搞了这么多不知道大家看不看的明白!
我只想总结下,教大家如何利用java来编写一个webservice接口。
这个接口能干什么呢?比如说天气预报的webservice接口?这个可以在IOS中发起一个webservice的调用过程。
第二个问题是什么呢?
由于IOS在进行和服务器的数据校验的时候,如果利用传统的HTTP进行数据校验,这样基本就是明码传输!
明码传输是什么意思》?就是说别人能够拦截到你的信息,然后破解!这样很不安全。
然后我就介绍了一下Http Basic Authentication.
讲的不好的地方,不明白的地方,或者是讲错嘚地方,欢迎大家提出来。
另外一个大的系统,是包含很多个webservice接口和系统的,是系统集成的分布式架构。
登录,注册,都是走的不同一个服务器,如果想研究更深一点的Http Basic Authentication,也可以参考一下更多的资料,或者可以参考一下Spring Security的开源框架。
精华1在线时间68 小时帖子主题UID187794积分2020技术分1360 资源分25 分享激情345 博客好友记录相册
知县, 积分 2020, 距离下一级还需 2980 积分
UID187794积分2020
hiphone 发表于
我也在研究web service
有服务器端和客户端的代码吗?
根据我的例子就可以创建你的一个webservice了。
至于代码的话,我这边都是比较庞大的系统的,你根据我的介绍应该就明白了。
精华0在线时间264 小时帖子主题UID175582积分5540技术分2467 资源分10 分享激情1456 博客好友记录相册
高级工程师
巡抚, 积分 5540, 距离下一级还需 4460 积分
UID175582积分5540
太NB了,果然给力,受益匪浅!{:5_133:}
精华1在线时间68 小时帖子主题UID187794积分2020技术分1360 资源分25 分享激情345 博客好友记录相册
知县, 积分 2020, 距离下一级还需 2980 积分
UID187794积分2020
沉这么快,人工置顶下
精华18在线时间1055 小时帖子主题UID61224积分76623技术分48205 资源分1035 分享激情12229 博客好友记录相册
高级架构师
UID61224积分76623
很不错啊~一步接一步啊~~
~~阿凡达这部电影告诉我们,谁胯下的鸟大听谁的~~
精华0在线时间225 小时帖子主题UID178033积分2515技术分1205 资源分44 分享激情657 博客好友记录相册
知县, 积分 2515, 距离下一级还需 2485 积分
UID178033积分2515
想问lz一下,当如果用路由的话怎么搭建外边可以访问的服务器哦
&我是楼主,这个问题还是很简单啊,如果你是独立IP的话做个代理就好了。
如果你不是独立IP的话,那么你需要购买个虚拟主机,把你的程序发布到虚拟主机上楼。&
精华0在线时间21 小时帖子主题UID170327积分776技术分400 资源分45 分享激情75 博客好友记录相册
实习工程师
县丞, 积分 776, 距离下一级还需 224 积分
UID170327积分776
以后会用到,mark
精华0在线时间11 小时帖子主题UID218006积分216技术分130 资源分2 分享激情56 博客好友记录相册
实习工程师
县吏, 积分 216, 距离下一级还需 284 积分
UID218006积分216
精华0在线时间573 小时帖子主题UID88306积分8243技术分2269 资源分141 分享激情4325 博客好友记录相册
高级工程师
巡抚, 积分 8243, 距离下一级还需 1757 积分
UID88306积分8243
准备 自己来谢谢后台了
精华4在线时间1737 小时帖子主题UID309积分18437技术分6530 资源分159 分享激情8839 博客好友记录相册
总督, 积分 18437, 距离下一级还需 1563 积分
UID309积分18437
ania3 发表于
想问lz一下,当如果用路由的话怎么搭建外边可以访问的服务器哦
我是楼主,这个问题还是很简单啊,如果你是独立IP的话做个代理就好了。
如果你不是独立IP的话,那么你需要购买个虚拟主机,把你的程序发布到虚拟主机上楼。
精华0在线时间0 小时帖子主题UID251506积分27技术分15 资源分2 分享激情0 博客好友记录相册
乡绅, 积分 27, 距离下一级还需 73 积分
UID251506积分27
请问楼主restful风格应该如何做验证
精华0在线时间232 小时帖子主题UID167727积分2840技术分1045 资源分75 分享激情1028 博客好友记录相册
知县, 积分 2840, 距离下一级还需 2160 积分
UID167727积分2840
超詳細... 謝謝...
十级贡献勋章
十级贡献勋章
九级光辉勋章
九级光辉勋章
三级英豪勋章
三级英豪勋章
四级英才勋章
四级英才勋章
五级至尊勋章
五级至尊勋章
六级尊贵勋章
六级尊贵勋章
七级卓越勋章
七级卓越勋章
八级荣誉勋章
八级荣誉勋章
DEVDIV博主
DEVDIV人才
二级精英勋章
二级精英勋章
一级王者勋章
一级王者勋章
及时将最新信息发给我
通过Email及时将最新的模板和服务发给我。
及时了解我们最新动态。关注我们的微博
官方微博: &&&关于如何在项目中写一个可供外部调用的webservice接口
[问题点数:50分,结帖人zhao]
关于如何在项目中写一个可供外部调用的webservice接口
[问题点数:50分,结帖人zhao]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
本帖子已过去太久远了,不再提供回复功能。<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
您的访问请求被拒绝 403 Forbidden - ITeye技术社区
您的访问请求被拒绝
亲爱的会员,您的IP地址所在网段被ITeye拒绝服务,这可能是以下两种情况导致:
一、您所在的网段内有网络爬虫大量抓取ITeye网页,为保证其他人流畅的访问ITeye,该网段被ITeye拒绝
二、您通过某个代理服务器访问ITeye网站,该代理服务器被网络爬虫利用,大量抓取ITeye网页
请您点击按钮解除封锁&

我要回帖

更多关于 eclipse写webservice 的文章

 

随机推荐