Web Service简单开发例子(内附源码)
webservice例子
webservice例子【实用版】目录1.WebService 简介2.WebService 的例子3.WebService 的应用场景4.WebService 的未来发展正文【1.WebService 简介】WebService 是一种通过互联网提供服务的应用程序,它使用标准化的协议,如 SOAP(简单对象访问协议)和 WSDL(Web 服务描述语言),以便在各种操作系统和编程语言中进行通信。
WebService 旨在使不同的应用程序和组织之间更轻松地共享数据和功能。
【2.WebService 的例子】一个典型的 WebService 例子是天气预报服务。
这个服务可以通过WebService 提供给其他应用程序,这些应用程序可以使用该服务查询特定地区的天气预报。
在这个例子中,WebService 接收一个地区的名字作为输入,然后返回该地区的天气预报作为输出。
【3.WebService 的应用场景】WebService 可以广泛应用于各种场景,例如:- 电子商务:在线商店可以使用 WebService 来处理订单,支付和发货。
- 社交媒体:WebService 可以帮助社交媒体平台共享数据和功能,例如,Facebook 可以使用 WebService 来提供照片共享和好友推荐功能。
- 企业应用程序:公司可以使用 WebService 来共享内部数据和应用程序,例如,销售团队可以使用 WebService 来访问客户数据库。
【4.WebService 的未来发展】随着互联网的不断发展,WebService 也在不断进化。
未来的WebService 将更加灵活和可扩展,可以更好地支持不同的应用程序和编程语言。
webservice简单实例
webservice简单实例Web 服务 (Web Service) 是一种通过 HTTP 协议向其他应用程序发送数据的技术。
下面是一个简单的 Web 服务示例,用于向用户提交表单并返回表单数据:```// 定义 Web 服务接口public interface UserService {// 提交表单void submitForm(String username, String password);// 获取表单数据List<User> getUsers();}// 实现 Web 服务public class UserServiceImpl implements UserService {// 存储用户信息private List<User> users;public UserServiceImpl() {users = new ArrayList<User>();}// 提交表单public void submitForm(String username, String password) {// 创建用户对象User user = new User();ername = username;user.password = password;// 添加用户到列表users.add(user);// 提交表单System.out.println("Submit form: " + ername + ", " + user.password);}// 获取表单数据public List<User> getUsers() {// 获取所有用户信息if (users == null) {// 构造空列表users = new ArrayList<User>();}return users;}}// 调用 Web 服务public class Main {public static void main(String[] args) {UserService userService = new UserServiceImpl();// 向用户提交表单userService.submitForm("user1", "password1");// 获取所有用户信息List<User> userList = userService.getUsers();for (User user : userList) {System.out.println(ername + ": " + user.password); }}}```这个示例实现了一个 Web 服务接口,该接口允许开发人员提交表单并返回表单数据。
代码实现一个简单的webserver服务器
//声明serversocket对象,,他是站在服务端的 private ServerSocket serverSocket; //在构造方法中完成初始化 public WebServer() {
//向浏览器返回 /*组织的数据格式不符合http协议 OutputStream outputStream = socket.getOutputStream(); outputStream.write("hello".getBytes()); outputStream.flush();*/
//改造输出格式 /*PrintWriter 输出字符 * PrintStream 输出除了字符还可以图片啥的*/ PrintStream ps = new PrintStream(socket.getOutputStream()); //拼接状态行 ps.println("HTTP/1.1 200 OK"); //响应头,相应内容:网页类型 ps.println("Context-Type:text/html"); //相应内容的长度 String data = "hello server~"; ps.println("Content-Length:"+data.length());
博客园 用户登录 代码改变世界 密码登录 短信登录 忘记登录用户名 忘记密码 记住我 登录 第三方登录/注册 没有账户, 立即注册
webservice例子
webservice例子Web Service 例子在计算机科学领域,Web Service 是一种通过网络进行通信的软件系统,它使用标准的 HTTP 协议进行交互。
Web Service 提供了一种跨平台、跨语言的通信方式,使得不同系统之间能够进行数据的交换和共享。
下面是一些常见的 Web Service 例子,用来说明 Web Service的用途和实际应用:1. 天气预报 Web Service天气预报 Web Service 可以提供实时的天气数据,用于在应用程序中显示天气信息。
开发者可以通过调用相应的 API 来获取天气数据,并将其显示在自己的应用中。
这样的 Web Service 为用户提供了方便的天气查询功能。
2. 地图服务 Web Service地图服务 Web Service 可以提供地理位置信息和地图数据。
开发者可以通过调用地图服务的 API 来获取地图数据,并将其集成到自己的应用中,实现地理位置的标注、搜索等功能。
3. 汇率转换 Web Service汇率转换 Web Service 可以提供实时的汇率数据,用于货币之间的转换。
开发者可以通过调用汇率转换的 API 来获取最新的汇率数据,并在自己的应用中进行汇率的计算和转换。
4. 新闻订阅 Web Service新闻订阅 Web Service 可以提供实时的新闻内容,用于在应用程序中展示最新的新闻信息。
开发者可以通过调用新闻订阅的 API 来获取最新的新闻数据,并将其展示在自己的应用中。
5. 社交媒体 Web Service社交媒体 Web Service 可以提供用户的社交关系和动态数据。
开发者可以通过调用社交媒体的 API 来获取用户的朋友列表、动态更新等数据,并将其展示在自己的应用中。
6. 在线支付 Web Service在线支付 Web Service 可以提供安全的支付功能,用于用户在应用中进行在线支付。
开发者可以通过调用在线支付的 API 来实现用户的支付请求,并与支付平台进行交互,完成支付流程。
webservice接口实例
webservice接口实例WebService接口实例是一种在不同的操作系统和编程语言之间进行通信的技术,它通过利用XML(可扩展标记语言)来实现跨平台的数据交换。
不同的Web应用程序可以通过SOAP(简单对象访问协议)协议来在网络中发送和接收消息。
下面,我们将通过以下步骤来介绍如何使用WebService接口。
第一步:创建Web服务首先,我们需要在.NET环境中创建一个Web服务应用程序。
使用Visual Studio中的文件菜单选项,在应用程序中添加一个新的Web服务。
我们可以通过添加Web服务引用来使用Web服务。
在Visual Studio中选中“添加引用”,选择“Web引用”,并输入WebService的URL链接。
此时,您将可以通过“命名空间”引用Web服务。
第二步:添加Web服务引用在Visual Studio中,通过添加Web服务引用来使用Web服务。
选中“添加引用”,选择“Web引用”,并输入WebService的URL链接。
此时,您将可以通过“命名空间”引用Web服务。
第三步:实现Web服务方法在Web服务应用程序中,我们必须实现Web服务方法,该方法将处理请求并返回数据。
在方法中,必须定义相关的参数,包括:请求参数、响应参数及返回值。
为了调用Web服务方法,必须发送一条请求并等待Web服务响应。
第四步:测试Web服务在Visual Studio中,可以通过单元测试工具来测试Web服务是否正常运行。
您可以创建一个单元测试项目,以测试Web服务是否返回与预期的结果相同的结果。
第五步:使用WebService接口通过添加Web服务引用,并调用Web服务方法,可以在应用程序中使用WebService接口。
通过使用相关的命名空间,Web服务中的方法可以在应用程序中 freely地调用。
综上所述,在使用WebService接口时,我们需要创建一个Web 服务应用程序,添加Web服务引用,实现Web服务方法,测试Web服务并最终在应用程序中使用WebService接口。
webservice实例代码
WebService实例代码详解在信息化社会中,数据的交互和共享已经成为企业间合作的重要手段。
而WebService就是一种实现跨平台、跨语言的数据交换的技术。
本文将通过一个简单的WebService实例代码,深入浅出地解析其工作原理和使用方法。
一、WebService简介WebService是一种基于HTTP协议,使用XML进行信息传递,并能通过WSDL描述其接口的一种Web应用程序。
它使得运行在不同操作系统、不同编程语言环境中的应用系统可以相互交换数据,实现业务逻辑的重用。
二、WebService实例代码1. 创建WebService服务端以下是一个使用Java编写的简单WebService服务端代码:```javaimport javax.jws.WebService;import javax.xml.ws.Endpoint;@WebServicepublic class HelloWorld {public String sayHello(String name) {return "Hello " + name;}public static void main(String[] args) {Endpoint.publish("localhost:8080/HelloWorld", new HelloWorld()); }}```在这个例子中,我们首先定义了一个名为HelloWorld的类,并用@WebService注解标记为一个WebService服务。
然后,我们在该类中定义了一个sayHello方法,该方法接受一个字符串参数,并返回一个包含"Hello "和参数值的消息。
最后,我们在main方法中启动了WebService服务,指定的服务地址是"localhost:8080/HelloWorld",并且传入了新的HelloWorld实例。
java webservice实例
java webservice实例Java WebService是一种用于实现分布式系统的技术,它允许不同的应用程序通过网络进行通信和交互。
通过使用Web服务,可以将应用程序的功能暴露给其他应用程序,从而实现系统间的数据共享和业务集成。
一个典型的Java WebService实例可以是一个在线图书商城,该商城允许用户搜索图书、查看图书详细信息、购买图书等功能。
为了实现这个Web服务,我们可以使用Java的相关技术和框架,如Java Servlet、Java API for XML Web Services (JAX-WS)等。
我们需要创建一个Java Servlet来处理用户的请求。
该Servlet可以接收来自客户端的HTTP请求,解析请求参数,并根据参数执行相应的操作。
例如,当用户搜索图书时,Servlet可以将搜索关键字传递给后台的业务逻辑处理组件,并返回匹配的图书列表给客户端。
为了实现业务逻辑处理,我们可以使用JAX-WS来创建Web服务端点。
Web服务端点是一个Java类,它提供了Web服务的具体实现。
在我们的例子中,Web服务端点可以包含一些方法,如搜索图书、获取图书详细信息、购买图书等。
这些方法可以被Servlet调用,并返回相应的结果给客户端。
在实现Web服务端点时,我们需要定义相关的数据模型和数据访问组件。
数据模型可以包括图书的属性,如书名、作者、出版日期等。
数据访问组件可以负责从数据库中检索图书数据,并将数据返回给Web服务端点进行处理。
为了提高Web服务的性能和可靠性,我们可以使用一些技术和工具,如SOAP协议、WSDL文档、Apache Axis等。
SOAP协议是一种用于在网络上交换结构化信息的协议,它可以确保数据的安全性和完整性。
WSDL文档是Web服务的描述文件,它定义了Web服务的接口和操作。
Apache Axis是一个开源的Web服务框架,它可以帮助我们更方便地创建和部署Web服务。
JavaWebService简单实例(附实例代码)
JavaWebService简单实例(附实例代码)前⾔:朋友们开始以下教程前,请先看第五⼤点的注意事项,以避免不必要的重复操作。
⼀、准备⼯作(以下为本实例使⽤⼯具)1、MyEclipse10.7.12、JDK 1.6.0_22⼆、创建服务端1、创建【Web Service Project】,命名为【TheService】。
2、创建【Class】类,命名为【ServiceHello】,位于【com.hyan.service】包下。
3、编写供客户端调⽤的⽅法,即编译⽅法代码。
4、进⾏编译说明:编译失败的话,请将该项⽬引⽤的jdk设置为1.6.0_17版本或更⾼版本5、测试结果三、⽣成客户端1、创建【Web Service Project】,命名为【TheClient】。
2、命令提⽰窗⼝执⾏⽣成命令。
格式:wsimport -s "src⽬录" -p “⽣成类所在包名” -keep “wsdl发布地址”⽰例:复制代码代码如下:wsimport -s G:\\workspace\\webService\\TheClient\\src -p com.hyan.client -keep http://localhost:9001/Service/ServiceHello?wsdl 说明:1)"src⽬录"地址不可含空格2)“wsdl发布地址”不要漏了“?wsdl”3、刷新项⽬,检查⽣成类四、最终测试1、创建【Class】类,命名为【ServiceTest】,位于【com.hyan.test】包下。
2、编写测试⽅法,调⽤服务端⽅法,并打印返回的结果。
五、注意事项1、JDK版本过低问题报类似如下的异常:runtime modeler error: Wrapper class com.hyan.service.jaxws.GetValue is not found. Have you run APT to generate them?原因:JDK版本低于1.6.0_17解决⽅法:调整该服务端项⽬所引⽤的JDK版本为安装的⾼版本JDK2、⽣成命令路径含空格问题报类似如下的异常:directory not found: G:\SVN_FILE\GB\05原因:客户端src路径不可含有空格解决⽅法:在不含空格路径的⽂件夹下重新创建客户端即可。
java webservice 简单例子
一、介绍Java WebService 是一种基于Web的应用程序接口(API),它允许不同的应用程序在互联全球信息站进行通信。
它是一种轻量级、跨评台的解决方案,可以通过SOAP(Simple Object Access Protocol)和RESTful(Representational State Transfer)风格进行通信。
在本文中,我们将介绍Java WebService 的简单例子。
二、准备工作在编写Java WebService 之前,我们需要做一些准备工作:1. 安装Java的开发环境(JDK)2. 安装Eclipse或者其他的Java集成开发环境3. 确保已经安装了Apache Tomcat 或者其他的应用服务器三、创建Web 服务下面我们将创建一个简单的Web 服务,该服务将提供一个简单的方法来获取当前的时间。
1. 创建一个新的Java 项目2. 在该项目中创建一个新的类,命名为TimeService3. 编写该类,提供一个名为getCurrentTime() 的方法,该方法将返回当前的系统时间4. 使用注解WebService 标注该类,以便将其发布为Web 服务四、发布Web 服务发布Web 服务是指将我们创建的Web 服务部署到应用服务器上,以便其他应用程序可以访问它。
1. 在项目中创建一个新的Servlet,命名为TimeServiceServlet2. 编写该Servlet,使用注解WebServlet 标注,并在该Servlet 的初始化方法中发布我们编写的Web 服务3. 部署该Servlet 到应用服务器中五、创建客户端创建一个简单的客户端来访问我们创建的Web 服务。
1. 创建一个新的Java 项目2. 在该项目中创建一个新的类,命名为TimeServiceClient3. 使用Java 提供的工具wsimport 来生成客户端代码。
在命令行中运行:wsimport xxx4. 编写客户端代码,调用刚刚生成的客户端代码来访问Web 服务六、测试Web 服务现在我们已经创建了Web 服务并且创建了一个客户端来访问它,下面我们将测试我们创建的Web 服务。
webservice实例
WebService实例
什么是Web服务?
Web服务(WebService)是一种通过网络进行通信的软件系统,旨在通过标准化的协议和消息传递机制在不同的应用程序之间进行交互。
它基于Web技术,使用标准的HTTP协议进行通信,并支持多种数据格式,如XML和JSON。
Web服务的设计旨在提供跨平台和跨语言的互操作性,使不同系统之间能够进行无缝的数据交换和集成。
它可以被各种不同的应用程序和编程语言使用,无论其运行在什么样的操作系统上。
WebService的实例
下面我们将通过一个简单的示例来说明如何使用Web服务进行数据交换。
1. 创建Web服务
首先,我们需要创建一个Web服务,以便其他应用程序可以通过网络与之进行通信。
在这个示例中,我们将创建一个用于获取天气信息的Web服务。
我们可以使用不同的编程语言和框架来实现Web服务。
这里我们以Python和Flask框架为例。
首先,确保你已经安装了Python和Flask,然后按照下面的步骤创建Web服务:
1.创建一个新的Python文件,命名为
weather_service.py。
2.导入flask模块,并创建一个Flask应用程序对
象。
from flask import Flask
app = Flask(__name__)
3.创建一个处理请求的路由,定义一个/weather的
URL,并设置请求方法为GET。
```python
@app.route(’/weather’, methods=[‘GET’]) def
get_weather(): # 处理获取天气信息的逻辑 return。
Java Web service开发示例
Java Web Service工程开发示例Web service是一个平台独立的,低耦合的,自包含的、基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言下的一个子集)标准来描述、发布、发现、协调和配置这些应用程序,用于开发分布式的互操作的应用程序。
使用java语言可以开发web service应用,下面记录一个简单的示例:第一步:创建一个web service project,输入工程名,如wsproject,Framework选择JAX-WS,J2EE specification选择Java EE6.0:第二步:创建package .hjdf.wsproject包,在wsproject包里创建SayHello类,SayHello类内容如下:第三步:将SayHello封装成web service服务:1、点击下图图标的黑色箭头,选择New Web Service:2、打开New Web Service,选择要wsproject,即我们创建的工程,framework选择JAX-WS,Stratey选择Create web service from Java class (Bottom-up scenario),点击next3、在Java class里选择要封装成服务的类,在本例中选中我们刚才创建的SayHello类,勾选Generate WSDL in project,点击Finish,结束创建第四步:检查服务经过第三步创建服务完成之后,在当前类目录生成一个文件,如SayHelloDelegate.java类内容如下:同时在WEB-INF目录下生成wsdl文件夹,里面有wsdl文件和xsd文件,还生成一个sun-jaxws.xml文件第五步:添加jwx类库1、工程上右键—Properties—Libraries,点击Add Libraries,打开Add Libraries窗口,选择MyEclipse Libraries,点击next2、打开MyEclipse Libraries窗口,勾选如下两个类库,点击Finish第六步:验证Web Service将工程发布到tomcat下,启动tomcat,打开浏览器窗口,输入http://localhost:8080/wsproject/SayHelloPort?WSDL,如果看到如下页面,表示web service封装成功第七步:开发客户端创建一个Java Project或者Java Web Project工程,输入工程名wsprojectclient,Framework选择JAX-WS,J2EE specification选择Java EE6.0,点击Finish:第八步:给客户端程序添加服务1、点击下图图标的黑色箭头,选择New Web Service Client:2、打开New Web Service Client窗口,选择要访问的工程3、在WSDL URL里输入http://localhost:8080/wsproject/SayHelloPort?WSDL,next4、直到Finish后,程序里会生成和web service服务一样的包结构,包里会生成许多对应web service的文件第九步:调用服务在客户端创建一个测试类Test,调用wsproject里已封装的服务第十步:测试运行Test,查看返回值,控制台如果返回SayHello:Hello,Web Service,myTomcat!表示示例成功。
webserver源码
webserver源码
1. 为什么选择lighttpd 作为分析?
对C不熟悉,lighttpd相对⽐较简单,⽂档丰富,也有不少前辈的努⼒,适合最最最初学者。
在⽹上能google到⼀些源代码的研究,感觉是给有⼀定c基础的⼈员参考的,凭着⼀股冲劲,
⼀个c初学者也来读读 web server 的源代码。
2. ⼯具?
不太熟悉,选择直接⽤gedit,逐⾏查看源代码。
开发⼯具⽤vi。
3. 整体结构介绍。
⽆
4. 以后的⽇志从我学习的顺序开始记录。
感觉有个地⽅不太⽅便,想上传⼀些资料供⼤家参考,不过没地⽅放。
只能找⼀台破服务器先放了。
5. 研究的⽬的,是希望⽤最破的机器,能让其发挥最⼤⼤效率,感觉去学习配置nginx还不如学习源代码去掉那些不适合⾃⼰的东西,最优化⾃⼰的站点。
Java编写WebService实例
利用Java编写简单的WebService实例使用Axis编写WebService比较简单,就我的理解,WebService的实现代码和编写Java代码其实没有什么区别,主要是将哪些Java类发布为WebService。
下面是一个从编写测试例子到发布WebService,以及编写测试代码的过程介绍。
本例子的WebService提供了两个方法,分别是sayHello和sayHelloToPerson,第一个只是返回一个"Hello"字符串,没有参数,第二个函数接受一个字符串作为参数,返回"Hello 参数值",该例子比较简单,但是清楚的说明了从编写代码到发布为WebService以及测试编写好的WebService全过程。
编写服务代码服务代码提供了两个函数,分别为sayHello和sayHelloToPerson,源代码如下:/** File name: HelloService.java** Version: v1.0** Created on Aug 2, 2008 9:40:20 AM** Designed by Stephen** (c)Copyright 2008*/package com.sinosoft.webservice;/*** @author Stephen** Test web service*/public class HelloService {/*** 不带参数的函数** @return返回Hello字符串*/public String sayHello() {return "Hello";}/*** 带参数的函数** @param name* 名称* @return返回加上名称的欢迎词*/public String sayHelloToPerson(String name) {if (name == null || name.equals("")) {name = "nobody";}return "Hello " + name;}}发布WebService要将上边写的HelloService类发布为WebService,需要先搭建Web应用。
自己动手实现一个WEB服务器
⾃⼰动⼿实现⼀个WEB服务器⾃⼰动⼿实现⼀个 Web Server项⽬背景最近在重温WEB服务器的相关机制和原理,为了⽅便记忆和理解,就尝试⾃⼰⽤Java写⼀个简化的WEB SERVER的实现,功能简单,简化了常规服务器的⼤部分功能和结构封装,但仍然保留从浏览器发送请求到将处理结果返回响应到浏览器的整个流程,现在把相关内容分享出来,供⼤家参考。
项⽬环境IDE : eclipse 4.6.3JDK : JDK1.8.0_131Maven : Maven 3.5.2项⽬结构项⽬⽐较简单,就⽤⼀个普通的Java或Maven⼯程,引⼊JDK依赖即可。
⼯程下只有⼀个包,共包含六个⽂件。
WebServer : WEB 服务器主类,⾥⾯包含main⽅法,可直接运⾏启动服务器。
Request:请求包装类,包含请求类型,请求URI。
Response:响应包装类,包含输出流,可向浏览器输出响应信息。
RequstParser:请求信息解析类,解析完成后返回⼀个Request。
ServiceDispacher:服务派发器,这⾥类似于Srping的DispatcherServlete。
(不属于服务器部分)TestController:模拟控制器返回信息。
(不属于服务器部分)其中ServiceDispacher和TestController,不属于服务器部分,这⾥为了⽅便测试,放在⼀个⼯程下。
实现流程实现流程⼤致如下:1 创建服务端ServerSocket,绑定⼀个端⼝号2 循环监听客户端请求,连接成功后返回⼀个Socket3 开启⼀个新的线程,传⼊Socket处理当前请求4 Web Server调⽤ServiceDispacher进⾏服务的分发5 ServiceDispacher根据请求查找并调⽤相应的控制器6 控制器⽅法执⾏返回结果,并将结果相应到浏览器代码⽰例下⾯给出完整的代码实现,代码注释已经解释的⽐较清楚了,在这⾥就不再多费⼝⾆了,快来源码见。
webservice实例代码
webservice实例代码全文共四篇示例,供读者参考第一篇示例:Webservice是一种基于网络的服务架构,通过HTTP协议进行通信,可以让不同平台、不同语言的应用程序之间进行数据交换和信息共享。
在实际开发中,Webservice可以用于实现各种功能,比如数据查询、数据更新、文件传输等。
下面我们来介绍一个简单的Webservice实例代码,通过这个实例代码,我们可以了解Webservice的基本原理和使用方法。
我们需要准备一个简单的Java Web项目。
在这个项目中,我们创建一个HelloWorld类,其中包含一个简单的方法,用于返回一个字符串“Hello World”。
```javapackage com.example.webservice;@WebServicepublic class HelloWorld {@WebMethodpublic String sayHello() {return "Hello World";}}```在这个代码中,我们使用了@WebService和@WebMethod注解来定义一个WebService接口。
@WebService注解用于标记这个类是一个Webservice,@WebMethod注解用于标记这个方法是一个Webservice方法,供客户端调用。
接下来,我们需要发布这个Webservice接口,使得客户端可以调用这个接口。
我们可以使用JAX-WS提供的工具来发布这个接口。
import javax.xml.ws.Endpoint;在这段代码中,我们使用Endpoint.publish方法来发布我们之前定义的HelloWorld接口。
我们可以通过访问http://localhost:8080/helloWorld来查看我们发布的Webservice接口。
import space.QName;import javax.xml.ws.Service;import .URL;在这段代码中,我们通过Service.create方法来创建一个Webservice客户端,然后调用HelloWorld接口的sayHello方法来获取Webservice返回的结果。
webservlet的例子
webservlet的例子以下是一个基本的WebServlet的示例:```javaimport java.io.IOException;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;@WebServlet("/hello")public class HelloServlet extends HttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html");response.getWriter().println("<h1>Hello, World!</h1>");}}```在上面的示例中,可以看到使用`@WebServlet("/hello")`注解将HelloServlet类映射到路径"/hello"上。
当向该URL发送GET请求时,doGet()方法将被执行,设置响应类型为"text/html",并向响应输出一个简单的HTML heading。
简单的webservice开发例子
简单的webservice开发例⼦Axis⽀持三种web service的部署和开发,分别为:1、Dynamic Invocation Interface ( DII)2、Stubs⽅式3、Dynamic Proxy⽅式⼆、编写DII(Dynamic Invocation Interface )⽅式web服务1.编写服务端程序HelloClientpublic class HelloClient{public String getName(String name){return "hello "+name;}}2、将源码拷贝到Axis_HOME下,重命名为 HelloClient.jws3、访问连接http://localhost:8080/Axis/HelloClient.jws?wsdl,页⾯显⽰Axis⾃动⽣成的wsdl4、编写访问服务的客户端 TestHelloClient.javaimport org.apache.Axis.client.Call;import org.apache.Axis.client.Service;import space.QName;import javax.xml.rpc.ServiceException;import .MalformedURLException;import java.rmi.RemoteException;public class SayHelloClient2{public static void main(String[] args){try{String endpoint ="http://localhost:8080/Axis/HelloClient.jws";Service service = new Service();Call call = null;call = (Call) service.createCall();call.setOperationName(new QName("http://localhost:8080/Axis/HelloClient.jws","getName"));call.setTargetEndpointAddress(new .URL(endpoint));String ret = (String) call.invoke(new Object[]{"zhangsan"});System.out.println("return value is " + ret);}catch (Exception ex){ex.printStackTrace();}}}三、编写Dynamic Proxy⽅式访问服务1、编写部署服务端程序,同上边DII⽅式,本次仍使⽤上边部署的HelloClient2、编写代理接⼝public interface HelloClientInterfaceextends java.rmi.Remote{public String getName(String name)throws java.rmi.RemoteException;}3、编写并执⾏客户端程序TestHelloClient.javaimport javax.xml.rpc.Service;import javax.xml.rpc.ServiceFactory;import .URL;import space.QName;public class TestHelloClient{public static void main(String[] args){try{String wsdlUrl ="http://localhost:8080/Axis/HelloClient.jws?wsdl";String nameSpaceUri ="http://localhost:8080/Axis/HelloClient.jws";String serviceName = "HelloClientService";String portName = "HelloClient";ServiceFactory serviceFactory =ServiceFactory.newInstance();Service afService =serviceFactory.createService(new URL(wsdlUrl),new QName(nameSpaceUri, serviceName));HelloClientInterface proxy = (HelloClientInterface)afService.getPort(new QName(nameSpaceUri, portName),HelloClientInterface.class);System.out.println("return value is "+proxy.getName("john") ) ;}catch(Exception ex){ex.printStackTrace() ;}}}四、编写wsdd发布web服务,编写stub client访问web服务1、编写服务端程序server,SayHello.java,编译server.SayHello.javapackage server;public class SayHello{public String getName(String name){return "hello "+name;}}2.编写LogHandler.javaimport org.apache.Axis.AxisFault;import org.apache.Axis.Handler;import org.apache.Axis.MessageContext;import org.apache.Axis.handlers.BasicHandler;import java.util.Date;public class LogHandlerextends BasicHandler{public void invoke(MessageContext msgContext)throws AxisFault{/** Log an access each timewe get invoked.*/try {Handler serviceHandler= msgContext.getService();Integer numAccesses =(Integer)serviceHandler.getOption("accesses");if (numAccesses == null)numAccesses = new Integer(0);numAccesses = new Integer(numAccesses.intValue() + 1);Date date = new Date();String result =date + ": service " +msgContext.getTargetService() +" accessed " + numAccesses + " time(s).";serviceHandler.setOption("accesses", numAccesses);System.out.println(result);} catch (Exception e){throw AxisFault.makeFault(e);}}}3、编写wsdd⽂件deploy.wsdd<deployment xmlns="/Axis/wsdd/"xmlns:java="/Axis/wsdd/providers/java"> <handler name="print" type="java:LogHandler"/><service name="sayhello"provider="java:RPC"><requestFlow><handler type="print"/></requestFlow><parameter name="className"value="server.SayHello"/><parameter name="allowedMethods"value="*"/></service></deployment>3、将编译后的⽂件拷贝到Axis_HOME/WEB-INF/classes下,如:D:\tomcat\webapps\Axis\WEB-INF\classes4、发布服务:java org.apache.Axis.client.AdminClient deploy.wsdd5、⽣成client stub⽂件a:⽅式1将SayHello.java拷贝到Axis_HOME/下,重命名为SayHello.jws,执⾏下⾯的命令⽣存client stubjava org.apache.Axis.wsdl.WSDL2Java-p client http://localhost:8080/Axis/services/SayHello.jws?wsdlb:⽅式2执⾏如下命令⽣成SayHello.wsdljava org.apache.Axis.wsdl.Java2WSDL-oSayHello.wsdl -lhttp://localhost:8080/Axis/services/SayHello -nsayhello server.SayHello执⾏如下命令⽣成client stubjava org.apache.Axis.wsdl.WSDL2JavaSayHello.wsdl -p client⽣成的stub client⽂件列表为:1.SayHello.java2.SayHelloService.java。
简单的web服务器源代码
#include "stdafx.h"#include "Websys.h"#include "WebsysDlg.h"#include <afxsock.h>#include <winsock.h>#include <string.h>#include <stdio.h>#include <stdlib.h>#include <io.h>#include<fcntl.h>#include<afxwin.h>#include<windows.h>#include<afxmt.h>#define Lnumber 5 //监听队列长度#define max1 1024#define max2 1024*1024#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif//全局变量unsigned long IP;//用于存储IP地址int port; //用于存储接口号char mainfile[128]; //用于存储主目录int Tnumber=0; //列表控件序号int tnumber; //每次开启服务器的进程数int stop; //服务器状态,0表示关闭状态,1表示开启状态CString mm_error;SOCKET Lsock; //监听socketCCriticalSection slock;//线程互斥信号//全局函数static UINT listen_sock(LPVOID n);//创建监听的sockstatic UINT get_sock(LPVOID n);//建立连接,进行报文和文件的传输class websock{public:CWebsysDlg *dlg1;};class saddr{public:SOCKET sockr;sockaddr_in *addr;};websock ws;//全局主窗口类型变量// 帮助对话框的类的定义及封装函数class CAboutDlg : public CDialog{public:CAboutDlg();// Dialog Data//{{AFX_DATA(CAboutDlg)enum { IDD = IDD_ABOUTBOX };//}}AFX_DATA// ClassWizard generated virtual function overrides//{{AFX_VIRTUAL(CAboutDlg)protected:virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL// Implementationprotected://{{AFX_MSG(CAboutDlg)//}}AFX_MSGDECLARE_MESSAGE_MAP()};CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD){//{{AFX_DATA_INIT(CAboutDlg)//}}AFX_DATA_INIT}void CAboutDlg::DoDataExchange(CDataExchange* pDX){CDialog::DoDataExchange(pDX);//{{AFX_DATA_MAP(CAboutDlg)//}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)//{{AFX_MSG_MAP(CAboutDlg)// No message handlers//}}AFX_MSG_MAPEND_MESSAGE_MAP()// 主对话框类初构造函数CWebsysDlg::CWebsysDlg(CWnd* pParent /*=NULL*/): CDialog(CWebsysDlg::IDD, pParent){//{{AFX_DATA_INIT(CWebsysDlg)m_menu = _T("");m_port = _T("");//}}AFX_DATA_INIT// Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);}void CWebsysDlg::DoDataExchange(CDataExchange* pDX){CDialog::DoDataExchange(pDX);//{{AFX_DATA_MAP(CWebsysDlg)DDX_Control(pDX, IDC_EDIT_STATUS, m_status);DDX_Control(pDX, IDC_EDIT_ERROR, m_error);DDX_Control(pDX, IDC_LIST, m_listcrl);DDX_Control(pDX, IDC_EDIT_IP, m_edit_ip);DDX_Text(pDX, IDC_EDIT_MENU, m_menu);DDX_Text(pDX, IDC_EDIT_PORT, m_port);//}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CWebsysDlg, CDialog)//{{AFX_MSG_MAP(CWebsysDlg)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_COMMAND(ID_ABOUT, OnAbout)ON_COMMAND(ID_RUN, OnRun)ON_COMMAND(ID_CLOSE, OnClose)ON_COMMAND(ID_EXIT, OnExit)ON_BN_CLICKED(IDC_BUTTON_RUN, OnButtonRun)ON_BN_CLICKED(IDC_BUTTON_EXIT, OnButtonExit)ON_BN_CLICKED(IDC_BUTTON_CLOSE, OnButtonClose) ON_BN_CLICKED(IDC_SET_MENU, OnSetMenu)ON_WM_TIMER()//}}AFX_MSG_MAPEND_MESSAGE_MAP()// 主对话框初始化函数BOOL CWebsysDlg::OnInitDialog(){CDialog::OnInitDialog();// Add "About..." menu item to system menu.// IDM_ABOUTBOX must be in the system command range.ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX < 0xF000);CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != NULL){CString strAboutMenu;strAboutMenu.LoadString(IDS_ABOUTBOX);if (!strAboutMenu.IsEmpty()){pSysMenu->AppendMenu(MF_SEPARATOR);pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);}}// Set the icon for this dialog. The framework does this automatically// when the application's main window is not a dialogSetIcon(m_hIcon, TRUE); // Set big iconSetIcon(m_hIcon, FALSE); // Set small icon// TODO: Add extra initialization hereIP=inet_addr("96.103.20.222");//对ip进行初始换m_edit_ip.SetAddress(IP);//将初始换的IP地址在IP控件中显示出来m_port="5000";//初始化端口地址m_menu="E:/web";//初始化主目录//对列表控件进行初始化m_listcrl.SetExtendedStyle(LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT|LVS_EX_FLATSB);m_listcrl.InsertColumn(0,"序号",LVCFMT_CENTER,50);m_listcrl.InsertColumn(1,"IP",LVCFMT_CENTER,120);m_listcrl.InsertColumn(2,"端口号",LVCFMT_CENTER,70);m_listcrl.InsertColumn(3,"请求命令",LVCFMT_CENTER,180);m_listcrl.InsertColumn(4,"处理结果",LVCFMT_CENTER,80);m_listcrl.InsertColumn(5,"时间",LVCFMT_CENTER,80);UpdateData(false);//更新图形界面中的控件数据return TRUE; // return TRUE unless you set the focus to a control}//命令相应函数void CWebsysDlg::OnSysCommand(UINT nID, LPARAM lParam){if ((nID & 0xFFF0) == IDM_ABOUTBOX){CAboutDlg dlgAbout;dlgAbout.DoModal();}else{CDialog::OnSysCommand(nID, lParam);}}void CWebsysDlg::OnPaint(){if (IsIconic()){CPaintDC dc(this); // device context for paintingSendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);// Center icon in client rectangleint cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;// Draw the icondc.DrawIcon(x, y, m_hIcon);}else{CDialog::OnPaint();}}HCURSOR CWebsysDlg::OnQueryDragIcon(){return (HCURSOR) m_hIcon;}//帮助菜单相应函数void CWebsysDlg::OnAbout(){// TODO: Add your command handler code hereCAboutDlg dlgAbout;dlgAbout.DoModal();//弹出帮助对话框}//运行菜单相应函数void CWebsysDlg::OnRun(){int k;CString s;CTime time=CTime::GetCurrentTime();//获取本机时间s=time.Format("%I:%M %p");//将获取的时间转换为字符串格式this->m_status.SetWindowText("服务器已开启\r\n"+s);//显示服务器状态信息this->m_error.SetWindowText("\r\n");stop=0;CWinThread *pThread;pThread = AfxBeginThread(listen_sock,(LPVOID)this,0,0,0);//创建服务器监听线程//如果线程创建失败,返回错误提示if(pThread==NULL){k=GetLastError();s.Format("%d",k);s="服务器开启失败\r\n错误代码为:"+s;this->m_error.SetWindowText(s);}}//关闭服务器菜单相应函数void CWebsysDlg::OnClose(){// TODO: Add your command handler code herestop=1;CString s;s.Format("%d",tnumber);mm_error+="\r\n";mm_error+="总进程数:"+s;this->m_error.SetWindowText(mm_error);//显示相关信息提示closesocket(Lsock);CTime time=CTime::GetCurrentTime();//获取本机时间CString sTime=time.Format("%I:%M %p");this->m_status.SetWindowText("服务器已关闭\r\n"+sTime);//显示服务器状态信息}//退出菜单相应函数void CWebsysDlg::OnExit(){// TODO: Add your command handler code hereOnOK();}//运行按钮相应函数void CWebsysDlg::OnButtonRun(){// TODO: Add your control notification handler code hereOnRun();}//退出按钮相应函数void CWebsysDlg::OnButtonExit()// TODO: Add your control notification handler code hereOnExit();}//关闭服务器按钮相应函数void CWebsysDlg::OnButtonClose(){// TODO: Add your control notification handler code hereOnClose();}//设置IP、端口号、主目录按钮相应函数void CWebsysDlg::OnSetMenu(){// TODO: Add your control notification handler code hereUpdateData();CString IPS;BYTE p1,p2,p3,p4;m_edit_ip.GetAddress(p1,p2,p3,p4);//获取IP空间中的IP地址IPS.Format("%d.%d.%d.%d",p1,p2,p3,p4);//将IP地址装换为字符串类型IP=inet_addr(IPS);//将获取的IP地址赋给全局IP变量port=_ttoi(m_port);//将获取的端口号赋给全局port变量AfxMessageBox("主机IP、端口及主目录修改成功!");}//监听socket创建函数static UINT listen_sock(LPVOID n){CWebsysDlg *dlgthis;saddr sd;dlgthis=(CWebsysDlg*)n;//将传递过来的参数转换为主对话框类的类型变量WSADATA wsaData;SOCKET wsock; //接收socketsockaddr_in addr;sockaddr_in addr_c;int addr_len;int serror;CString vertion;tnumber=0;//用于记录创建的线程中暑ws.dlg1=dlgthis;mm_error.Empty(); //情况信息提示显示框中的数据int nRc = WSAStartup(0x0101, & wsaData);//对winsock进行初始换if(nRc){//Winsock 初始化错误mm_error+="Winsock 初始化错误";dlgthis->m_error.SetWindowText(mm_error);return 0;}if(wsaData.wVersion != 0x0101){//版本支持不够//报告错误给用户,清除Winsock,返回vertion.Format("%u",wsaData.wVersion);mm_error+=vertion;dlgthis->m_error.SetWindowText(mm_error);WSACleanup();return 0;}//记录winsock的版本信息vertion.Format("%d",wsaData.wVersion);mm_error+="Do WSAStarrup "+vertion;//创建监听sockLsock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);//判断socket是否创建成功,记录相关信息if(serror=WSAGetLastError()){mm_error+="\r\nsocket创建失败";dlgthis->m_error.SetWindowText(mm_error);closesocket(Lsock);return 0;}elsemm_error+="\r\nsocket创建成功";//获取主机IP、端口和主目录strcpy(mainfile,dlgthis->m_menu);memset(&addr,0,sizeof(addr));addr.sin_family=AF_INET;addr.sin_port=htons(port);addr.sin_addr.S_un.S_addr=IP;//将创建的socket和主机地址绑定bind(Lsock,(LPSOCKADDR)&addr,sizeof(addr));//获取错误代码serror=WSAGetLastError();vertion.Format("%d",serror);//根据错误代码对绑定是否成功进行判断,记录绑定信息if(serror){mm_error+="\r\nsocket绑定失败"+vertion;dlgthis->m_error.SetWindowText(mm_error);return 0;}elsemm_error+="\r\nsocket绑定成功";//将绑定的socket设置为监听的状态if(listen(Lsock,Lnumber)==SOCKET_ERROR){//监听状态设置失败,返回错误代码serror=WSAGetLastError();vertion.Format("%d",serror);mm_error+="\r\nsocket监听失败"+vertion;dlgthis->m_error.SetWindowText(mm_error);closesocket(Lsock);return 0;}elsemm_error+="\r\nsocket监听成功";addr_len=sizeof(addr_c);int k=0;while(1){//等待连接请求,如果有连接请求则新建一个socketwsock=accept(Lsock,(LPSOCKADDR)&addr_c,&addr_len);if(wsock==INVALID_SOCKET){//有连接请求,但创建失败serror=WSAGetLastError();vertion.Format("%d",serror);mm_error+="\r\nsocket连接失败"+vertion;closesocket(wsock);return 0;}//判断服务器是否关闭,关闭则跳出循环if(stop)break;Sleep(1000);sd.addr=&addr_c;sd.sockr=wsock;//针对每个连接请求创建线程,完成报文和文件数据的传输CWinThread *pThread;pThread = AfxBeginThread(get_sock,(LPVOID)&sd,0,0,0);if(pThread==NULL){//线程创建失败,返回错误代码k=GetLastError();break;}}vertion.Format("%d",k);mm_error+="\r\n";mm_error+="返回错误代码:"+vertion;closesocket(wsock);//关闭接收socketclosesocket(Lsock);//关闭监听socketWSACleanup( );//清楚winsock的初始化return 0;}static UINT get_sock(LPVOID n){char rbuf[max1];char *sbuf;char request[64];char filename[64];char httpvertion[16];FILE *fd;char *content;char statu[64];char code[16];int filesize=0;CString message;int serror;SOCKET Wsock;sockaddr_in *addr_c;saddr *sd;sd=(saddr*)n;Wsock=sd->sockr;addr_c=sd->addr;//接受请求报文if(recv(Wsock,rbuf,max1,0)==SOCKET_ERROR){//请求报文接受失败,返回错误代码serror=WSAGetLastError();message.Format("%d",serror);//AfxMessageBox("\r\nsocket数据接收失败"+message);return 0;}//获取请求命令行if(strlen(rbuf)){char *a=strtok(rbuf," ");strcpy(request,a);//获取请求命令a=strtok(NULL," ");strcpy(filename,a);//获取请求文件a=strtok(NULL,"\r");strcpy(httpvertion,a);//获取HTTP协议版本}sprintf(request,"%s %s %s",request,filename,httpvertion); char type[128];//判断请求文件类型if(!strncmp(strrev(filename),"gpj.",4))strcpy(type,"image/jpg\r\nAccept-Ranges:bytes");else if(!strncmp(filename,"oci.",4)){closesocket(Wsock);return 0;}elsestrcpy(type,"text/html");char filename1[128];strcpy(filename1,mainfile);strrev(filename);strcat(filename1,filename);content=new char[max2];//以二进制形式打开请求文件fd=fopen(filename1,"rb");if(fd==NULL){//打开失败,文件不错在或者已经损坏strcpy(statu,"Not Found");//设置响应报文状态字strcpy(content,"404 Not Found!\r\n找不到文件");//设置响应报文实体}else{//文件打开成功,读取文件内容存入申请的缓冲区filesize=fread(content,1,max2,fd);content[filesize]='\0';if(filesize<=0)//判断文件读取是否成功{strcpy(content,"Not Found");strcpy(statu,"Not Found");}strcpy(statu,"OK");fclose(fd);//关闭文件句柄}//设置响应报文状态编号if(!strcmp(statu,"OK"))strcpy(code,"200");elsestrcpy(code,"404");//响应报文初始状态行char s[128];sbuf=new char[max1+max2];//memset(sbuf,0,max2+max1);sprintf(s,"%s %s %s\r\n",httpvertion,code,statu); strcpy(sbuf,s);//响应报文首部strcat(sbuf,"Server:zhuang\r\n");sprintf(s,"%s %d\r\n","Content-Length:",filesize); strcat(sbuf,s);sprintf(s,"%s %s\r\n","Content-Type:",type); strcat(sbuf,s);//首部结束-空行strcat(sbuf,"\r\n");//实体主体int i,j;for(i=0,j=strlen(sbuf);i<filesize;i++,j++)sbuf[j]=content[i];sbuf[j]='\0';//发送报文if(send(Wsock,sbuf,max1+max2,0)==SOCKET_ERROR){serror=WSAGetLastError();message.Format("%d",serror);AfxMessageBox("\r\nsocket数据发送失败"+message);return 0;}//获取本机时间并转换为字符格式CTime time=CTime::GetCurrentTime();CString st=time.Format("%I:%M %p");//获取请求的IP,端口号,请求命令行CString mport,mip,s2,t;mport.Format("%hu",addr_c->sin_port);mip.Format("%d.%d.",addr_c->sin_addr.S_un.S_un_b.s_b1,addr_c->sin_addr.S_un.S_un_b.s_b2); s2.Format("%d.%d",addr_c->sin_addr.S_un.S_un_b.s_b3,addr_c->sin_addr.S_un.S_un_b.s_b4); mip+=s2;t.Format("%d",Tnumber+1);slock.Lock();//线程互斥信号//对图形界面,列表控件中显示的信息进行更新ws.dlg1->m_listcrl.InsertItem(Tnumber,t);//请求序号ws.dlg1->m_listcrl.SetItemText(Tnumber,1,mip);//请求ipws.dlg1->m_listcrl.SetItemText(Tnumber,2,mport);//请求端口号ws.dlg1->m_listcrl.SetItemText(Tnumber,3,request);//请求命令行ws.dlg1->m_listcrl.SetItemText(Tnumber,4,statu);//请求结果ws.dlg1->m_listcrl.SetItemText(Tnumber,5,st);//请求结果状态编号Tnumber++;tnumber++;slock.Unlock();//线程互斥资源解锁信号//关闭连接的socketclosesocket(Wsock);return 0;}。
极致精简的webservice例子--Java版
看了网上好多关于webservice的例子,基本上对初学者来说都是模棱两可云里雾里,现在,我将网上关于webservice的讲解提炼出来,通过一个最简单使用并且方便的例子,告诉大家什么是webservice。
简单来说,webservice就是远程调用技术,也叫XML Web Service WebService 是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的独立的通讯技术。
是:通过SOAP在Web上提供的软件服务,使用WSDL文件进行说明,并通过UDDI进行注册。
XML:(Extensible Markup Language)扩展型可标记语言。
面向短期的临时数据处理、面向万维网络,是Soap的基础。
Soap:(Simple Object Access Protocol)简单对象存取协议。
是XML Web Service 的通信协议。
当用户通过UDDI找到你的WSDL描述文档后,他通过可以SOAP调用你建立的Web服务中的一个或多个操作。
SOAP是XML文档形式的调用方法的规范,它可以支持不同的底层接口,像HTTP(S)或者SMTP。
WSDL:(Web Services Description Language) WSDL 文件是一个 XML 文档,用于说明一组 SOAP 消息以及如何交换这些消息。
大多数情况下由软件自动生成和使用。
如何发布一个webservice:1. 创建一个web项目为了简单明了,我一共创建了三个类,一个接口,一个接口实现类,一个发布类(main方法)。
具体如下:这是WebService接口,其中定义了一个sayHello(String name)的方法记住一定要在类上加上@WebService注解@WebMethod注解声明了这个方法是要发布出去的方法这个类是WebService接口的实现类,写明了sayHello(String name)方法的方法体。
java实现简单的webservice方式
java实现简单的webservice⽅式本⽂实例为⼤家分享了java实现webservice⽅式的具体代码,供⼤家参考,具体内容如下经过测试 jdk1.6.10以下会出现bug 建议使⽤10以上版本1、定义接⼝package org.enson.chan;import javax.jws.WebService;import javax.jws.soap.SOAPBinding;@WebService@SOAPBinding(style=SOAPBinding.Style.RPC)public interface IMyService {public int add(int a , int b);public int max(int a , int b);}2、实现接⼝package org.enson.chan;import javax.jws.WebService;@WebService(endpointInterface="org.enson.chan.IMyService")public class MyServiceImpl implements IMyService {public int add(int a, int b) {System.out.println(a+"+"+b+"="+(a+b));return a+b;}public int max(int a, int b) {System.out.println("a与b⽐较⼤⼩,取⼤值"+((a>b)?a:b));return (a>b)?a:b;}}3、定义服务package org.enson.chan;import javax.xml.ws.Endpoint;public class MyServer {public static void main(String[] args) {String address = "http://localhost:8090/ns";Endpoint.publish(address, new MyServiceImpl());}}4、测试服务package org.enson.chan;import .MalformedURLException;import .URL;import space.QName;import javax.xml.ws.Service;public class TestClient {public static void main(String[] args) {try {URL url = new URL("http://localhost:8090/ns?wsdl");QName sname = new QName("/", "MyServiceImplService");//创建服务Service service = Service.create(url,sname);//实现接⼝IMyService ms = service.getPort(IMyService.class);System.out.println(ms.add(12,33));//以上服务有问题,依然依赖于IMyServie接⼝} catch (MalformedURLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}5、TestSoapimport java.io.IOException;import java.io.StringReader;import java.io.StringWriter;import .URL;import javax.xml.bind.JAXBContext;import javax.xml.bind.JAXBException;import javax.xml.bind.Marshaller;import space.QName;import javax.xml.soap.MessageFactory;import javax.xml.soap.SOAPBody;import javax.xml.soap.SOAPBodyElement;import javax.xml.soap.SOAPEnvelope;import javax.xml.soap.SOAPException;import javax.xml.soap.SOAPHeader;import javax.xml.soap.SOAPMessage;import javax.xml.soap.SOAPPart;import javax.xml.transform.Source;import javax.xml.transform.Transformer;import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.TransformerException;import javax.xml.transform.TransformerFactory;import javax.xml.transform.TransformerFactoryConfigurationError; import javax.xml.transform.dom.DOMResult;import javax.xml.transform.stream.StreamSource;import javax.xml.ws.Dispatch;import javax.xml.ws.Service;import javax.xml.ws.soap.SOAPFaultException;import javax.xml.xpath.XPath;import javax.xml.xpath.XPathConstants;import javax.xml.xpath.XPathExpressionException;import javax.xml.xpath.XPathFactory;import org.junit.Test;import er;import org.w3c.dom.Document;import org.w3c.dom.Node;import org.w3c.dom.NodeList;public class TestSoap {private String ns = "/";private String wsdlUrl = "http://localhost:8989/ms?wsdl";@Testpublic void test01() {try {MessageFactory factory = MessageFactory.newInstance();SOAPMessage message = factory.createMessage();SOAPPart part = message.getSOAPPart();SOAPEnvelope envelope = part.getEnvelope();SOAPBody body = envelope.getBody();QName qname = new QName("/webservice","add","ns");//<ns:add xmlns="/webservice"/>//body.addBodyElement(qname).setValue("<a>1</a><b>2</b>");SOAPBodyElement ele = body.addBodyElement(qname);ele.addChildElement("a").setValue("22");ele.addChildElement("b").setValue("33");message.writeTo(System.out);} catch (SOAPException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}@Testpublic void test02() {try {URL url = new URL(wsdlUrl);QName sname = new QName(ns,"MyServiceImplService");Service service = Service.create(url,sname);Dispatch<SOAPMessage> dispatch = service.createDispatch(new QName(ns,"MyServiceImplPort"), SOAPMessage.class, Service.Mode.MESSAGE);SOAPMessage msg = MessageFactory.newInstance().createMessage();SOAPEnvelope envelope = msg.getSOAPPart().getEnvelope();SOAPBody body = envelope.getBody();QName ename = new QName(ns,"add","nn");//<nn:add xmlns="xx"/>SOAPBodyElement ele = body.addBodyElement(ename);ele.addChildElement("a").setValue("22");ele.addChildElement("b").setValue("33");msg.writeTo(System.out);System.out.println("\n invoking.....");SOAPMessage response = dispatch.invoke(msg);response.writeTo(System.out);System.out.println();Document doc = response.getSOAPPart().getEnvelope().getBody().extractContentAsDocument();String str = doc.getElementsByTagName("addResult").item(0).getTextContent();System.out.println(str);} catch (SOAPException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}@Testpublic void test03() {try {URL url = new URL(wsdlUrl);QName sname = new QName(ns,"MyServiceImplService");Service service = Service.create(url,sname);Dispatch<Source> dispatch = service.createDispatch(new QName(ns,"MyServiceImplPort"),Source.class, Service.Mode.PAYLOAD);User user = new User(3,"zs","张三","11111");JAXBContext ctx = JAXBContext.newInstance(User.class);Marshaller mar = ctx.createMarshaller();mar.setProperty(Marshaller.JAXB_FRAGMENT, true);StringWriter writer= new StringWriter();mar.marshal(user, writer);String payload = "<nn:addUser xmlns:nn=\""+ns+"\">"+writer.toString()+"</nn:addUser>";System.out.println(payload);StreamSource rs = new StreamSource(new StringReader(payload));Source response = (Source)dispatch.invoke(rs);Transformer tran = TransformerFactory.newInstance().newTransformer();DOMResult result = new DOMResult();tran.transform(response, result);XPath xpath = XPathFactory.newInstance().newXPath();NodeList nl = (NodeList)xpath.evaluate("//user", result.getNode(),XPathConstants.NODESET);User ru = (User)ctx.createUnmarshaller().unmarshal(nl.item(0));System.out.println(ru.getNickname());} catch (IOException e) {e.printStackTrace();} catch (JAXBException e) {e.printStackTrace();} catch (TransformerConfigurationException e) {e.printStackTrace();} catch (TransformerFactoryConfigurationError e) {e.printStackTrace();} catch (TransformerException e) {e.printStackTrace();} catch (XPathExpressionException e) {e.printStackTrace();}}@Testpublic void test04() {try {URL url = new URL(wsdlUrl);QName sname = new QName(ns,"MyServiceImplService");Service service = Service.create(url,sname);Dispatch<SOAPMessage> dispatch = service.createDispatch(new QName(ns,"MyServiceImplPort"), SOAPMessage.class, Service.Mode.MESSAGE);SOAPMessage msg = MessageFactory.newInstance().createMessage();SOAPEnvelope envelope = msg.getSOAPPart().getEnvelope();SOAPBody body = envelope.getBody();SOAPHeader header = envelope.getHeader();if(header==null) header = envelope.addHeader();QName hname = new QName(ns,"authInfo","nn");header.addHeaderElement(hname).setValue("aabbccdd");QName ename = new QName(ns,"list","nn");//<nn:add xmlns="xx"/>body.addBodyElement(ename);msg.writeTo(System.out);System.out.println("\n invoking.....");SOAPMessage response = dispatch.invoke(msg);response.writeTo(System.out);System.out.println();Document doc = response.getSOAPBody().extractContentAsDocument();NodeList nl = doc.getElementsByTagName("user");JAXBContext ctx = JAXBContext.newInstance(User.class);for(int i=0;i<nl.getLength();i++) {Node n = nl.item(i);User u = (User)ctx.createUnmarshaller().unmarshal(n);System.out.println(u.getNickname());}} catch (SOAPException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} catch (JAXBException e) {e.printStackTrace();}}@Testpublic void test05() {try {URL url = new URL(wsdlUrl);QName sname = new QName(ns,"MyServiceImplService");Service service = Service.create(url,sname);Dispatch<SOAPMessage> dispatch = service.createDispatch(new QName(ns,"MyServiceImplPort"), SOAPMessage.class, Service.Mode.MESSAGE);SOAPMessage msg = MessageFactory.newInstance().createMessage();SOAPEnvelope envelope = msg.getSOAPPart().getEnvelope();SOAPBody body = envelope.getBody();QName ename = new QName(ns,"login","nn");//<nn:add xmlns="xx"/>SOAPBodyElement ele = body.addBodyElement(ename);ele.addChildElement("username").setValue("ss");ele.addChildElement("password").setValue("dd");msg.writeTo(System.out);System.out.println("\n invoking.....");SOAPMessage response = dispatch.invoke(msg);response.writeTo(System.out);System.out.println();} catch(SOAPFaultException e){System.out.println(e.getMessage());} catch (SOAPException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Web Service开发简单了解及应用一、实验/实习过程Web Service开发1(1)实验目的1、通过实验,熟悉SOAP的基本结构与功能;2、通过实验,掌握WSDL的作用、构成;3、利用CXF开发Web Service;(2)实验内容及要求1、安装XML的编辑环境XML SPY2012,并熟悉XMLSPY的工作环境;2、通过XML SPY软件,了解WSDL、SOAP的结构;①在中选择一个服务(自选),并用XML SPY软件打开该服务的WSDL文档,观察该文档的结构。
实验过程中我选择的是英汉翻译服务,该EnglishChinese.asmx>wsdl的文档结构如图1:图1 EnglishChinese?wsdl②在SOAP菜单中,创建一个选定的WebService的SOAP请求,观察该请求SOAP 的结构,并修改调用参数值。
然后向服务器发送请求,并观察服务器返回的响应SOAP 文档。
输入WSDL文件位置路径,获得WSDL文档如图2:图2 获取WSDL文档选择了服务和端口后选择一个SOAP操作,即实现类中的一个具体方法,如图3:图3 选择SOAP操作SOAP请求文档如图4:图4 SOAP请求文档SOAP返回文档如图5:图5 SOAP返回文档(3)利用CXF包,采用代码优先的方式开发Web Service。
该服务中包含用来计算两个数的和、差与积的功能。
①源代码见附录1②XMLSpy2012 测试结果获取服务的WSDL(calculator?wsdl)文档,如图6:图6 cal culator?wsdl文档选择操作即具体实现类的方法,如图7:图7 cal culator服务提供的方法SOAP请求文档如图8:图8 SOAP请求文档SOAP响应文档如图9:图9 SOAP响应文档③编写客户端程序测试如图10:图10 客户端程序测试calculator Web Service服务Web Service 开发2(1)实验目的1、通过实验,掌握CXF发布Web Servicer的技术;2、通过实验,掌握CXF开发Web Service客户端的方法;3、通过实验,熟悉Visual Studio中C#语言调用Web Service的方法;(2)实验内容及要求1、将上次实验中开发的“用来计算两个数的和、差与积的功能” Web服务的基础上,扩展两种运算(自选),并通过CXF的Servl et方式发布到Tomcat上;通过CXF的Servl et发布到Tomcat如图11:图11 发布到Web Service上的服务服务调用测试如图12:图12 服务调用测试2、利用CXF包中的wsdl2java工具,生成调用本Web Sever的桩代码,并编写代码调用本Web Sever的功能来进行计算(要求测试所有的计算功能)。
①源代码见附录2②桩代码:Wsdl2java -p Client -d G:\eclipseWithJDK_WorkSpace\webService1\src\Clienthttp://l ocalhost:8080/calculatorimpl?wsdl③根据WSDL文档生成的java客户端程序如图13:图13 客户端java代码④编写代码测试本服务的所有计算功能如图14:图14 计算功能测试结果3、在Visual Studio中,编写代码调用本Web Sever的功能来进行计算(要求测试所有的计算功能)。
二、实验/实习总结实验过程中出现了很多问题也学到了很多东西。
首先是关于Web Service的开发,Web Service开发过程第一步是先编写要发布服务的接口类;第二步根据接口类编写具体的实现类;第三步发布Web Service。
在第三步中可以有两种发布方式,首先是JDK直接支持的Endpoint发布方法,还有是CXF支持的Spring集成发布。
需要注意的是Endpoint发布方法JDK可以直接支持但是CXF也可以支持,但是后一种发布方式只能是基于CXF的。
Web Service的两种发布方式都可以被客户访问但是区别是JDK支持的发布端口号不能是8080如果放在web工程中需要两个端口号支持,但是基于CXF的发布方式只需要8080端口支持即可。
然后是关于Web Service调用的理解。
Web Service调用必须有的文档是WSDL文档,可以是本地的也可以是远程访问。
通过wsdl2java工具将WSDL文档转换成java客户端代码,然后利用桩代码编写你需要实现的程序,并且在调用别人写的Web Service服务时候要学会看WSDL文档结构。
还有Web Service是平台独立的也就是Web Service开发的语言可以和客户端程序语言不一致。
附录1 基于CXF代码优先方式开发Web Service相关源码(1)服务接口Calculator类:package ws;import javax.jws.WebService;/** 描述:WebService服务接口类*/@WebServicepublic interface Calculator {public int addition(int a,int b);public int subtraction(int a,int b);public int multiplication(int a,int b);}(2)接口实现类CalculatorImpl类:package ws;/** WebService的具体实现类*/public class CalculatorImpl implements Calculator {@Overridepublic int addition(int a, int b) {// TODO Auto-generated method stubreturn a+b;}@Overridepublic int subtraction(int a, int b) {// TODO Auto-generated method stubreturn a-b;}@Overridepublic int multiplication(int a, int b) {// TODO Auto-generated method stubreturn a*b;}}(3)服务发布类:package ws;import javax.xml.ws.Endpoint;/** WebService服务*/public class Server {public static void main(String[] args) {// TODO Auto-generated method stubCalculator service=new CalculatorImpl();String address="http://localhost:8080/calculator";Endpoint.publish(address,service);}}(4)客户端程序测试类:package Client;import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;public class ClientTest {public static void main(String[] args) {// TODO Auto-generated method stubJaxWsProxyFactoryBean factory=new JaxWsProxyFactoryBean();factory.setServiceClass(Calculator.class);factory.setAddress("http://localhost:8080/calculator?wsdl");Calculator service=(Calculator) factory.create();System.out.println("addition(2,3)");System.out.println(service.addition(2, 3));System.out.println("subtraction(33,22)");System.out.println(service.subtraction(33, 22));System.out.println("multiplication(2,3)");System.out.println(service.multiplication(2, 3));}}附录2 基于CXF 的Servlet 发布到tomcat相关源码(1)服务接口Calculator类:package ws;import javax.jws.WebService;/** 描述:WebService服务接口类*/@WebServicepublic interface Calculator {public int addition(int a,int b);public int subtraction(int a,int b);public int multiplication(int a,int b);public double division(int a,int b);public int takeOver(int a,int b);}(2)接口实现类CalculatorImpl类:package ws;import javax.jws.WebService;/** WebService的具体实现类*/@WebService(targetNamespace = "http://ws/", endpointInterface = "ws.Calculator", portName = "CalculatorImplPort", serviceName = "CalculatorImplService")public class CalculatorImpl implements Calculator {@Overridepublic int addition(int a, int b) {// TODO Auto-generated method stubreturn a+b;}@Overridepublic int subtraction(int a, int b) {// TODO Auto-generated method stubreturn a-b;}@Overridepublic int multiplication(int a, int b) {// TODO Auto-generated method stubreturn a*b;}@Overridepublic double division(int a, int b) {// TODO Auto-generated method stubreturn a/b;}@Overridepublic int takeOver(int a, int b) {// TODO Auto-generated method stubreturn a%b;}}(3)Web.xml配置文件<?xml version="1.0"encoding="UTF-8"?><web-app xmlns:xsi="/2001/XMLSchema-instance" xmlns="/xml/ns/javaee"xmlns:web="/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="/xml/ns/javaee/xml/ns/javaee/web-app_2_5.xsd"id="WebApp_ID" version="2.5"><display-name>webService1</display-name><welcome-file-list><welcome-file>index.html</welcome-file><welcome-file>index.htm</welcome-file><welcome-file>index.jsp</welcome-file><welcome-file>default.html</welcome-file><welcome-file>default.htm</welcome-file><welcome-file>default.jsp</welcome-file></welcome-file-list><servlet><description>Apache CXF Endpoint</description><display-name>cxf</display-name><servlet-name>cxf</servlet-name><servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class> <load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>cxf</servlet-name><url-pattern>/services/*</url-pattern></servlet-mapping><session-config><session-timeout>60</session-timeout></session-config><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</list ener-class></listener></web-app>(4)beans.xml配置文件<?xml version="1.0"encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:jaxws="/jaxws"xsi:schemaLocation="/schema/beans /schema/beans/spring-beans-2.5.xsd/jaxws /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 xmlns:tns="http://ws/"id="calculator"implementor="ws.CalculatorImpl"wsdlLocation="wsdl/calculatorimpl.wsdl"endpointName="tns:CalculatorImplPort"serviceName="tns:CalculatorImplService"address="/calculatorimpl"><jaxws:features><bean class="org.apache.cxf.feature.LoggingFeature" /></jaxws:features></jaxws:endpoint></beans>(5)客户端测试类:package client;import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;public class ClientTest {public static void main(String[] args) {// TODO Auto-generated method stubJaxWsProxyFactoryBean factory=new JaxWsProxyFactoryBean();factory.setServiceClass(Calculator.class);factory.setAddress("http://localhost:8080/webService1/services/calc ulatorimpl?wsdl");Calculator service=(Calculator) factory.create();System.out.println("addition(2,3)");System.out.println(service.addition(2, 3));System.out.println("subtraction(33,22)");System.out.println(service.subtraction(33, 22));System.out.println("multiplication(2,3)");System.out.println(service.multiplication(2, 3));System.out.println("division(33,11)");System.out.println(service.division(33, 11));System.out.println("takeover(5,3)");System.out.println(service.takeOver(5, 3));}}。