Web服务优点

互操作性:实现不同系统间的相互调用(语言无关、平台无关)

Web服务是什么

Web 服务是一类应用程序,是能够用编程的方法通过Web调用来实现某个功能的应用程序


Web服务的体系结构


Web服务需要遵守的技术标准

1. XML(描述WEB服务数据的标准方法)

2. SOAP(表示WEB服务信息交换的协议)

3. WSDL(WEB服务描述语言)

4. UDDI(统一描述发现和集成)


这里关于WebService就不多加详细介绍了,如果有兴趣可以查看百度百科 WebService,我这里收藏了一份:
http://pan.baidu.com/s/1bnpLo43

Java中比较流行的两种Web服务开源框架axis和XFire比较


使用Web服务的一个例子

添加XFire用户库

点击工具Window→Preferences

Add JARs添加lib下的所以jar包和xfire-all-1.2.6.jar;

客户端调用Web服务

训练要点:

掌握利用XFire创建客户端,调用Web服务

需求说明:

任意输入一个数字n,返回1+2+…+n的累加和, 并在控制台显示出来

实现思路:

1、创建服务接口SumService.java

2、创建客户端调用类Client.java

3、运行求数字累加和Web服务

4、运行客户端调用服务,传入参数,获得运行结果


创建Web Service Project

点击新建 Web Service Project :SumWebService 
WebService选择第二个REST 点击Next
现在User Libraries 选择刚刚创建的XFire完成

配置web.xml
  <servlet>
  	<display-name>XFireServlet</display-name>
  	<servlet-name>XFireServlet</servlet-name>
  	<servlet-class>org.codehaus.xfire.transport.http.XFireConfigurableServlet</servlet-class>
  	<init-param>
  		<param-name>config</param-name>
  		<param-value>services.xml</param-value>
  	</init-param>
  	<load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
  	<servlet-name>XFireServlet</servlet-name>
  	<url-pattern>/services/*</url-pattern>
  </servlet-mapping>

新建接口和实现类:

新建接口:

cn.edu.hqu.service下SumService;

package cn.edu.hqu.service;

public interface SumService {
	/**
	 * 返回1-n的累加和
	 * @param n
	 * @return
	 */
	public int getSum(int n);
}
新建实现类 实现 SumService

cn.edu.hqu.service.impl下SumServiceImpl:

package cn.edu.hqu.service.impl;

import com.service.SumService;

public class SumServiceImpl implements SumService {

	public int getSum(int n) {
		int sum = 0;
		for (int i = 1; i <= n; i++) {
			sum += i;
		}
		return sum;
	}

}

在src下新建services.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xfire.codehaus.org/config/1.0">
	<service>
		<name>SumService</name>
		<serviceClass>cn.edu.hqu.service.SumService</serviceClass>
		<implementationClass>cn.edu.hqu.service.impl.SumServiceImpl</implementationClass>
		<style>wrapped</style>
		<use>literal</use>
		<scope>application</scope>
	</service>
</beans>

部署到tomcat启动,访问localhost:8080/SumWebService/services 


Web服务的调用


获取有效WSDL地址

新建一个客户端Web project: Client

引入服务端那个项目SumWebService

右击项目,Properties 


引入自己建的XFire标签库:右击项目 build path →add libra..→User Library Next 选择XFire完成;

 

Client新建SumClinet类
	public static void main(String[] args) throws Exception {
		//加载xfire
		//创建服务
		Service service =  new ObjectServiceFactory().create(SumService.class);
		//WSDL地址
		String url = "http://localhost:8080/SumWebService/services/SumService";
		XFireProxyFactory factory = new XFireProxyFactory(XFireFactory.newInstance().getXFire());
		SumService sumService = (SumService) factory.create(service, url);
		//保证服务端有开启
		System.out.println(sumService.getSum(100));
	}

运行之前,webService服务端(SumWebService)要先部署启动;

运行main,控制台输出5050 ;


 但是这样两个项目耦合在一起了;

另外一种方式 SumClinet:

	public static void main(String[] args) throws Exception {
				String wsdlLocation = "http://localhost:8080/SumWebService/services/SumService?wsdl";
		Client client = new Client(new URL(wsdlLocation));
		Object[] o =client.invoke("getSum",new Object[]{100});
		System.out.println(o[0]);
	}

运行main输出结果;


补充说明:点击web.xml 

下的org.codehaus.xfire.transport.http.XfireConfigurableServlet进到该类:

我们可以看到

private final static String CONFIG_FILE = "META-INF/xfire/services.xml";

默认路径是在META-INF/xfire/services.xml

源码里:
private String getConfigPath()
    {
        if (configPath == null || configPath.length() == 0)
        {
            return CONFIG_FILE;
        }
        return configPath;
    }

一开始会得到这个路径,如果路径为空的话,就会使用默认的路径;

所以我们在wen.xml里买指定 configPath路径,src下直接写文件名

  	<init-param>
  		<param-name>config</param-name>
  		<param-value>services.xml</param-value>
  	</init-param>

这样就不会报错了,或者可以将services.xml放在新建的META-INF/xfire/services.xml下;

Xfire下载:http://pan.baidu.com/s/1ntx8yLF

代码:http://pan.baidu.com/s/1vmXtG


Web服务,XFire的一个例子的更多相关文章

  1. 【记录一个问题】铁威马NAS存储中的人人影视APP,其WEB服务占满一个CPU核

    终端登录后,top命令发现rrshareweb这个进程把单个CPU核占满了. 发现其实是人人影视的web服务,而这个服务里面我还根本未使用. 卸载这个app后正常.

  2. 使用Spring进行远程访问与Web服务

    1.1. 简介   Spring为各种远程访问技术的集成提供了整合类.Spring使得开发具有远程访问功能的服务变得相当容易,而这些远程访问服务由普通Spring POJO实现.目前,Spring支持 ...

  3. (转)Web Service入门简介(一个简单的WebService示例)

    Web Service入门简介 一.Web Service简介 1.1.Web Service基本概念 Web Service也叫XML Web Service WebService是一种可以接收从I ...

  4. Web Service入门简介(一个简单的WebService示例)

    Web Service入门简介 一.Web Service简介 1.1.Web Service基本概念 Web Service也叫XML Web Service WebService是一种可以接收从I ...

  5. Nginx Web服务(一)

    一.Nginx原理介绍 1.1:什么是Nginx Nginx是一个开源的,支持高性能.高并发的WWW服务和代理服务软件 1.2:Nginx的功能特点及应用场合 ① 支持高并发:能支持几万并发连接,特别 ...

  6. J2EE基础之Web服务简介

    J2EE基础之Web服务简介 1.什么是Web服务? 在人们的日常生活中,经常会查询网页上某城市的天气信息,这些信息都是动态的.实时的,它是专业的气象站提供的一种服务.例如,在网上购物时,通常采用网上 ...

  7. 【Java】Web 服务编程技巧与窍门: 在 UDDI 注册中心为 Web 服务注册开发 UDDI Java 应用程序

    本技巧建立了一个使用统一描述.发现和集成 (Universal Description, Discovery, and Integration,UDDI) 来注册应用程序级消费的 Web 服务实例.作 ...

  8. IIS Web服务扩展中添加ASP.NET4.0

    问题 服务器上安装了ASP.NET 4.0.30319组件,但是在IIS的Web服务扩展中并没有找到ASP.NET v4.0.30319这项,这导致基于.NET4.0开发的网页都无法正常浏览(404错 ...

  9. EJB_开发EJB容器模型的WEB服务

    开发EJB容器模型的WEB服务 WEB服务 Web服务也是一种分布式技术,它与EJB最大的不同是,Web服务属于行业规范,可以跨平台及语言.而EJB属于Java平台的规范,尽管理论上可以跨平台,但实现 ...

随机推荐

  1. js在光标处插入内容

    //场景一 简易的页面可以这样写var range = window.getSelection().getRangeAt(0);range.insertNode(document.createText ...

  2. 在Linux服务器部署 .NET-Core 项目

    一.文章概要  这篇文章是讲述一个Linux 新手将 .NET-Core 项目部署在 Linux 服务器上的一个记录,以及在部署期间遇到的问题以及解决办法.有不恰当的地方.欢迎大神指正. 二.前期准备 ...

  3. [HNOI 2014]米特运输

    Description 米特是D星球上一种非常神秘的物质,蕴含着巨大的能量.在以米特为主要能源的D星上,这种米特能源的运输和储 存一直是一个大问题.D星上有N个城市,我们将其顺序编号为1到N,1号城市 ...

  4. [Codeforces 863B]Kayaking

    Description Vadim is really keen on travelling. Recently he heard about kayaking activity near his t ...

  5. [SPOJ962]Intergalactic Map 拆点+最大流

    Jedi knights, Qui-Gon Jinn and his young apprentice Obi-Wan Kenobi, are entrusted by Queen Padmé Ami ...

  6. ●BZOJ 2393 Cirno的完美算数教室

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=2393 题解: 容斥原理,暴力搜索,剪枝...和 [Scoi2010 幸运数字] 一样的(只是 ...

  7. 【吃炸弹的鸽子UVA10765-双联通模板】

    ·从前有一个鸽子Lence,它吃了一个炸弹,然后有人出了这道题. ·英文题,述大意:        给出一张连通无向图,求出:对于每个点,删去这个点(以及它相连的边以后)时,当前图中的连通块数量,这个 ...

  8. bzoj1926[Sdoi2010]粟粟的书架 二分 主席树

    1926: [Sdoi2010]粟粟的书架 Time Limit: 30 Sec  Memory Limit: 552 MBSubmit: 1064  Solved: 421[Submit][Stat ...

  9. bzoj 1899: [Zjoi2004]Lunch 午餐

    Description 上午的训练结束了,THU ACM小组集体去吃午餐,他们一行N人来到了著名的十食堂.这里有两个打饭的窗口,每个窗口同一时刻只能给一个人打饭.由于每个人的口味(以及胃口)不同,所以 ...

  10. Python Django缓存,信号,序列化,文件上传,Ajax登录和csrf_token验证

    本节内容 models操作 Django的缓存 请求方式 序列化 Form 配合Ajax实现登录认证 上传文件 Ajax  csrf_token验证方式 1 models操作 单表查询: curd(增 ...