15.WebService

15.WebService

1、WebService概述

​ 是一种技术,跨平台的Web服务,可以进行远程调用。
​ 常见的WebService接口
​ www.webxml.com.cn
​ JavaWebService的三种实现规范
​ JAX-WS:基于SOAP
​ JAX-RS:基于RESTFUL风格
​ … …
​ JAXM&SAJJ
​ SOAP协议:Simple Object Access Protocol
​ 以XML为数据传输格式,HTTP为传输协议的一种数据传输方式
​ WSDL:WebService Definition Language
​ WebService接口的说明文档
​ 应用
​ … …
​ 创建WebService的客户端
​ A:
​ 通过JDK的wsimport工具解析WSDL,生成源代码/字节码文件
​ 将生成的源代码复制到客户端的src目录下

​ B:
​ eclipse
​ 创建WebService的服务端
​ 创建接口

案例1:访问WebService定义的接口

//访问天气预报
package com.zuxia.client;

import java.net.MalformedURLException;
import java.net.URL;

import javax.xml.namespace.QName;

import org.apache.axis.client.Service;

import cn.com.WebXml.WeatherWSSoap;

public class TestMainClient {
	public static void main(String[] args) throws Exception {
		//url配置好的wsdl路径(网页路径)
		URL url = new URL("http://ws.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl");
        //参数1:发布网站的路径(时间)namespese,target(标签)... 参数2:找service标签中的name属性
		QName qName = new QName("http://WebXml.com.cn/","WeatherWS");
		//创建Service
		Service service = new Service(url, qName);
		//创建调用接口 参数:WeatherWSSoap找binding中对应的type
		WeatherWSSoap wws = (WeatherWSSoap) service.getPort(WeatherWSSoap.class);
		//调用wws中的方法 没有付费用户不用填写ID-->null
		String[] strs = wws.getWeather("北京", null);
		//循环遍历
		for(String str : strs) {
			System.out.println(str);
		}
	}
}

案例2:访问方式2

package com.zb.client;

import javax.xml.namespace.QName;

import org.apache.axis.client.Service;

import com.ws.point.service.UserServiceImpl;

public class TestMain {
	public static void main(String[] args) throws Exception {
		
		Service service = new Service("http://192.168.43.201:8081/?wsdl", new QName("http://service.point.ws.com/", "UserServiceImplService"));
		
		UserServiceImpl usi = (UserServiceImpl)service.getPort(UserServiceImpl.class);
		
		String str = usi.getMsg("哈哈哈哈哈");
		
		System.out.println(str);
	}
}

案例3:发布接口

第一步:发布
package com.zb.main;

import javax.xml.ws.Endpoint;

import com.zb.service.UserServiceImpl;

public class PublishMyWebService {
	public static void main(String[] args) {
		//发布接口
		//Endpoint:发布WebService的工具类
		//publicsh:发布(发布的地址,需要占用一个端口,当目标用户访问该服务,具体的服务类)
		Endpoint.publish("http://192.168.43.209:8081/", new UserServiceImpl());
	}
}
第二步:自定义接口
//定义抽象类
package com.zb.service;

import javax.jws.WebService;

@WebService
public interface UserService {

	public String getMsg(String name);
	
}
//定义实现类
package com.zb.service;

import javax.jws.WebService;

@WebService
public class UserServiceImpl implements UserService{

	@Override
	public String getMsg(String name) {
		return name+"你好!";
	}
	
}

2、代理

​ 增强某个类的某个方法
​ 静态代理
​ 动态代理
​ AOP,TransactionManager

案例:

//打包好的架包,可以以这种方式进行调用使用该架包
package com.zb.test;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.Arrays;

public class TestMain {
	public static void main(String[] args) {
		
		
		//创建计算器类
		Calc c = new CalcImpl();
		//新建一个代理对象
		Calc c2 = (Calc)Proxy.newProxyInstance(c.getClass().getClassLoader(),c.getClass().getInterfaces(),(proxy, method,  args2)-> {
				System.out.println("执行方法:"+method.getName());
				System.out.println("参数列表:"+Arrays.asList(args2));
				Integer i = (Integer)method.invoke(c, args2);
				System.out.println("代理中获得的执行结果为:"+i);
				return i;
		});
		
		//int res = c.jia(22, 33);
		
		int res = c2.cheng(11, 22);
		
		System.out.println(res);
	}
}

3、练习:

1、创建WebService提供如下功能,并创建客户端调用
提供一个学籍信息核实接口,根据用户传递的学生学号,如果存在于数据库中则返回true,否则返回false
提供一个在校人数查询,获取数据库中所有在读学生数量
提供一个在校平均年龄查询,获取数据库中所有在校学生的平均年龄
提供一个毕业生毕业时间查询,根据传递的学号,反馈该生毕业时间
提供一个在校学生生源地统计功能,根据输入的省份,返回该省份中在本校就读学生人数。
提供一个专业信息查询,根据专业返回该专业的学生人数
提供一个在校生性别分布查询,返回在校男女比例(男生人数多余女生则返回正整数,否则返回负整数)
提供一个数组的排序服务,要求传递排序规则为true则升序排序,false则降序排序
2、预习Struts2
Struts2是什么
如何搭建一个基础的Struts2应用程序
使用Struts2成功响应一个登陆的请求

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值