简单webservice服务创建并调用
来源:互联网 发布:微信网上订餐系统源码 编辑:程序博客网 时间:2024/05/16 05:02
简单webservic服务创建与调用
1.Webservice接口文档
首先我想通过该文档向大家展示一下该博客要做的功能以及目的。
1.1 项目
服务端提供webservice服务(为数据传出者),客户端调用服务端的webservice服务(为数据请求者)。
1.2请求参数
请求字段
说明
是否必填
备注
示例
错误示例
name
带有小写字母的字符串(string)
是
无
shi示例;
Shili;
Cccc;
SHILI;
---SHI;
1.3响应数据
报文字段
说明
是否必填
备注
示例
错误提示
name
对参数进行小写字母转大写,并拼接字符串操作。
(string)
-
示例针对上表第一条示例参数
Hello: SHI示例!Welcome to the League of Draven
您输入的参数有误(不含有任何小写字母)!
1.4请求URL
http://192.168.212.25:8080/Struts_2.0/hello.jsp
2.创建自己的webservice
必须工具:JDK1.8(这里使用soap1.1,所以JDK1.6以上一般都没有什么问题),eclipse(版本没啥影响)
2.1创建工程
如图创建一个动态的web project即可,名字自己随便取我这里是WebService,然后一路next;
2.2.创建webservice类
创建好服务类就可以编写其中的代码了(注意我那有一个Type already exists是因为我已经建好了,没建的不会报错),我的代码示例如下:
package com.ustcinfo.service1;import javax.jws.WebMethod;import javax.jws.WebService;import javax.xml.ws.Endpoint;/** * @WebService - 它是一个注解,用在类上指定将此类发布成一个ws. Endpoint – * 此类为端点服务类,它的方法publish用于将一个已经添加了@WebService注解对象绑定到一个地址的端口上。 * * @author chen * */@WebServicepublic class HelloWebService { public String HelloWord(String name) { char letters[] = new char[name.length()];//将传进来的参数存放到一个char类型的一维数组里面 for(int i=0;i<name.length();i++){//遍历数组将数组中的小写字母转化为大写字母 char c = name.charAt(i); if(c>='a' && c<='z'){ c = (char) (c-32); letters[i]=c; }else{ letters[i]=c; } } //返回的结果是传入的参数中的小写转化为大写字母其余不变,然后再拼接其他字符串。 return "Hello: " + new String(letters)+"!Welcome to the League of Draven"; } /** * 添加exclude=true后,HelloWord2()方法不会被发布 * * @param name * @return */ @WebMethod(exclude = true) public String HelloWord2(String name) { return "Hello: " + name+"!Welcome to the League of Draven"; }public static void main(String[] args) { /** *address:服务的发布地址 *Endpoint:服务的实现 */ //给服务分配地址 String address="http://192.168.212.25:6666/helloWord"; //发布服务 Endpoint.publish("http://192.168.212.25:6666/helloWord",new HelloWebService()); //打印WSDL文档的地址 System.out.println("访问wsdl的地址是:"+address+"?WSDL"); }}为上述代码解释五点东西:
1.发布的函数是该类中的所有public方法且非static的。
不免有人问了这里面有一个Helloword2方法没有发布啊,那是因为添加了@WebMethod(exclude = true)注解,所以以后要有必须要的public的方法,又不想被发布的时候就是用该注解
2.发布的函数Helloword(String name)需要一个String类型参数,下面的参数处理可以根据自己的需要,我的是修改参数大小写以及添加新字符串,这样方法大家能联想自己能怎么去处理。
3.发布服务,我使用的是自己的本地的IP,要保证端口未被其他项目所占用。还有一点,同一个端口可以发布多个服务,比如
String address="http://192.168.212.25:6666/helloWord";
String address="http://192.168.212.25:6666/helloWord2";
String address="http://192.168.212.25:6666/helloWord3";
都是可以的。这里只说明一下不论证了,毕竟不是该博客的重点。
发布服务使用的是Endpoint函数,具体可百度,也不论述了。
4.地址的配置,大家如果是使用本地的IP的话,可以使用ipconfig命令在dos窗口下查看自己的ip地址
5.最后打印的WSDL文档是什么东西?
大家做到这应该是可以运行该服务了,而后台只是打印了:访问wsdl的地址是:http://192.168.212.25:6666/helloWord?WSDL
千万不要小看这个东西,这里我简单说一下他能在生成的相应的代码,供我们调用服务使用,后面会详细介绍。
3.调用自己创建的服务
3.1建立动态的web项目,构建过程跟上述一样。
请忽略我红色方框以外 的东西,这个项目是我练习Struts2时临时建立的一个项目,使用这个项目是方便我能在页面上展示。
首先看我的com.ustcinfo.client2这个包,里面除了_Main.java这个类,其他类并不是我建的。哈哈,这里就用到了上面所说的WSDL文档了,
<1>首先我们运行我们建立的web服务
如果没有报错的话就会打印访问wsdl的地址是:http://192.168.212.25:6666/helloWord?WSDL
报错的话,一般情况下就是地址分配有误,一:查看是否端口被占用,二检测自己本机地址有没有错误(有时候本机地址在不同的局域网或者不同时间的时候会变化)
<2>调用服务前提准备
我们运行了我们服务之后,在IE浏览器中打开:
http://192.168.212.25:6666/helloWord?WSDL 我们会看到相应的XML文件,是不是很神奇,这都是apache的功劳,在这个xml文件中我们可以看到我们服务的相应信息,比如服务名,port方式,发布的方法,初学者,我们暂时不用去管这些,我们先看看怎么把这个东西变成我们所需要的。
(1)打开dos界面
随便进入一个磁盘,这里C盘为例,使用命令md test建立test文件夹,cd test进入该文件夹。
使用命令wsimport -s . -p com.ustcinfo.client2 http://192.168.212.23:6666/helloWorld?WSDL
(也许有人要问了,上面的地址明明是192.168.212.25,下面怎么变23了,那是因为我昨天的本机地址是25,今天早上一看就成23了,解释一下以示严谨,哈哈)
命令wsimport是编译WSDL文档的命令,-s是生产源代码的,-p com.ustcinfo.client2 是以我们想要的文件目录结构构建。后面的地址就是我们在后台打印的地址。
(2)如果执行结果如上如所示便是执行成功了,这时候我们就到我们的test目录下看一看
首先看目录层次,确实是我们命令写的那样,再看内容我们发现居然多了许多java和class文件,这就是WSDL文档的作用。我们对这些内容还要处理一下,先把里面所有的.class文件删除,只要java文件。然后返回到com文件夹下面,复制com文件夹到我们第二个建立的项目中,就是我上面介绍的中出现的位置。
3.2编写服务调用代码
我是用页面形式展示的,使用了strust框架,我先说这个吧,看上去比较顺眼。待会儿我讲一下直接调用服务,不带其他技术的东西。
hello.jsp(主界面)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body><form action="login/hello" method="post">请输入带有小写字母的字符串:<input name="name" type="text"/><input type="submit" value="提交"></form></body></html>
helloAction.java(后台action)
package com.mystruts.action;import com.ustcinfo.client2.HelloWebService;import com.ustcinfo.client2.HelloWebServiceService;public class helloAction {private String name;//参数名private String result;//返回的结果public String submit(){//构建我们需要的服务对象HelloWebServiceService hw = new HelloWebServiceService();HelloWebService hws = hw.getHelloWebServicePort();//这里是对是否含有小写字母的条件判断,别的方法有别的方法的处理方式(非必须)String rs = hws.helloWord(this.getName());System.out.println(rs);System.out.println(name);boolean a = false;for(int i=0;i<name.length();i++){char c = name.charAt(i);if (Character.isLowerCase(c)){a = true;}}if(a){this.setResult(rs);//将调用服务之后的结果赋给resultreturn "success";//返回调用成功界面}else{return "error";//返回参数输入有误界面}}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getResult() {return result;}public void setResult(String result) {this.result = result;}}hello_success.jsp(调用成功界面)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <%@ taglib prefix="s" uri="/struts-tags" %> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>调用成功</title> </head><body>您输入的参数为:<s:property value="name"/><br>返回的结果为:<s:property value="result"/><br><a href="http://192.168.212.25:6666/helloWord?WSDL">WSDL文档</a><br>(WSDL文档打开报错请更换浏览器尝试!)</body></html>
hello_error.jsp(调用失败界面)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body>您输入的参数有误(不含有任何小写字母)!</body></html>
3.3运行结果调试
可以看到我们的服务调用成功了。(第二次提示,有错误的话,首先看地址一般都是地址有问题,其次看代码逻辑。)
3.3最后我们看一下直接在后台看服务调用吧
这里的代码直接写在_Main.java里面
_Main.java
package com.ustcinfo.client2;public class _Main {public static void main(String[] args) {// TODO Auto-generated method stubHelloWebServiceService hw = new HelloWebServiceService();HelloWebService hws = hw.getHelloWebServicePort();String rs = hws.helloWord("chenASSS");System.out.println(rs);}}
执行结果:可以看到后台打印结果,说明我们服务调用成功了!
- 简单webservice服务创建并调用
- Webservice服务创建、调用
- 创建一个简单的webservice服务并发布
- myexclipse 创建并调用 webservice
- ABAP 创建并调用WebService
- servlet简单示例+调用webservice服务
- WebService服务及客户端调用简单实例
- gsoap创建webservice服务简单教程
- WebService的java简单创建和调用
- Webservice服务创建、调用实例,多种方法调用
- axis2创建webservice客户端全过程(调用.net web服务)
- .net调用delphi webservice 不能自动创建服务实例
- 使用JaxWsDynamicClientFactory动态调用自己创建的WebService服务
- 使用JaxWsDynamicClientFactory动态调用自己创建的WebService服务
- Java调用WebService服务,简单好用,实例讲解
- WebService系列博客{一}[发布、调用一个简单的服务]
- [Python]webservice 学习(1) -- 简单服务和调用
- .NET C# 创建WebService服务简单的例子
- node之第一个hello world
- C#时间类型 DateTime? 赋空值
- 异常的捕捉和抛出
- 字符串转化为整数
- web文件上传,webapi后台接收
- 简单webservice服务创建并调用
- MyBatis/Ibatis中#和$的区别
- VMware虚拟机中,RHEL系统下挂载、卸载新硬盘的方法
- ADODB的下载安装
- PentesterLab渗透师养成计划
- 弱引用范例
- CMS 中国市场峰会 2017年1月14日即将召开!
- linux新建tomcat(不影响原有的tomcat使用)
- 最新的 iOS 申请证书与发布流程(2016.12)