java WebService 发布与访问

1. WebService概念介绍

webservice是一种跨编程语言和跨操作系统平台的远程调用技术。首先我们将实现特定逻辑功能的代码发布,并向外界提供一个能通过Web进行调用的接口,则外界很容易通过该接口使用你提供的服务。
webService三要素:soap、wsdl、uddi
soap:一种数据传输协议,了解这个概念就行
wsdl:基于XML,是对服务端提供服务的描述,包括对外发布的服务名称(类)、接口方法名称(方法)、接口参数(方法参数)服务返回的数据类型(方法返回值)等
uddi: UDDI 是一种目录服务,企业可以通过 UDDI 来注册和搜索 Web 服务,可以帮助Web 服务提供商在互联网上发布 Web 服务.

2. WebService服务发布
服务的创建与发布方法有很多,这里介绍一种最简单的方法,无需导入外部jar包

  1. 新建普通java项目WebService
  2. 新建实体类
package student;

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name = "StudentPO")
public class StudentPO {
	
	private String id;
	private String name;
	private String sex;
	private int gender;
	
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	public int getGender() {
		return gender;
	}
	public void setGender(int gender) {
		this.gender = gender;
	}


}

  1. 新建接口服务
package student;

import java.util.List;

import javax.jws.WebMethod;
import javax.jws.WebService;



@WebService
public interface StudentService {
	
	@WebMethod
	public List<StudentPO> findAllStudent();

}

  1. 新建接口实现类
package student;

import java.util.ArrayList;
import java.util.List;

import javax.jws.WebService;

@WebService(endpointInterface="student.StudentService")
public class StudentServiceImpl implements StudentService {
	
		@Override
		public List<StudentPO> findAllStudent() {
			ArrayList<StudentPO> studentPOs=new ArrayList<>();
			StudentPO studentPO1=new StudentPO();
			studentPO1.setId("001");
			studentPO1.setName("菜虚鲲");
			studentPO1.setSex("female");
			studentPO1.setGender(1);
			StudentPO studentPO2=new StudentPO();
			studentPO2.setId("002");
			studentPO2.setName("鸡太美");
			studentPO2.setSex("female");
			studentPO2.setGender(2);
			studentPOs.add(studentPO1);
			studentPOs.add(studentPO2);
			return 	studentPOs;
		}
}


  1. 新建发布服务的类
package util;

import javax.xml.ws.Endpoint;

import student.StudentServiceImpl;

public class PublishService {

	public static void main(String[] args) {
		
		String address="http://localhost:8060/StudentService";
		Endpoint.publish(address, new StudentServiceImpl());
		System.out.println("发布成功!地址为:  "+address);

	}
}


  1. 访问wsdl文档,判断服务是否发布成功,在地址输入 http://localhost:8060/StudentService?wsdl,可以看到wsdl文档,里面有接口和方法的描述。
    在这里插入图片描述

3. 客户端访问
客户端访问技术有很多,这里介绍两种,一是利用wsdl生成本地代码访问,二是远程服务调用

3.1 本地代码调用
-----借助wsdl文档生成本地代码,像使用本地代码一样调用

<1>.新建普通Java项目

<2>.进入项目src目录
在这里插入图片描述
<3>在地址栏输入cmd 回车,进入命令行,输入 http://localhost:8060/StudentService?wsdl 回车,可以看到生成了本地代码

在这里插入图片描述
<4>进入项目 refresh ,可以看到项目刷新出生成的代码

在这里插入图片描述
<5>新建Client进行测试

package util;

import java.util.ArrayList;
import java.util.List;

import student.StudentPO;
import student.StudentServiceImpl;
import student.StudentServiceImplService;

public class Client {

	public static void main(String[] args) {
		
		List<StudentPO> studentPOs=new ArrayList<>();  		
        StudentServiceImplService factory = new StudentServiceImplService();
        StudentServiceImpl StudentService=factory.getStudentServiceImplPort();
        studentPOs=StudentService.findAllStudent();
    	System.out.println(studentPOs.toString());

	}

}

运行程序可以看到查询结果
在这里插入图片描述
3.1 远程服务调用
-----不用生成本地代码,直接通过服务地址进行调用
<1>新建普通java项目

<2>新建实体类

package student;

public class StudentPO {
	
	private String id;
	private String name;
	private String sex;
	private int gender;
	
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	public int getGender() {
		return gender;
	}
	public void setGender(int gender) {
		this.gender = gender;
	}

}

<3>新建接口

package student;

import java.util.List;

import javax.jws.WebMethod;
import javax.jws.WebService;


@WebService
public interface StudentService {
	
	@WebMethod
	public List<StudentPO> findAllStudent();

}

<3>新建测试类

package util;

import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

import javax.xml.namespace.QName;
import javax.xml.ws.Service;

import student.StudentPO;
import student.StudentService;

public class RMIClient {
	
	public static void main(String[] args) throws MalformedURLException {
		 
		//WSDL地址 
        URL url = new URL("http://localhost:8060/StudentService?wsdl");  
       
        //创建服务  
        //1.namespaceURI - 命名空间地址  
        //2.localPart - 服务名称  
        QName qname = new QName("http://student/", "StudentServiceImplService");    
        Service service = Service.create(url, qname);  
        
        //获取实现类  
        StudentService studentService=service.getPort(StudentService.class);
        List<StudentPO> studentPOs=new ArrayList<>(); 
        studentPOs=studentService.findAllStudent();
        System.out.println(studentPOs);
	}

}

<3>运行
在这里插入图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值