分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > IT知识

Web Service

发布时间:2023-09-06 02:04责任编辑:胡小海关键词:Web

什么是Web Service?

Web service 就是一个应用程序,它向外界暴露出一个能够通过Web进行调用的API。也就是说,你能够用编程的方法通过Web来调用这个应用程序。我们把调用这个Web service 的应用程序叫做客户。可以认为web service是一个web版的DLL.

也可以说Web service平台是一套标准,它定义了应用程序如何在Web上实现互操作性。你可以用任何你喜欢的语言,在任何你喜欢的平台上写Web service ,只要我们可以通过Web service标准对这些服务进行查询和访问。主流还是使用Java或者C#开发web service居多。

Web Service技术平台

XML

XML是在web上传送结构化数据的一种方式,现在更加主流则是 JSON.  XML格式封装数据(即XML中说明调用远程服务对象的哪个方法,传递的参数是什么,以及服务对象的 返回结果是什么)。XML主要的优点在于很好地解决了数据表示问题。 它既是平台无关的,又是厂商无关 的。XML是由万维网协会(W3C)创建,W3C制定的XML SchemaXSD 定义了一套标准的数据类型,并给出了一种语言来扩展这套数据类型。

SOAP

SOAP使用XML消息调用远程方法,WebService通过HTTP协议发送请求和接收结果时,发送的请求内容和结果内容都采用XML格式封装,并增加了一些特定的HTTP消息头,以说明 HTTP消息的内容格式,这些特定的HTTP消息头和XML内容格式就是SOAP协议。SOAP提供了标准的RPC方法来调用Web Service。  SOAP协议可以看成 HTTP协议和XML的组合。

WSDL

Web Service描述语言WSDL 就是用机器能阅读的方式提供的一个正式描述文档而基于XML的语言,用于描述Web Service及其函数、参数和返回值。因为是基于XML的,所以WSDL既是机器可阅读的,又是人可阅读的。

UDDI

UDDI是一套基于Web的、分布式的、为Web Service提供的、信息注册中心的实现标准规范,同时也包含一组使企业能将自身提供的Web Service注册,以使别的企业能够发现的访问协议的实现标准。

WebService调用原理

对客户端而言,给WebService客户端API传递wsdl文件的url地址,这些API就会创建出底层的代理类,通过调用这些代理,就可以访问到webservice服务。

代理类把客户端的方法调用变成soap格式的请求数据再通过HTTP协议发出去,并把接收到的soap 数据变成返回值返回。

对服务端而言,各类WebService框架的本质就是一个个Servlet,当远程调用客户端给它通过http协议发送过来 soap格式的请求数据时,它分析这个数据,就知道要调用哪个java类的哪个方法,于是去查找或创建这个对象,并调用其方法,再把方法返回的结果包装成 soap格式的数据,通过http响应消息回给客户端。

示例

1. Eclipse新建Dynamic web project,名称WebService1.添加HelloService和User类,点击运行,成功则出现消息:

Publish web service successfully.

 1 package src; 2 ?3 import java.io.Serializable; 4 import java.util.Date; 5 ?6 public class User implements Serializable { 7 ?8 ????private static final long serialVersionUID = -5983087877633074633L; 9 ????private int id;10 ????private String name;11 ????private Date birthday;12 ????13 ????public User(int id, String name, Date birthday) {14 ????????super();15 ????????this.id = id;16 ????????this.name = name;17 ????????this.birthday = birthday;18 ????}19 ????public int getId() {20 ????????return id;21 ????}22 ????public void setId(int id) {23 ????????this.id = id;24 ????}25 ????public String getName() {26 ????????return name;27 ????}28 ????public void setName(String name) {29 ????????this.name = name;30 ????}31 ????public Date getBirthday() {32 ????????return birthday;33 ????}34 ????public void setBirthday(Date birthday) {35 ????????this.birthday = birthday;36 ????}37 ????38 ????@Override39 ????public String toString() {40 ????????return "ID : "+ id + ", Name : " + name + ", Birthday : " + birthday;41 ????}42 }
 1 package src; 2 ?3 import java.util.ArrayList; 4 import java.util.Date; 5 import java.util.List; 6 ?7 import javax.jws.WebMethod; 8 import javax.jws.WebService; 9 import javax.xml.ws.Endpoint;10 11 //@WebService注解将此类发布为一个web service12 @WebService13 public class HelloService {14 15 ????/*16 ?????* 1. @WebMethod注解会发布此方法17 ?????* 2. 静态方法和final方法不能被发布18 ?????* 3. @WebMentod(exclude=true),此方法不被发布19 ?????* 4. 类上添加注解@WebService,类中所有非静态方法都会默认被发布20 ?????*/21 ????@WebMethod22 ????public String getInfo(String info) {23 ????????return "Hello World. Info : " + info;24 ????}25 ????26 ????@WebMethod27 ????public User getUser(int id) {28 ????????User user = null;29 30 ????????if (id == 1) {31 ????????????user = new User(id, "Tom Lee", new Date());32 ????????}33 ????????return user;34 ????}35 36 ????@WebMethod37 ????public List<User> getUsers() {38 ????????List<User> list = new ArrayList<User>();39 ????????User u1 = new User(100, "Alice Wong", new Date());40 ????????User u2 = new User(200, "Lucy Yue", new Date());41 ????????User u3 = new User(300, "Bob Luu", new Date());42 ????????list.add(u1);43 ????????list.add(u2);44 ????????list.add(u3);45 46 ????????return list;47 48 ????}49 50 ????public static void main(String[] args) {51 ????????// Endpoint – 此类为端点服务类,它的方法publish用于将一个已经添加了@WebService注解对象绑定到一个地址的端口上。 52 ????????// 发布端口可随意制定一个不被占用的号即可53 ????????// Service是固定的,后面的服务名字一般和类名保持一致54 ????????Endpoint.publish("http://localhost:8089/Service/HelloService", new HelloService());55 ????????// 发布成功后 在浏览器输入http://localhost:8089/Service/HelloService?wsdl56 ????????System.out.println("Publish web service successfully.");57 58 ????}59 60 }

2. Eclipse新建Application Client Project后,项目名称为ClientApp1, 运行CMD命令,

C:\Users\JimmyGates>wsimport -s C:\***\eclipse-workspace\ClientApp1\appClientModule -p src -keep http://localhost:8089/Service/HelloService?wsdl

-s 参数内容为项目所在的完整路径

-p 参数内容为代理类存放的包名

-keep 参数内容为web service的URL

成功则出现下面的信息,

正在解析 WSDL...

正在生成代码...

正在编译代码...

最后刷新项目,则出现如下代理类,

3. 继续在项目中添加Main.java, 点击运行查看结果,至此示例项目结束。

package src;import java.util.List;public class Main { ???public static void main(String[] args) { ???????// TODO Auto-generated method stub ???????HelloService service = new HelloServiceService().getHelloServicePort(); ???????String info = service.getInfo("TOM LEE"); ???????System.out.println(info); ???????User user = service.getUser(1); ???????System.out.println(user.getId()); ???????System.out.println(user.getName()); ???????System.out.println(user.getBirthday()); ???????List<User> users = service.getUsers(); ???????for(User u : users) { ???????????System.out.println(u.getId()); ???????????System.out.println(u.getName()); ???????????System.out.println(u.getBirthday()); ???????} ???????????}}

Web Service

原文地址:https://www.cnblogs.com/sankt/p/9309596.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved