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. 实验吧_密码忘记了(vim编辑器+代码审计)&天网管理系统(php弱比较+反序列化)

    密码忘记了 一开始尝试了各种注入发现都无效,在网页源码中找到了admin 的地址,输入地址栏发现并没有什么有用的信息,随便输个邮箱,网页返回了一个地址 ./step2.php?email=youmai ...

  2. [ZJOI 2013]丽洁体

    Description 题库链接 给出四个字符串 \(T,A,B,C\) ,问你至少在 \(T\) 串中删去几个单词能使得 \(T\) 串变为 \(A?B?C\) 的形式,其中 \(?\) 表示任意多 ...

  3. [BZOJ]1143: [CTSC2008]祭祀river

    题目大意:给定一个n个点m条边的有向无环图,问最多选多少个点使得两两之间互不到达.(n<=100,m<=1000) 思路:题目所求即最长反链,最长反链=最小链覆盖,对每个点向自己能到的所有 ...

  4. [Apio2012]dispatching 左偏树

    题目描述 在一个忍者的帮派里,一些忍者们被选中派遣给顾客,然后依据自己的工作获取报偿.在这个帮派里,有一名忍者被称之为 Master.除了 Master以外,每名忍者都有且仅有一个上级.为保密,同时增 ...

  5. bzoj1913[Apio2010]signaling 信号覆盖 计算几何

    1913: [Apio2010]signaling 信号覆盖 Time Limit: 20 Sec  Memory Limit: 64 MBSubmit: 1583  Solved: 646[Subm ...

  6. A Problem-Solving FlowChart || 如何解决编程问题

    This is from book Cracking the coding interview, Gayle Laakmann Mcdowell. The flowchart can be used ...

  7. 根据构建类型自动修改依赖库的BuildConfig.DEBUG的值

    app模块引用了library,在library模块中控制日志输出使用的是 if (BuildConfig.DEBUG) { logger.d("print %s", msg); ...

  8. Linux下用程序实现统计cpu和内存的利用率

    Linux下没有直接可以调用系统函数知道CPU占用和内存占用.那么如何知道CPU和内存信息呢.只有通过proc伪文件系统来实现. proc伪文件就不介绍了,只说其中4个文件.一个是/proc/stat ...

  9. php+xdebug远程调试(单人)

    目录 服务器上安装 XDebug 及配置 客户端 PHPstorm 配置 浏览器安装插件 服务器上安装 XDebug 及配置 XDebug 安装 略 配置: 打开 php.ini 配置文件: vim ...

  10. 用background-image做成条纹背景

    效果: 实现: //html <div class="container"> <span class="tip span-1">1111 ...