webservice基础学习(一)
1.什么是webservice?
webservice是一种跨越编程语言和操作系统的远程调用技术。它可以使系统与系统之间的功能调用更加方便,不拘泥于语言与操作系统。
2.webservice适用场景
1.客户端和服务器端之间通信都会有防火墙或者代理服务器。传统的实现互相通信的方法是在分布式对象,如DCOM、CORBA之间进行相互的远程过程调用(TCP/IP),但 在这种场合下HTTP协议的特性没有得到应用,因此在Internet环境下的远程过程调用不是一件容易的事情,同时在Internet上使用远程过程调用还存在安全问题,防火墙和 代理服务器还有可能阻挡这种类型的数据传输。HTTP是在Internet上发送消息的标准协议。Web服务使用基于XML消息处理作为基本的数据通信方式,应用程序可以使用HTTP和XML消息等标准在基于Web的应用程序之间交换信息,从而跨越防火墙。
2.企业里经常要把不同语言写成的在不同平台上运行的各种程序集成起来。大型公司常常有很多部门,每个部门都使用最适合自己特定需要的应用程序和平台。为了能够让公司各部门之间进行通信,首先应该将公司内部的应用程序和商业过程集成在一起。Web服务的开放标准使组织创建可重用的应用程序接口。当被包装成一个或一组Web服务之后,任何应用程序理论上都可以通过SOAP消息与任何其他应用程序进行通信。
3.软件复用是在软件开发中避免重复劳动的解决方案。Web服务实现了业务级别的软件复用,例如在B2B的集成中,各企业之间通过互相调用Web服务,实现了Web服务的共享,Web服务的使用企业不需要再重新开发其他企业中已经存在的服务。
3.使用Socket进行远程通信
1.客户端
1 /** 2 * 天气客户端 3 */ 4 public class WeatherClient { 5 6 7 public static void main(String[] arrs) throws IOException { 8 9 String city="苏州"; 10 //创建socket与服务器进行连接 11 Socket socket=new Socket("127.0.0.1",12345); 12 13 //输出流,发送请求信息 14 DataOutputStream dataOutputStream=new DataOutputStream(socket.getOutputStream()); 15 dataOutputStream.writeUTF(city); 16 System.out.println("请求城市:"+city); 17 18 //输入流,接受服务端传回的结果 19 DataInputStream dataInputStream=new DataInputStream(socket.getInputStream()); 20 String s = dataInputStream.readUTF(); 21 System.out.print(city+"的天气:"+s); 22 23 dataOutputStream.close(); 24 dataInputStream.close(); 25 } 26 }
2.服务端
1 /** 2 * 天气服务端 3 */ 4 public class WeatherServer { 5 6 7 public static void main(String[] arrs)throws IOException{ 8 9 //连接socket服务 10 ServerSocket serverSocket=new ServerSocket(12345); 11 12 while (true){ 13 //等待客户端连接 14 final Socket socket=serverSocket.accept(); 15 16 Runnable runnable=new Runnable() { 17 @Override 18 public void run() { 19 try { 20 //输入流,接收客户端的信息 21 DataInputStream dataInputStream=new DataInputStream(socket.getInputStream()); 22 String city = dataInputStream.readUTF(); 23 System.out.println("请求的城市是:"+city); 24 25 Thread.sleep(1000); 26 27 String result="大雨"; 28 System.out.println("今天的天气:"+result); 29 30 //输出流,返回服务端信息 31 DataOutputStream dataOutputStream=new DataOutputStream(socket.getOutputStream()); 32 dataOutputStream.writeUTF(result); 33 34 } catch (IOException e) { 35 e.printStackTrace(); 36 } catch (InterruptedException e) { 37 e.printStackTrace(); 38 } 39 } 40 }; 41 //启动线程 42 new Thread(runnable).start(); 43 } 44 45 } 46 }
3.返回结果
客户端
请求城市:苏州
苏州的天气:大雨
服务端
请求的城市是:苏州
今天的天气:大雨

浙公网安备 33010602011771号